#include<reg52.h> #define uint unsigned int #define uchar unsigned char
sbit P10=P1^0; sbit P11=P1^1; //位碼口 sbit P12=P1^2; sbit P13=P1^3;
sbit P32=P3^2;
unsigned char code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //對應0---9 unsigned char Data_Buffer[4]={0,0,0,0}; //存放統計的數據。 單位為(100uS)
uint time=0;
void fenge() //分割數據,以便于統計較大間隔時間。 { Data_Buffer[0]=time/1000; Data_Buffer[1]=time/100%10; Data_Buffer[2]=time/10%10; Data_Buffer[3]=time%10; }
void display() //用于四個數碼管顯示數據 { uchar Bit=0; while(1) { Bit++; if(Bit>=4) Bit=0; P0=Duan[Data_Buffer[Bit]]; //數據的輸出 switch(Bit)//開位碼 { case 0: P10=0;break; case 1: P11=0;break; case 2: P12=0;break; case 3: P13=0;break; } } }
void mian() { EX0=0; EA=1; IT0=0;//低電平有效
TMOD=0x02; //設置為自動重載方式 TH0=0x92; //設置為100uS的計數 TL0=0x92; TR0=0;
while(1) { fenge(); display(); time=0; //當前顯示完畢后,清當前time的值 EX0=1; //開啟外部中斷 }
}
void zhongduan() interrupt 0 { TR0=1; if(TH0==1) //100uS定時器溢出 { time++; //統計兩個脈沖的時間 TH0=0; } if(P32==1) //如果外部中斷變為高電平,關閉中斷。保證統計的是兩個脈沖的間隔時間。為主函數顯示數據爭取時間。 EX0=0;
}
有點問題,誰能幫我改改嗎! |