|
單片機(jī)C語言,適合于初學(xué)者。
低功耗模式的按鍵去抖開關(guān)機(jī)
單片機(jī)源程序如下:
- #include <reg52.h>
- sbit KEY4 = P3^2;
- unsigned char code LedChar[] =
- { //定義表格一定要使用code,這樣會(huì)做到程序存儲(chǔ)區(qū)中
- 0x3F, //表格第1步數(shù)據(jù)0b00111111
- 0x06, //表格第2步數(shù)據(jù)0b00000110
- 0x5B, //表格第3步數(shù)據(jù)0b01011011
- 0x4F, //表格第4步數(shù)據(jù)0b01001111
- 0x66, //表格第5步數(shù)據(jù)0b01100110
- 0x6D, //表格第6步數(shù)據(jù)0b01101101
- 0x7D, //表格第7步數(shù)據(jù)0b01111101
- 0x07, //表格第8步數(shù)據(jù)0b00000111
- 0x7F, //表格第9步數(shù)據(jù)0b01111111
- 0x6F, //表格第10步數(shù)據(jù)0b01101111
- };
- bit KeySta = 1; //當(dāng)前按鍵狀態(tài)
- unsigned char Ke;
- void main()
- {
- bit backup = 1; //按鍵值備份,保存前一次的掃描值
- unsigned char cnt = 0; //按鍵計(jì)數(shù),記錄按鍵按下的次數(shù)
-
- EA = 1; //使能總中斷
- TMOD = 0x01; //設(shè)置T0為模式1
- TH0 = 0xF8; //為T0賦初值0xF8CD,定時(shí)2ms
- TL0 = 0xCD;
- ET0 = 1; //使能T0中斷
- TR0 = 1; //啟動(dòng)T0
- P0 = LedChar[cnt]; //顯示按鍵次數(shù)初值
-
- while (1)
- {
- if (KeySta != backup) //當(dāng)前值與前次值不相等說明此時(shí)按鍵有動(dòng)作
- {
- if (backup == 0) //如果前次值為0,則說明當(dāng)前是彈起動(dòng)作
- {
- cnt++;
- P0=0;
-
- if(Ke==0)
- {
- IT0 = 1; //外部中斷0為下降沿觸發(fā)
- EX0 = 1; //使能總中斷
- EA = 1;
- PCON=0x02;
- }
- Ke++;
- if(Ke==2) Ke=0;
- // else if(Ke!=1) Ke=0;
- if (cnt >= 10)
- { //只用1個(gè)數(shù)碼管顯示,所以加到10就清零重新開始
- cnt = 0;
-
- }
- P0 = LedChar[cnt]; //計(jì)數(shù)值顯示到數(shù)碼管上
- }
- backup = KeySta; //更新備份為當(dāng)前值,以備進(jìn)行下次比較
- }
- }
- }
- /* T0中斷服務(wù)函數(shù),用于按鍵狀態(tài)的掃描并消抖 */
- void InterruptTimer0() interrupt 1
- {
- static unsigned char keybuf = 0xFF; //掃描緩沖區(qū),保存一段時(shí)間內(nèi)的掃描值
-
- TH0 = 0xF8; //重新加載初值
- TL0 = 0xCD;
- keybuf = (keybuf<<1) | KEY4; //緩沖區(qū)左移一位,并將當(dāng)前掃描值移入最低位
- if (keybuf == 0x00)
- { //連續(xù)8次掃描值都為0,即16ms內(nèi)都只檢測(cè)到按下狀態(tài)時(shí),可認(rèn)為按鍵已按下
- KeySta = 0;
- }
- else if (keybuf == 0xFF)
- { //連續(xù)8次掃描值都為1,即16ms內(nèi)都只檢測(cè)到彈起狀態(tài)時(shí),可認(rèn)為按鍵已彈起
- KeySta = 1;
- }
- else
- {} //其它情況則說明按鍵狀態(tài)尚未穩(wěn)定,則不對(duì)KeySta變量值進(jìn)行更新
- }
- void int0() interrupt 0
- {
- PCON=0;//喚醒單片機(jī)
- }
復(fù)制代碼
所有資料51hei提供下載:
按鍵去抖開關(guān)機(jī).rar
(27.78 KB, 下載次數(shù): 43)
2018-10-27 22:49 上傳
點(diǎn)擊文件名下載附件
按鍵去抖開關(guān)機(jī) 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|