![]() |
發布時間: 2020-5-30 19:12
正文摘要:大家好,我最近自學51單片機,新手小白一個。我想用89C52實現下面功能:利用單89C52兩個外部中斷測輸入的兩個先后產生的單脈沖發生產間隔,也就是圖中CH1輸入脈沖到CH2輸入脈沖的間隔時間,利用數碼管顯示出來,兩個 ... |
1、采用的共陽極數碼管,P1是段碼,P2是位選。 2、檢測INT0,INT1的下降沿間隔。輸出數字,100us輸出100,使用定時器0檢測間隔時間。最大檢測65535us |
#include<reg52.h> #define uint unsigned int #define uchar unsigned char // 0 1 2 3 4 5 6 7 8 9 uchar code Duan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //??0-9 uchar code wei[]={1,2,4,8}; // uchar Data_buffer[4]; uchar disp_num=0; uint time=0; uint time_count=0; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void disp_change(uint data_change) { Data_buffer[0]=data_change/1000; Data_buffer[1]=data_change/100%10; Data_buffer[2]=data_change/10%10; Data_buffer[3]=data_change%10; } void display() { if(disp_num==0)disp_change(time); P1=0; P2=wei[disp_num]; P1=Duan[Data_buffer[disp_num]]; if(disp_num==3)disp_num=0; else disp_num++; } void main() { EX0=0; EX1=0; EA=1; IT0=1; // IT1=1; TMOD=0x01; // TH0=0x0; //100us??? TL0=0x0; TR0=0; time=1234; EX0=1; ET0=1; while(1) { display(); delay(100); } } void zhongduan1()interrupt 0 { TR0=1; time_count=0; EX0=0; EX1=1; } void zhongduan2()interrupt 2 { TR0=0; time=TH0*256+TL0-15; TH0=0; TL0=1; EX0=1; EX1=0; } |