单片机按键设计方案
第一种是最简单和最基础的,对于单片机初学者很容易理解和使用,但是缺点是,需要在主循环中不断检测按键是否按下,并且需要做消抖处理。若主循环中某个函数任务占用时间较长,则按键会有不同程度的“失灵”。
第二种,优点是能够在有限的GPIO情况下,扩展尽可能多的按键。但缺点同上,需要不停检测按键是否按下。
第三种方式是效率最高,不需要循环检测按键是否按下,但是缺点是,需要单片机有足够的外部中断接口以供使用。
第四种的优点是,只需要单片机的一个ADC接口,一根线,就能对多个按键进行识别,缺点是按键一旦内部接触不良,则可能按键串位,且按键产生的抖动,会造成一定的识别错误。
在以上的三种常见按键设计的基础上,现在分享我学习和工作中总结的按键方案。
改进一:在原方案一的基础上,加上与门电路,使得任何一个按键按下,都能产生中断,然后在中断里面识别是哪个按键被按下。因此不需要循环扫描,大大提高了效率。方案如图1.5所示。只需要每个按键对应地增加一个二极管,利用二极管的线与特性,可以实现按下任何按键,都能产生中断信号,但是按键之间互不影响。二极管选用普通整流二极管即可,本人亲测可行。
改进二:在原有的ADC按键的基础上,也可用增加二极管的方式,实现按键中断,并在中断服务程序里进行AD转换,从而识别按键。电路如图1.6所示。
改进三:因为按键不可避免的有抖动,因此按键消抖可以通过硬件消痘和软件消抖。现在分享一个十分简单且有效的硬件消痘方法:给按键并联一个104左右的电容。软件上基本不用处理即可避免抖动。
改进四:在按键扫描检测的方案下,如果主循环中有某个函数占用时间较长,则按键会发生或长或短的“失灵”,现分享我的一个解决方案。将按键扫描放到定时器中断里面,这样就可周期性地检测按键按下情况,不受主循环的影响。
并且,能解析出按键的不同状态,即按下、按住、弹起、为按下这四种状态,用以实现更丰富的功能。
但需注意两点:一是定时器的定时时间,不可过长也不可过短,过长容易检测不到按下,过短会占用大量时间资源。二是中断服务程序需简单明了,只做检测用,通过全局变量传递,在主循环内完成按键响应,中断服务函数内尽量不要占用太多时间。
单片机按键电路设计
在学习单片机的时候想必大家都接触过按键,按键是一个人机交互的接口设备,在刚开始接触的时候最简单也是最直接的办法就是将按键直接接到一个I/O口上,然后检测I/O上的电平变化,假设按键另一端接在GND上,则一旦检测到低电平就认为是按键触发了(此处假设已经进行了去抖,软件去抖也好,硬件去抖也好),乍一看,no problem!而且还是very good!其实这对于初学者而言确实是入门的不二选择,但对大佬而言就是错误的设计思想。问题出在去检测I/O口这个过程,CPU必须每隔一段时间检测,一般用定时器去实现,间隔时间太长了达不到实时的性能,时间太短了有浪费CPU资源,因为在很多场合按键处于触发的时间段时相当少的,比如学校的自动圈存机,一般情况下时没人用的,那就意味着CPU每间隔时间去查看I/O是非常不合理的,只有当按键按下采取查看,这才是最合理的方式。这样就必须引入外部中断的设计方案,一个按键的设计原理图如下:
如果有两个甚至多个按键,那如何弄了,很简单,使用或门来解决这个问题。电路图如下:
相关问答
单片机 中如何用 按键 进行方式切换-ZOL问答假设按键按下为低电平;if(key1==0){while(key1==0);//弹起后执行{按键1需要执行的功能;}}if(key2==0){while(key2==0);//弹起...
单片机按键 开关是什么?单片机按键开关是一种应用于单片机系统的输入设备,通常由按键和额外的元器件(如电容器和电阻器等)组成。其作用是在按键被按下之后,产生一个由0到1的状态转变...
单片机按键 功能实现原理?单片机按键功能的实现原理是通过将按键连接到单片机的某个引脚,在程序中进行相应的输入输出操作。当按键按下时,引脚会被拉低,单片机便会对该引脚的电平状态进...
请问 单片机 怎么用独立 按键 按一下实现一个功能,按另一个 按键 实现另一个功能,这个代码要怎么写啊?如果这两个功能都是一个死循环,可以考虑用中断,这样就不必在两个独立的功能中插入按键检测了while(1){while(flag==1){死循环1}while(flag==2){死循环2}}....
单片机 的 按键 开关抖动的产生原因,抖动的特点和如何消除抖动 ...判定打开,软件解决可以降低成本,但是有时候硬件劣化超出延时的范围会造成故障。硬件解决:专用的去抖芯片或者自己组装一个双稳态消抖电路,...开关...
单片机 的独立键盘有什么用?很多的嵌入式或者单片机系统中,一般都需要向嵌入式或者单片机系统输入信息的外设,以及嵌入式或者单片机向外输出信息的外设我们常见的显示屏,数码管等就是嵌...
单片机 矩阵 按键 原理?矩阵式结构的键盘列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电...
单片机 的 按键 开关抖动的产生原因,抖动的特点和如何消除抖动 ...件延时去抖(其实是一种忽略)和硬件去抖软件判断:开关闭合——延时——是否还是闭合?——如果是就判定打开,软件解决可以降低成本,但是有时...——...
单片机 用一个IO口采集多个 按键 信号,如何实现?在设计中如果用到IO口不够用,我们肯定第一时间想到的就是通过电阻分压,根据按下不同按键,来让不同阻值的电阻接到分压电路中,然后ADC模块做电压数据读取分析...
怎么用 按键 调整 单片机 的延时时间-ZOL问答延时函数的时间用按键调节就行了这个好说你好!这个要看你总体的实现功能要求了,代码完成了吗用不同的占空比控制LED的亮度,手里没有ATtiny2313的,有一个51的...