标题:
简洁的单片机按键消抖程序分享
[打印本页]
作者:
1111513
时间:
2021-11-4 17:25
标题:
简洁的单片机按键消抖程序分享
/*独立按键三行*/
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
时间:
2021-11-6 08:55
谢谢分享,这个确实不错,实际应用非常好。
作者:
ShawZJ
时间:
2023-3-30 11:44
谢谢分享,这个非常不错
作者:
joyb
时间:
2023-3-30 14:14
这个按键消抖的原理是什么
作者:
lkc8210
时间:
2023-3-30 15:03
joyb 发表于 2023-3-30 14:14
这个按键消抖的原理是什么
这不是消抖,这只是下降沿触发
没按键时
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下降沿触发)
Cont => 0x01
P30 继续按下
KEYPORT => 0xFE
ReadData => 0xFE ^ 0xFF => 0x01
Trg => 0x01 & (0x01 ^ 0x01) => 0x01 & 0x00 => 0x00
Cont => 0x01
所以放在whil(1)是没有消抖效果的
必需以固定的时间(如10ms)来扫描才可以消抖
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1