详解单片机的按键检测与控制
按键在单片机控制系统中起到人机交互的作用,通过按键可以输入数据、命令和各种参数,按键侧键测处理是单片机系统设计和开发中一个重要的内容,关系到整个系统的交互性能和稳定性。按键处理形式在单片机系统中有两种形式:直接按键和矩阵编码键盘,下面分别对这两种按键检测电路的特点及编程思路和方法进行分析和介绍。
按键抖动问题产生的原因及解决方法
按键的抖动问题是指按键的触点在闭合和断开瞬间由于接触情况不稳定,从而导致电压信号的抖动现象(由按键的机械特性造成,不可避免)。图8-1所示为一次按键的抖动过程,在按键的前沿和后沿都会有5~10ms的抖动。
图8-1 按键抖动示意图
对于时钟是微秒级的单片机而言,键盘的抖动有可能造成单片机对一次按键的多次处理。为了提高系统的稳定性,我们必须采用有效的方式消除抖动。
去除抖动可以采用硬件方式和软件方式。硬件方式一般是在按键与单片机的输入通道上安装硬件去抖电路(如RS触发器)。软件方式的实现方法是:当查询到电路中有按键按下时,先不进行处理,而是先执行10~20ms的延时程序,延时程序结束后,再次查询按键状态,若此时按键仍为按下状态,则视为按键被按下。
按键检测电路及应用
1. 独立式按键
独立式键盘相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他按键的工作状态,CPU可直接读取该I/O线的高/低电平状态。这种按键硬件、软件结构简单,判键速度快,使用方便,但占用I/O口线较多,适用于按键数量较少的系统中。
独立连接式键盘连接如图8-2所示。当没有键被按下时,所有的数据输入线均为高电平;当任意一个按键被按下时,与之相连的数据输入线将变为低电平;通过相应指令,可以判断是否有键被按下。
图8-2 独立式键盘接口设计
【例8-1】 利用单片机的P1.0~P1.34个I/O口检测4个按键的触发信息,以实现不同功能的控制。
硬件电路参见图8-2所示,C51参考程序如下:
2. 矩阵式按键
在单片机系统中,当按键数量较多时,为了减少IO口的使用,通常将按键排列成矩阵型式。例如下例中的16个按键,被排列成了如图8-3所示的4X4矩阵方式。该矩阵式键盘由4根行线和4根列线组成,每个行线和列线的交叉点是一个按键。
【例8-2】 将矩阵式键盘的按键值通过数码管显示出来。
电路连接如图8-3所示(电源和震荡电路未标出)。
图8-3 矩阵式键盘按键显示电路图
如何判断被按下的键值呢?
分析如下:
根据下面的电路图,如果已知P1.0端口被置为低电平“0”,那么当按键K0被按下时,可以肯定P1.4端口的电平也变为了低电平“0”。基于这个原理,总结矩阵键盘识别按键的步骤如下:
a)首先判断是否有按键被按下
本例中矩阵键盘中P1端口低4位连接的是列线,高4位连接的是行线。将全部行线置为低电平“0”,全部列线置为高电平“1”。然后检测列线的状态。只要有一根列线的电平为低,则表示有按键被按下。否则没有按键按下。
b)按键消抖
当判断到有按键被按下后,还要进行消抖处理,以确认真正有按键被按下。
c)按键识别
当确认有键被按下后,采用逐行扫描的方法来确定是哪一个按键被按下。先扫描第一行,即将第一行输出低电平“0”,然后读取列值,那一列出现低电平“0”,则说明该列与第一行交叉处的按键被按下。如果读入的列值全部为"1",说明与第一行连接的按键均没有被按下。那么接下来开始扫描第二行,以此类推。直到完成全部行线的扫描。
C51程序如下:
矩阵式键盘与I/O接口应用
【例8-3】 四位数字密码锁
四位数字密码锁功能:通过键盘输入密码,当输入密码与内置密码相同时,继电器动作,表示密码锁解开。为了简化功能,该密码锁只使用12个键(即4x3键盘),其中S1~S9为1~9数字键,S10为0数字键,S11为“*”键作为确认键使用,而S12为“#”键作为复位键,键盘接口电路如图8-4所示,键值布局如表8-1所示。
图8-4 行列式键盘电路连接图
表8-1 键盘布局表
单片机上电时,数码管显示“0000”,此时输入数字,数码管将显示按键值,数字逐个向左递增,四次输入完毕,四个数码管显示输入的数,此时按“*”号按键将启动比较,若输入数字与内设密码相同,继电器动作。如不同,则系统复位等待重新输入密码。当按“#”号键,系统复位,数码管显示“0000”。
在上面键扫描程序基础上增加的源程序如下:
单片机入门-C51语言实现矩阵键盘按键检测和数码管显示
单片机入门-C51语言实现矩阵键盘按键检测和数码管显示视频教程:
视频加载中...
按键是一种常开型按钮开关,平时键的二个触点处于断开状态,按下键时它们才闭合。按键控制电路就是用来实时监视按键,当有键接下时,电路监控中的输入引脚电平发生变化,检测到这种变化后,控制电路进行按键扫描,定位按键的位置,并把相关的按键信息反馈回上一层应用中。
单片机系统在需要按键较多的场合中普遍使用这种行列式非编码键盘,或者叫矩阵键盘。矩阵按键相当于 4 组每组各 4 个独立按键,一共是 16 个按键。在使用这类键盘时主要解决以下几个问题:
①键的识别。有很多种方法,一般采用逐行扫描和逐列扫描的方式,得到行号和列号,根据键号=列号+4*行号,得到键值。
②键的抖动。按键通常有按下、松手、长按这几个状态,需要支持按下检测、松手检测、长按、连击的功能,并且需要对按键进行去抖滤波,这些方法相对复杂,一般采用延时的方法比较简单。
代码如下:
相关问答
请问怎么用 单片机 获取矩阵 键盘 各按键的按下与松开的状态-ZO...键盘讨论回答(4)有问题,当按下多个按键时,消抖都没用了。有计数法,但是需要消耗更多的内存。可以识别具体的键位,键的按下弹起状态,消抖。每个按键状态独立...
C51 单片机 , 键盘 输入有什么特点?为何要消除 键盘 抖动?-ZOL问答为何要消除键盘抖动?电子书纽曼纽曼C51讨论回答(5)自己写个测试下就知道为什么。51单片机键盘一侧与地相连,一侧与单片机I/O口相连,按下键盘,I/O口即为低...
单片机 keil软件模拟,怎么调出矩阵 键盘 和流水灯,数码管窗口?你是说用keil做软件仿真矩阵键盘和流水灯吧?点击Debug->StartDebugSession,或者是直接按Ctrl+F5,然后在Peripherals菜单下将I/O-Ports选出来,...
我用电脑 键盘 控制 单片机 灯为何不亮呢,请各位帮帮忙!-ZOL问答使用51单片机内部定时器和EEPROM即可实现有用(0)回复展开查看全部8条讨论...华硕笔记本键盘字母变数字怎么回事802.4万浏览34回答王者荣耀限量版手机值...
51 单片机 ,用单独 键盘 控制静态数码管显示1-8,自学的,错误连篇...键盘大神讨论回答(2)报一堆错不要怕,先搞定第一个错再rebuild,也许很多后面的错就不存在了。你先把下面这几行中sbitK8=P0^7;voidanjian()voidyan...
如何进行 单片机键盘 电路的设计?[回答]其实比较好写的..行是,P3.0-P3.3,例是,P3.4-P3.7,最后得到的键值存在,KEYS中数为,0-15,有什么问题可以再问...START:MOVP1,#00HMOVP2,#0...
单片机 矩阵 键盘 最后一列没有反应?关机以后重启试试,或者没有相应的操作关机以后重启试试,或者没有相应的操作
单片机 16个按键每个键分别1~16的数字,在数码管显示,为何显...还有键盘没有防抖功能,q没赋初值,都容易出问题,比如main里刚运行完key_press检测到键盘,然后进key_scan里时键盘抖动了,key_press没检测出来,q就不会被赋值,e=q...
ad矩阵 键盘 怎么接入 单片机 ?您好,ad矩阵键盘接入单片机的步骤如下:1.选择合适的ad矩阵键盘,根据需要确定键盘的行数和列数。2.将ad矩阵键盘的行和列分别连接到单片机的IO口上。3.在单...
单片机 高手,肯定要帮忙啊!P2口是 键盘 ,P1.0输出,硬件如图,为...可能原因之二:51单片机上电时候全部IO口默认高电平。GND接地后才能复位,用protel仿真一下,或者用proteus仿真。首先看你这是NPN开关管,需要高电平导通。你既...