標(biāo)題:
簡(jiǎn)潔的單片機(jī)按鍵消抖程序分享
[打印本頁(yè)]
作者:
1111513
時(shí)間:
2021-11-4 17:25
標(biāo)題:
簡(jiǎn)潔的單片機(jī)按鍵消抖程序分享
/*獨(dú)立按鍵三行*/
unsigned char Trg;
unsigned char Cont;
#define KEYPORT P3
void Key_Read( void )
{
unsigned char ReadData = KEYPORT^0xff;
Trg = ReadData & (ReadData ^ Cont);
Cont = ReadData;
}
void main()
{
while(1)
{
Key_Read();
if(Trg & 0x08)//S4按下
{
//操作1
}
if(Trg & 0x04)//S5
{
//操作2
}
//其他程序
}
}
作者:
wzqwxx
時(shí)間:
2021-11-6 08:55
謝謝分享,這個(gè)確實(shí)不錯(cuò),實(shí)際應(yīng)用非常好。
作者:
ShawZJ
時(shí)間:
2023-3-30 11:44
謝謝分享,這個(gè)非常不錯(cuò)
作者:
joyb
時(shí)間:
2023-3-30 14:14
這個(gè)按鍵消抖的原理是什么
作者:
lkc8210
時(shí)間:
2023-3-30 15:03
joyb 發(fā)表于 2023-3-30 14:14
這個(gè)按鍵消抖的原理是什么
這不是消抖,這只是下降沿觸發(fā)
沒(méi)按鍵時(shí)
KEYPORT => 0xFF
ReadData => 0xFF ^ 0xFF => 0x00
Trg => 0x00 & (0x00 ^ 0x00) => 0x00 & 0x00 => 0x00
Cont => 0x00
P30 按下
KEYPORT => 0xFE
ReadData => 0xFE ^ 0xFF => 0x01
Trg => 0x01 & (0x01 ^ 0x00) => 0x01 & 0x01 => 0x01 (P30下降沿觸發(fā))
Cont => 0x01
P30 繼續(xù)按下
KEYPORT => 0xFE
ReadData => 0xFE ^ 0xFF => 0x01
Trg => 0x01 & (0x01 ^ 0x01) => 0x01 & 0x00 => 0x00
Cont => 0x01
所以放在whil(1)是沒(méi)有消抖效果的
必需以固定的時(shí)間(如10ms)來(lái)掃描才可以消抖
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1