樓主這個(gè)秒表程序很簡(jiǎn)單,1個(gè)按鍵控制開(kāi)始/停止/清0。
無(wú)標(biāo)題.jpg (104.07 KB, 下載次數(shù): 48)
下載附件
2020-6-19 10:01 上傳
- #include <reg51.H>
- #define uint unsigned int //宏定義無(wú)符號(hào)整型數(shù)據(jù)
- #define uchar unsigned char //宏定義無(wú)符號(hào)字符型數(shù)據(jù)
- sbit key=P3^7;
- uchar code table[]={//共陰數(shù)碼管段碼"0~f-."
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x40,0x80};
- uchar Cnt10ms=0,Cnt1s=0; //中斷計(jì)時(shí)變量
- bit pause=0; //暫停標(biāo)志
- /***********按鍵掃描程序****************/
- void keyscan()
- {
- static uchar value=0,count=0;//鍵值/計(jì)數(shù)變量
- if(!key) //檢測(cè)輸入如果為0
- {
- count++; //消抖
- if(count==2) //10~20ms
- {
- value++;
- if(value>=3)
- value=0;
- switch(value)
- {
- case 0: Cnt10ms=0;Cnt1s=0;break;//清0
- case 1: pause=1; break;//計(jì)時(shí)
- case 2: pause=0; break;//暫停
- }
- }
- if(count>2)
- count=2; //防止溢出
- }
- else count=0; //松手清0
- }
- /***********定時(shí)器初始化程序****************/
- void Timer0Init(void) //10毫秒@12.000MHz
- {
- TMOD= 0x01; //設(shè)置定時(shí)器模式
- TL0 = 0xF0; //設(shè)置定時(shí)初值
- TH0 = 0xD8; //設(shè)置定時(shí)初值
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
- EA=1; //開(kāi)總中斷
- ET0=1; //開(kāi)定時(shí)器0中斷
- }
- /***********顯示程序****************/
- void display()
- {
- if(Cnt1s<60)
- {
- P2=table[Cnt1s/10];//顯示十位
- P3=table[Cnt1s%10]|0x80;//顯示個(gè)位不影響P3.7按鍵
- }
- else
- {
- P2=0x79;//顯示'E'
- P3=0x40|0x80;//'-'顯示個(gè)位不影響P3.7按鍵
- }
- }
- /***************主程序****************/
- void main()
- {
- Timer0Init(); //定時(shí)器初始化
- while(1)
- {
- display(); //顯示程序
- }
- }
- /**************中斷服務(wù)程序*****************/
- void timer0() interrupt 1 //10毫秒@12.000MHz
- {
- TL0 = 0xF0; //設(shè)置定時(shí)初值
- TH0 = 0xD8; //設(shè)置定時(shí)初值
- if(pause==1) //暫停/啟動(dòng)
- {
- Cnt10ms++; //中斷變量Cntus自+1
- if(Cnt10ms>=100) //1s
- {
- Cnt10ms=0; //清0
- if(Cnt1s<60)
- Cnt1s++;//秒計(jì)數(shù)
- }
- }
- keyscan(); //按鍵掃描
- }
復(fù)制代碼
|