標(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