- #include <AT89X51.H>
- //********数码管位代码表(P0口)**********//
- unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0x7f};
- //********数码管段代码表(P2口,共阴且高位接a,低位接h笔段)**********//
- unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- //********8位数据缓冲器**********//
- unsigned char dispbuf[8];
- unsigned char temp[8];
- unsigned char dispcount;
- unsigned char T0count;
- unsigned char timecount;
- bit flag;
- unsigned long x;
- //*********初始化模块**********//
- void initial(void){
- TMOD=0x15;
- TH0=0;
- TL0=0;
- TH1=(65536-4000)/256;
- TL1=(65536-4000)%256;
- TR1=0;
- TR0=0;
- ET0=1;
- ET1=1;
- EA=1;
- }
- //******************************************************//
- //*********显示模块**********//
- void dataDisplay(){
- unsigned char i;
- for(i=0;i<8;i++){
- temp[i]=0;
- }
- i=0;
- while(x/10)
- {
- temp[i]=x%10;
- x=x/10;
- i++;
- }
- temp[i]=x;
- for(i=0;i<8;i++){
- dispbuf[i]=temp[i];
- }
- P2=dispcode[dispbuf[dispcount]];
- P0=dispbit[dispcount];
- dispcount++;
- if(dispcount==8)
- {
- dispcount=0;
- }
- }
- //******************************************************//
- //*********信号频率测量模块**********//
- float frequency(float freq)
- {
- initial();
- TR0=1;TR1=1;
- if(timecount==250)
- {
- TR0=0;
- freq=T0count*65536+TH0*256+TL0;
- return(freq);
- }
- }
- //******************************************************//
- //*********信号周期测量模块**********//
- float cycle(float count){
- initial();
- if(P3_4==1){
- TR0=1;TR1=1;
- if(P3_4==0){
- TR0=0;
- count=1000000/(timecount*4000+TH1*256+TL1-61536);
- }
- }
- return(count);
- }
- //******************************************************//
- //*********定时中断服务程序1**********//
- void t1(void) interrupt 3 using 0{
- //initial();
- //TR0=1;
- //TR1=1;
- TH1=(65536-4000)/256;
- TL1=(65536-4000)%256;
- timecount++;
- }
- //******************************************************//
- //*********定时中断服务程序2**********//
- void t0(void) interrupt 1 using 0{
- //initial();
- //TR0=1;
- //TR1=1;
- T0count++;
- }
- //******************************************************//
- //*********主函数**********//
- void main(void){
- while(1){
- x=frequency(x);
- if(x<100){
- x=cycle(x);
- }
- dataDisplay();
- }
- }
- //******************************************************//
复制代码 |