10秒的秒表 源程序,分析、學(xué)習(xí)使用
轉(zhuǎn)自:http://www.zg4o1577.cn/mcu/2184.html
- #include <reg51.h>
- unsigned char code seg7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} //數(shù)碼管碼表
- unsigned char code tab[]={0xfe,0xfd}; //數(shù)碼管位選
- unsigned char cnt=0; //位選變量
- unsigned char deta=0,sec=0; //0.01秒變量,和秒變量
- sbit stop=P3^3; //暫停鍵
- void init() //定時初始化
- {
- TMOD=0x11;
- TH1=0xd8;
- TL1=0xf0;
- TR1=1;
- TH0=0xfc;
- TL0=0x18;
- TR0=1;
- ET1=1;
- ET0=1;
- EA=1;
- }
- void time10ms()interrupt 3
- {
- TH1=0xd8;
- TL1=0xf0;
- deta++;
- }
- void show()interrupt 1 //掃描顯示2位數(shù)碼管
- {
- TH0=0xfc;
- TL0=0x18;
- ++cnt;
- if(cnt>1)cnt=0;
- switch (cnt)
- {
- case 0: P0=seg7[sec%10];P2=tab[0];break;
- case 1: P0=seg7[sec/10];P2=tab[1];break;
- default:break;
- }
- }
- void showtime() //時間顯示
- {
- if((deta>10)&&stop){sec++;deta=0;} //如果P3^3 不按下,則為高電平,不暫停時間。
- if(sec==99)sec=0;
- }
- void main()
- {
- init();
- while(1)
- {
- showtime();
- }
- }
復(fù)制代碼
|