| /* 想用外部中断0接收外部的脉冲信号? 通过定时器1的计时计算每个脉冲的周期
 思路:  初始化--T0计数---T0第一次计满进入中断时T1开始计时---T0进入中断6次后T0停止计时--计算每个脉冲的周期
 遇到的问题:不显示数,如果现实则每次显示的数不一样,但是每次的示数应该是一样的
 希望各位高人指教新人,不胜感激!
 */
 #include<reg52.h>
 #define uchar unsigned char
 #define uint unsigned int
 sbit dula=P2^6;
 sbit wela=P2^7;
 uint num,cou;
 uchar bai,shi,ge;
 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
 0x7f,0x6f};
 void init();
 void delay(uint x);
 void display(uchar bai,uchar shi,uchar ge );
 void main()  //主函数
 {
 init();
 while(1)
 {    num=num/10;//每个脉冲的时间
 bai=num/100;
 shi=(num-bai*100)/10;
 ge=num%10;
 display(bai,shi,ge);
 }
 
 }
 void init()   //初始化
 {      TMOD=0x2e;//定时器0设为自动重装计数方式,T1为自动重装计数器
 TH0=256-106;
 TL0=256-106;
 TH1=256-206;
 TL1=256-206;
 
 EA=1;
 ET0=1;
 ET1=1;
 IT0=1;
 EX0=1;
 TR0=1;
 }
 void time0() interrupt 1//计数器计脉冲的个数
 {         cou++;
 if(cou==1)
 TR1=1;
 if(cou>5)
 TR1=0;
 
 }
 void time1() interrupt 3 //T1中断
 {      num++;
 
 }
 void display(uchar bai,uchar shi,uchar ge )//数码管显示三位
 {       dula=1;
 P0=table[bai];
 dula=0;
 wela=1;
 P0=0xfe;
 wela=0;
 delay(5);
 
 dula=1;
 P0=table[shi];
 dula=0;
 wela=1;
 P0=0xfd;
 wela=0;
 delay(5);
 
 dula=1;
 P0=table[ge];
 dula=0;
 wela=1;
 P0=0xfb;
 wela=0;
 delay(5);
 }
 void delay(uint x) //简单ms延时函数
 {       uint i,j;
 for(i=x;i>0;i--)
 for(j=110;j>0;j--);
 
 }
 |