【Proteus仿真】51单片机+数码管0-99.99秒表计数器
【Proteus仿真】51单片机+数码管0-99.99秒表计数器
- 🌻Proteus仿真演示

⛳本实验采用的是共阴数码管。
📢实验说明
🎯当按键P34按下时,开始计数,当二次按下时,将暂停计数,第三次按下时计数值清零,第四次按下时,重新开始计数,如此循环。
📝程序代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include <REGX52.H> //共阴码段码表 unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; unsigned char second=0,second_s=0; unsigned char keycnt; //按键次数检测 unsigned int tcnt; //定时器0计数 void main(void) { unsigned char i,j; TMOD=0x02; //T0工作在方式2 ET0=1; //启用定时器0 EA=1; //使能总中断 // second=0; P0=dispcode[second/10]; P2=dispcode[second%10]; P1=dispcode[second_s]; while(1) { if(P3_5==0) { for(i=20;i>0;i--) for(j=248;j>0;j--); //这是按键消抖,可以封装成函数放到这里来 if(P3_5==0) { keycnt++; switch(keycnt) { case 1: //开始跑秒 TH0=0x06; TL0=0x06; TR0=1; break; case 2: //暂停计数 TR0=0; break; case 3: //重新计数 keycnt=0; second=0; second_s=0; P0=dispcode[second/10]; P2=dispcode[second%10]; P1=dispcode[second_s]; break; } while(P3_5==0); } } } } //定时器0中断 void t0(void) interrupt 1 using 0 { tcnt++; if(tcnt>=400) { tcnt=0; second++; if(second>=100) { second=0; second_s++; second_s %=10; // if(second\_s>=10)second\_s=0; } P0=dispcode[second/10]; P2=dispcode[second%10]; P1=dispcode[second_s]; } }
|
📌程序源码和仿真资源
🎈本实验基于proteus8.12仿真平台
1 2 3
| 链接:https://pan.baidu.com/s/179l\_DEXwynughxl9ssi1GA 提取码:5gs6
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!