欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
C51單片機按鍵去抖外部中斷開關機(低功耗模式)
[打印本頁]
作者:
bifxv
時間:
2018-10-27 22:50
標題:
C51單片機按鍵去抖外部中斷開關機(低功耗模式)
單片機C語言,適合于初學者。
低功耗模式的按鍵去抖開關機
單片機源程序如下:
#include <reg52.h>
sbit KEY4 = P3^2;
unsigned char code LedChar[] =
{ //定義表格一定要使用code,這樣會做到程序存儲區中
0x3F, //表格第1步數據0b00111111
0x06, //表格第2步數據0b00000110
0x5B, //表格第3步數據0b01011011
0x4F, //表格第4步數據0b01001111
0x66, //表格第5步數據0b01100110
0x6D, //表格第6步數據0b01101101
0x7D, //表格第7步數據0b01111101
0x07, //表格第8步數據0b00000111
0x7F, //表格第9步數據0b01111111
0x6F, //表格第10步數據0b01101111
};
bit KeySta = 1; //當前按鍵狀態
unsigned char Ke;
void main()
{
bit backup = 1; //按鍵值備份,保存前一次的掃描值
unsigned char cnt = 0; //按鍵計數,記錄按鍵按下的次數
EA = 1; //使能總中斷
TMOD = 0x01; //設置T0為模式1
TH0 = 0xF8; //為T0賦初值0xF8CD,定時2ms
TL0 = 0xCD;
ET0 = 1; //使能T0中斷
TR0 = 1; //啟動T0
P0 = LedChar[cnt]; //顯示按鍵次數初值
while (1)
{
if (KeySta != backup) //當前值與前次值不相等說明此時按鍵有動作
{
if (backup == 0) //如果前次值為0,則說明當前是彈起動作
{
cnt++;
P0=0;
if(Ke==0)
{
IT0 = 1; //外部中斷0為下降沿觸發
EX0 = 1; //使能總中斷
EA = 1;
PCON=0x02;
}
Ke++;
if(Ke==2) Ke=0;
// else if(Ke!=1) Ke=0;
if (cnt >= 10)
{ //只用1個數碼管顯示,所以加到10就清零重新開始
cnt = 0;
}
P0 = LedChar[cnt]; //計數值顯示到數碼管上
}
backup = KeySta; //更新備份為當前值,以備進行下次比較
}
}
}
/* T0中斷服務函數,用于按鍵狀態的掃描并消抖 */
void InterruptTimer0() interrupt 1
{
static unsigned char keybuf = 0xFF; //掃描緩沖區,保存一段時間內的掃描值
TH0 = 0xF8; //重新加載初值
TL0 = 0xCD;
keybuf = (keybuf<<1) | KEY4; //緩沖區左移一位,并將當前掃描值移入最低位
if (keybuf == 0x00)
{ //連續8次掃描值都為0,即16ms內都只檢測到按下狀態時,可認為按鍵已按下
KeySta = 0;
}
else if (keybuf == 0xFF)
{ //連續8次掃描值都為1,即16ms內都只檢測到彈起狀態時,可認為按鍵已彈起
KeySta = 1;
}
else
{} //其它情況則說明按鍵狀態尚未穩定,則不對KeySta變量值進行更新
}
void int0() interrupt 0
{
PCON=0;//喚醒單片機
}
復制代碼
所有資料51hei提供下載:
按鍵去抖開關機.rar
(27.78 KB, 下載次數: 43)
2018-10-27 22:49 上傳
點擊文件名下載附件
按鍵去抖開關機
下載積分: 黑幣 -5
作者:
admin
時間:
2018-10-31 17:03
好資料,51黑有你更精彩!!!
作者:
dxdsjyx
時間:
2020-3-24 22:48
有電路圖嗎?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1