找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2129|回复: 4
收起左侧

简洁的单片机按键消抖程序分享

  [复制链接]
ID:977831 发表于 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
  }
  //其他程序
}
}

评分

参与人数 1黑币 +10 收起 理由
admin + 10 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:965487 发表于 2021-11-6 08:55 | 显示全部楼层
谢谢分享,这个确实不错,实际应用非常好。
回复

使用道具 举报

ID:983346 发表于 2023-3-30 11:44 | 显示全部楼层
谢谢分享,这个非常不错
回复

使用道具 举报

ID:1064915 发表于 2023-3-30 14:14 | 显示全部楼层
这个按键消抖的原理是什么
回复

使用道具 举报

ID:161164 发表于 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)来扫描才可以消抖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表