目录

1、检测电平变化,判断按键状态

2、使用中断触发,判断按键状态


机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。

​​​项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html


按键是创客开发过程中必不可少的器件之一,用户可以通过按键实现交互控制。例如:按键开关灯、长按按键解除报警、按键实现设备控制等功能。

检测按键状态有两种方式:第一种,检测按键端口的输出电压信号变化,判断按键的状态;第二种,按键状态变化触发中断。

下面让我们学习这两种检测按键状态的方法~

1、检测电平变化,判断按键状态

在如何驱动各类型传感器?这篇文章中讲到:可以将传感器进行分类,主要包括:数字量输出类型传感器、数字量输入类型传感器、模拟量电压类型传感器、模拟量电流类型传感器和协议类型传感器

按键本质上并不是传感器,但是按照驱动方式来看,可当作数字量输出类型传感器,进行驱动。

可以通过按键的设计图明白其中的原理,如下图所示,假设TP点接入单片机IO端口,当按键未被按下时,此处为5V高电平,当按键被按下时,此处就会变为0V低电平,通过这种高、低电平状态变化判断按键的状态变化。

未按下按键电压状态

按下按键电压状态

那么设计按键控制LED亮、灭的程序就非常好理解了,如下所示:

2、使用中断触发,判断按键状态

我们在设计功能时,难免要用到延时,如果延时时间过长,可以发现按键就不那么灵敏了,主要原因在于:延时消耗过多的处理器资源,程序大多时间都运行在延时函数中,无法进行按键状态的判断。

这时候就需要使用中断触发功能了~

当控制器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断,过程如下所示:

可通过监测按键电平信号变化,触发中断,如下图情况所示,当按键未按下,此时是5V高电平信号。

当按下按键瞬间,高电平会切换到低电平,产生下降沿信号,此时可触发下降沿中断。

当松开按键瞬间,低电平会切换到高电平,产生上降沿信号,此时可触发上降沿中断。

中断程序的实现也非常简单,无需在主程序中设计程序,选择合适的中断信号触发模式,将需要实现的功能写在中断处理函数中,当检测到相应的触发信号,中断处理函数就可以运行了,如下所示:

有一点需要注意,中断处理函数适合处理“急件”,处理完毕后,再回到原来被中断的地址,继续原来的工作,所以不应该在中断程序中有大量长时间的延时,以免对主程序产生影响。

和12岁小同志搞创客开发:检测按键状态的两件法宝相关推荐

  1. 和12岁小同志搞创客开发:手撕代码,做一款遥控灯

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  2. 和12岁小同志搞创客开发:手撕代码,做一款数字骰子

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  3. 和12岁小同志搞创客开发:手撕代码,做一款密室自动门

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  4. 和12岁小同志搞创客开发:手撕代码,做一款亮度可调节灯

    目录 1.PWM呼吸灯 2.亮度可调节灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/ca ...

  5. 和12岁小同志搞创客开发:手撕代码,做一款声控灯

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  6. 和12岁小同志搞创客开发:手撕代码,做一款人体感应灯

    目录 1.传感器原理 2.代码实践 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/categ ...

  7. 和12岁小同志搞创客开发:如何驱动红外遥控器?

    目录 1.红外遥控器通信原理 2.NEC协议 3.实践 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_3810 ...

  8. 和12岁小同志搞创客开发:手撕代码,做一款温湿度检测器

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  9. 和12岁小同志搞创客开发:手撕代码,做一款火焰报警器

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  10. 和12岁小同志搞创客开发:手撕代码,做一款节拍电子鼓

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

最新文章

  1. 每日一皮:996标配工位原来是这样的!
  2. c++ uint8_t* to std::string
  3. java jar包收集
  4. STL之deque和其他容器
  5. [专栏精选]TextMeshPro插件
  6. python 内存溢出_python之记录一次内存溢出
  7. 绿盾无法修改服务器地址,天锐绿盾V5.50.170626最新版修改说明
  8. 高等数学公式【上册+下册】
  9. 在linux 命令行下从http下载东西
  10. DNN硬件加速器设计1 -- 序(MIT)
  11. 接口 常见视频接口详解
  12. 关于Eclipse安装插件出现An error occurred while collecting items to be installed解决办法
  13. centos7安裝搜狗輸入法_centos7安装搜狗输入法
  14. Oracle 11.2.0.4.0 安装包校验
  15. C++程序设计重点总结(谭浩强版)
  16. 使用Python实现Linux命令的批量执行
  17. truncate函数
  18. Docker基础: Linux内核命名空间之(1) mnt namespace
  19. No safe place 无处容身 | 经济学人中英双语对照精读笔记
  20. 关于CSS3:justify-self,justify-items和justify-content之间的区别

热门文章

  1. 使用码云给同事地址地址注意事项
  2. 剑指offer-丑数
  3. 【NOIP2018】 游记
  4. codevs 2075 yh女朋友的危机
  5. 读书笔记2013第13本:《怎样解题》
  6. SQL Server 数据库备份
  7. .net wap强制输出WML
  8. 读农民工兄弟学C#文章后的感觉
  9. git粘贴命令行_git进阶,ssh和命令行
  10. python中的元类_python中的元类