当前位置: 首页 > news >正文

单片机3种按键程序消抖方法

1,查询法延时模式

    u8 key0=1;u8 x=0;KEY=1;while(1){if(KEY==0)                //"按键按下"{delay(10);            //延时10msif(KEY==0 && kdy0==1) //按下有10ms 且上状态是1。即下降沿时{key0=0;             //将上状态置0.防止按住不放时,重复执行按下程序语句。x++;                //按下执行语句}key0=KEY;               //弹起按键时将上一状态置1.否则保持为0.}P0=~smgduan[x];}

10ms延时时,程序是阻塞停止的,以下程序就不会停止主程序,

2,查询法不需要延时

    u8 keyx=0xFF;u8 x=0;KEY=1;while(1){keyx = keyx<<1 | KEY;   //左移并将KEY状态写入第0位,下一次执行时会被继续左移if(keyx !=0)            //8位没有全部为0,即没有8次检测全为"按键按下"{key0=1;             //上一状态}else if(key0==1)        //8次全0且上状态是1。即下降沿时{key0=0;             //将上状态置0.防止按住不放时,重复执行按下程序语句。x++;                //按下执行语句}P0=~smgduan[x];}

key0的作用是备份上一状态,使按下按键产生"下降沿"作用。

每一次循环检测一次,8次皆为0时确定为“按下”;如果整个程序很长,一次循环占用时间超过几十毫秒,8次就是上百几百毫秒了,这样按下时间略快时就被认为是没按下了。所以程序总时长不超过10ms时好用,超过就要这样:

将按键检测程序放在 一个2ms的定时器中断函数中,程序每2ms 就会检测一下按键的状态。虽然这个检测程序占用CPU时间,但不到0.03ms而已,0.03ms vs  2ms,不到2%占用。

3,中断法 非阻塞程序

void Int0()	interrupt 0	//外部中断0 必须用P3.2口 
{delay(10);          //与1例中都是有按下信号时延时10ms;区别是这里不需要主程序查询而已。if(KEY==0) {x++;            //执行语句}
}

因为3.2中断输入已设置为"下降沿触发方式了",一直按下也不会再有中断发生的。

非阻塞也是相对的,中断也是延时了10ms.

总结:

中断法最好,但占用一个外部中断资源。

http://www.lqws.cn/news/452773.html

相关文章:

  • DB-GPT启动提示please install by running `pip install cryptography`
  • 函数指针的回调函数与函数跳转执行
  • 国产芯片能在服务器领域替代Intel(经验总结贴)
  • Git——分布式版本控制工具
  • 【MySQL篇07】:redo log日志与buffer pool详解
  • Vue2 ElementUI Tree 拖动目标节点能否被放置及获取放置位置
  • 内存的代价:如何正确与 WASM 模块传值交互
  • 大内存对电脑性能有哪些提升
  • Docker容器常用命令汇总
  • 游戏架构中的第三方SDK集成艺术:构建安全高效的接入体系
  • 16、Redis底层数据结构
  • 网站如何启用HTTPS访问?本地内网部署的https网站怎么在外网打开?
  • FPGA--hello
  • http通信测试,模拟客户端
  • 【动手学深度学习】4.5. 权重衰减
  • Hollywood: The World’s Most Effective Propaganda System
  • 【云创智城】YunCharge充电桩系统源码实现云快充协议深度解析与Java技术实践:打造高效充电桩运营系统
  • Selenium自动化测试全解
  • opencv依据图像类型读取图像像素点
  • 【PyTorch】请问,Reproducibility中的‘:4096:8‘是什么呀?
  • 20250620-Pandas.cut
  • aws(学习笔记第四十五课) route53-failover
  • 文件夹美化工具推荐,打造个性化电脑界面
  • 【网工】华为配置专题进阶篇④
  • 学习华为 ensp 的学习心得体会
  • 10分钟撸出高性能网络服务:吃透高性能优化:缓存_锁_系统调用_编译
  • 汽车整车厂如何用数字孪生系统打造“透明车间”
  • 【React】React CSS 样式设置全攻略
  • DAY 37 早停策略和模型权重的保存
  • RPGMZ游戏引擎 如何手动控制文字显示速度