1、项目二 键盘与显示系统设计任务5 4*4键盘系统设计任务内容 组装一个小型单片机系统,外接16个按键(代表0F),以及1位数码管显示器,要求实时显示当前按下的按键值。学习目标1.掌握独立键盘和矩阵键盘的结构与接口电路设计2.了解按键抖动的原因,掌握解决方法3.掌握矩阵键盘检测方法4.掌握多分支结构的编程技巧知 识 点知识点一 非编码键盘概述知识点二 按键抖动与消抖知识点三 线性非编码键盘的识别与处理知识点四 矩阵非编码键盘的识别与处理知识点1 非编码键盘概述 键盘是单片机应用系统中最常用的输入设备,通过键盘输入数据或命令,可以实现简单的人机对话。键盘有编码键盘和非编码键盘之分。1.编码键盘 编
2、码键盘除了键开关外,还需去键抖动电路、防串键保护电路以及专门的、用于识别闭合键并产生键代码的集成电路(如8255、8279等)。编码键盘的优点是所需软件简短;缺点是硬件电路比较复杂,成本较高。知识点1 非编码键盘概述2.非编码键盘 非编码键盘仅由键开关组成,按键识别、键代码的产生以及去抖动等功能均由软件编程完成。非编码键盘的优点是电路简单、成本低;缺点是软件编程较复杂。目前,单片机应用系统中普遍采用非编码键盘。按照键开关的排列形式,非编码键盘又分为线性非编码键盘和矩阵非编码键盘两种。知识点1 非编码键盘概述(1)线性非编码键盘 线性非编码键盘的键开关(K1、K2、K3、K4)通常排成一行或一列
3、,一端连接在单片机I/O口的引脚上,同时经上拉电阻接至+5V电源,另一端则串接在一起作为公共接地端。线行非编码键盘电路配置灵活,软件结构简单,但每个按键必须占用一根I/O端口,故这种形式适用于按键数量较少的场合。图2.39 线性非编码键盘知识点1 非编码键盘概述(2)矩阵非编码键盘 矩阵非编码键盘又称行列式非编码键盘,I/O端分为行线和列线接入端,按键跨接在行线和列线上。按键按下时,行线与列线相通。图2.40所示是一个43的矩阵非编码键盘,共有4根行线和3根列线,可连接12个按键(按键数=行数列数)。与线性非编码键盘相比,12个按键只占用7个I/O口,显然在按键数量较多时,矩阵非编码较线性非编
4、码键盘可以节省很多I/O接口。图2.40 矩阵非编码键盘知识点2 按键抖动与消抖 按键是控制系统中最常见的输入设备,根据按键硬件电路的连接,按键的闭合和打开将在单片机的输入引脚上分别加入高、低电平,这样CPU就可以根据读入引脚的信号来判断按键的状态。知识点2 按键抖动与消抖 实际状况下,按键的合断都存在一个抖动的暂态过程,如图2.41所示。这种抖动的过程大约510ms,人的肉眼是觉察不到的,但对高速CPU来说,可能产生误处理。为了保证每按一次键只作一次处理,必须采取措施来消除键的抖动。图2.41 键合断时的电压抖动知识点2 按键抖动与消抖 消除抖动的措施有两种:硬件消抖和软件消抖。1硬件消抖
5、硬件消抖可以采用简单的R-S触发器或单稳电路构成,如图2.42所示,但硬件复杂,在单片机控制系统中并不常用。图2.42 硬件消抖电路知识点2 按键抖动与消抖2软件消抖 软件消抖是用延时来躲避暂态抖动过程,由于按键抖动过程仅持续510ms,因此在控制软件中执行一段大约510ms的延时程序后再读入按键的状态,不需要硬件开销,在单片机系统设计中经常采用。具体方法为:首先读取I/O口状态并第1次判断有无键被按下,若有键被按下则等待510ms,然后再读取I/O口状态并第2次判断有无键被按下,若仍然有键被按下则说明某个按键处于稳定的闭合状态;若第2次判断时无键被按下,则认为第1次是按键抖动引起的无效闭合。
6、知识点3 线性非编码键盘的识别与处理 线性非编码键盘每个按键的一端接到单片机的I/O口,另一端接地。当无按键被按下时,I/O引脚为高电平;当按下某个按键时,对应的I/O口引脚为低电平。编程时只要采用if语句不断查询I/O口引脚状态,若某I/O口为低电平,则延时5-10mS,再用if语句判断一次,若还为低电平,就执行对应按键的功能。为了确保按键每按一次执行一次操作,在判断按键按下后增加一条while语句,等待I/O口变高电平,即等待按键释放。if(K1=0)delay1ms(5);if(K1=0)while(K1=0);具体功能语句;知识点3 矩阵非编码键盘的识别与处理 在使用矩阵键盘时,连接行
7、线和列线的I/O管脚不能全部用来输出或全部用来输入,必须一个输出,另一个输入。常用方法有两种:一是行扫描法,二是线反转法。知识点3 矩阵非编码键盘的识别与处理1 1行扫描法行扫描法 通过行线发出低电平信号,如果该行线所连接的键没有按下的话,则列线所接的端口得到的是全“1”信号,如果有键按下的话,则得到非全“1”信号。为了防止双键或多键同时按下,往往从第0行一直扫描到最后1行,若只发现1个闭合键,则为有效键,否则全部作废。找到闭合键后,读入相应的键值,再转至相应的键处理程序。知识点3 矩阵非编码键盘的识别与处理知识点3 矩阵非编码键盘的识别与处理知识点3 矩阵非编码键盘的识别与处理知识点3 矩阵
8、非编码键盘的识别与处理2.线反转法线反转法 线反转法也是识别闭合键的一种常用方法,该法比行扫描速度快。先将行线作为输出线,列线作为输入线,行线输出全“0”信号,读入列线的值,然后将行线和列线的输入输出关系互换,并且将刚才读到的列线值从列线所接的端口输出,再读取行线的输入值。那么在闭合键所在的行线上值必为 0。这样,当一个键被按下时,必定可读到一对唯一的行列值。知识点3 矩阵非编码键盘的识别与处理知识点3 矩阵非编码键盘的识别与处理知识点3 矩阵非编码键盘的识别与处理3.3.矩阵非编码键盘编程过程矩阵非编码键盘编程过程 (1)判断是否有按键被按下(注意要调用延时5ms子程序判断,以消除抖动的影响)。(2)若有键被按下,通过行扫描法或反转法识别闭合键的行值和列值。(3)采用计算法或查表法将闭合按键的行值和列值转换成定义的键值。(4)根据得到的不同的键值采用不同的处理程序。任务实施任务实施任务实施任务实施调用按键扫描程序然后判断键值进行处理课后练习课后练习1.1.将键盘扫描程序修改为函数,完成本任务。将键盘扫描程序修改为函数,完成本任务。2.2.在任务一的流水灯项目电路中,增加在任务一的流水灯项目电路中,增加4 4位独立按键,每个按位独立按键,每个按键对应一种流水花色,设计程序。键对应一种流水花色,设计程序。