第7讲 矩阵键盘电路的仿真实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七讲 矩阵键盘电路的仿真实验
7.1 7.2 7.3 7.4 7.5 矩阵键盘电路的原理介绍 矩阵键盘硬件电路的设计 软件编程实现矩阵键盘的处理 矩阵键盘电路在Proteus中的验证 实例讲解
7.1 矩阵键盘电路的原理介绍
键盘功能:向单片机输入数据、命令等,是
人与单片机对话的主要手段。
7.1.1 键盘接口应解决的问题
可以参考以下的电路原理图7-9.
图7-9 参考电路图
参考源代码为: void Keys_Scan() //全局变量KeyNo传递键值 { uchar Tmp; P1=0x0f; //高4位置0,放入四行 delay(1); Tmp=P1^0x0f; //若有键按下,异或操作把低四位变为3个0,1个1 switch(Tmp) { case 1: KeyNo=0; break; case 2: KeyNo=1; break; case 4: KeyNo=2; break; case 8: KeyNo=3; break; default: KeyNo=16; //无键按下 } P1=0xf0; //低4位置0,放入四列 delay(1); Tmp=P1 >> 4 ^0x0f; //先右移四位,再取异或 switch(Tmp) { case 1: KeyNo+=0; break; case 2: KeyNo+=4; break; case 4: KeyNo+=8; break; case 8: KeyNo+=12; } }
另一种去除按键抖动的方法是采用专用的键盘/显示器接口
芯片,这类芯片中都有自动去抖动的硬件电路。
7
7.1.2 键盘分类和设计方法
键盘分为两类,包括非编码键盘和编码键盘。
非编码键盘按键直接与单片机相连,通常使用在按
键数量较少的场合。用这种键盘,系统功能通常比较
简单,需处理的任务较少,但可降低成本、简化电路
4*4矩阵键盘控制条形LED显示
如图7-6所示为控制电路。
图中,4*4矩阵键盘的四条行线接到
P1.0~P1.3,四条列线接到P1.4~P1.7,注意 总线和标号的运用;条形LED一块接到P2端 口和部分P3端口,另一块接到P3剩下部分端 口。 4*4矩阵键盘节约了I/O口线,但是识别按键 的代码要比独立键盘复杂一些。
CAP-ELEC CRYSTAL
Capacitors
Capacitors Miscellaneous
Generic
Generic -
RES
RX8 LED-BARGRAPH-GRN BUTTON
Resistors
Resistors Optoelectronics Switches & Relays
Generic
所以实时性强,效率高。
工作原理:当键盘中有按键按下时,74LS30的输出经
过74LS04反相后向单片机的中断请求输入引脚INT0*发
出中断请求信号,单片机响应中断,执行键盘扫描程序 中断服务子程序,识别出按下按键的键号,并跳向该按 键的处理程序。
11
图7-3 独立式键盘的接口电路
12
2. 矩阵式键盘
设计。按下按键的键号信息通过软件来获取。
非编码键盘常见的为两种结构:独立式键盘和矩阵
式键盘。
1. 独立式键盘 (1)查询方式的独立式键盘
特点:一键一线,键相互独立,每个按键各接一条I/O
口线,通过检测I/O输入线的电平状态,可很容易判断哪 个按键被按下,如图7-2所示。图中的上拉电阻保证按键
释放时,输入检测线上有稳定的高电平。
图7-6 矩阵键盘控制电路
7.3 软件编程实现矩阵键盘的处理
以图7-6为例,我们要求电路运行时,点亮的
LED个数与按键的键值相等,例如,按下K1 时,第1只LED(最下方)点亮,按下K2时, 前2只LED点亮,…,按下K16时,第1~16只 LED被点亮。 由原理图可知,矩阵键盘行线连接P1.0~P1.3, 列线连接P1.4~P1.7,扫描过程如下。
15
7.2 矩阵键盘硬件电路的设计
以4*4矩阵键盘为例,介绍矩阵键盘电路的设
计。 在Proteus中,常用的按键是Button,它在 Proteus元件库Switches & Relays类中,如 图7-5所示,也可以直接在Keyword栏输入 Button拾取。
图7-5 按键元器件
除此以外,我们在本例中用到的条形LED,
参考源代码为:
void main() { uchar KeyNo=-1; //-1表示无键按下 uchar i,P2_LED,P3_LED; while(1) { KeyNo=Keys_Scan(); //扫描键盘获取按键序号KeyNo if(KeyNo!=-1) { P2_LED=0xff; P3_LED=0xff; for(i=0;i<=KeyNo;i++) //键值越大,点亮的LED越多 { if(i<8) P3_LED>>=1; else P2_LED>>=1; } P3=P3_LED; P2=P2_LED; } } }
图7-8 电路运行过程
7.5 实例讲解
参照之前的例子,我们修改电路和程序,要
求数码管显示4*4矩阵键盘按键,键值从0~F, 并且按下键同时蜂鸣器响。 分析: 注意矩阵键盘的行线和列线分别与哪几根I/O 口线相连;矩阵键盘的扫描方法可以借鉴前 一例子,也可以采用其他的方法,参考代码 见后面。
1.键盘的任务
任务有3项:
(1)首先判别是否有键按下?若有,进入下一步。 (2)识别哪一个键被按下,并求出相应的键值。 (3)根据键值,找到相应键值的处理程序入口。
3
2. 键盘输入的特点
常见键盘包括触摸式键盘、薄膜键盘和按键式键盘,最常用
的是按键式键盘。
键盘按键实质上是一个开关。如图7-1(a)所示,按键开关的
首先判键盘有无键按下,即把所有行线P1.0~P1.3均
置为低电平,然后检查各列线的状态,若列线不全为高
电平,则ห้องสมุดไป่ตู้示键盘中有键被按下;若所有列线列均为高 电平,说明键盘中无键按下。
在确认有键按下后,即可进入确定具体闭合键的过程。
判断闭合键所在的位置,其方法是依次将行线置为低电 平,在逐行检查各列线的电平状态。若某列为低,则该 列线与行线交叉处的按键就是闭合的按键。
首先判断是否有键按下。为判断16个按键中是否有键 按下,程序首先在4条行线上放置4个0,即在P1端口 输出0xf0,如果有任一按键按下,则4条列线上必有一 位为0。 如果已有键按下,则判断按键所在行、列位置,并返 回按键序号。代码中行扫描码sCode初值为0xfe(1111 1110),通过将该值循环左移,可对P1.0~P1.3对应的4 行逐行发送0,每次发送扫描码后即判断高4位的4个1 中是否有0出现,如果出现0则说明按键在该列上,这 时可将发送的低4位与读取的高4位取反,也就是P1取 反,这样P1中将出现2个1,其余位均变为0,2个1分 别处在低4位和高4位中,高低4位中1所处的位置各有4 种可能,共计16种,根据取反后的值查询矩阵键盘按 键特征码表,可得按键序号。
7.4 矩阵键盘电路在Proteus中的验证
7.4.1 Proteus电路设计
1. 元件清单列表
打开Proteus ISIS编辑环境,按表7-1所列的清单添加元件
表7-1 元 件 清 单 元件名称 AT89C51 所属类 Microprocessor ICs 所属子类 8051 Family
CAP
两端分别连接在行线和列线上,通过键盘开关机械触点的断开、 闭合,其行线电压输出波形如图7-1(b)所示。
图7-1(b)所示的t1和t3分别为键的闭合和断开过程中的抖动
期(呈现一串负脉冲),抖动时间长短与开关的机械特性有关,
一般为5~10ms,t2为稳定的闭合期,其时间由按键动作确定, 一般为十分之几秒到几秒,t0、t4为断开期。
Resistor Packs Bargraph Displays Switches
2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图 7-7所示的原理图连接硬件电路。
图7-7 电路原理图
3、源程序的添加 参照第五讲在Keil中建立工程,添加源程序文件、构 建.hex文件,加载目标代码,执行程序,观察不同按键 被按下后LED灯的显示过程,如图7-8所示。
基本思想是:在检测到有键按下时,该键所对应的行线为低
电平,执行一段延时10ms的子程序后,确认该行线电平是否 仍为低电平,如果仍为低电平,则确认该行确实有键按下。当 按键松开时,行线的低电平变为高电平,执行一段延时10ms的 子程序后,检测该行线为高电平,说明按键确实已经松开。采
取以上措施,可消除两个抖动期t1和t3的影响。
4
图7-1 键盘开关及其行线波形
3.按键的识别
按键的闭合与否,反映在行线输出电压上就是呈现
高电平或低电平,通过对行线电平的高低状态的检测,
便可确认按键是否按下以及是否释放。
为确保单片机对一次按键动作只确认一次按键有效,
必须消除抖动期t1和t3的影响.
6
4.如何消除按键的抖动
去抖动的方法有两种,一种是用软件延时来消除按键抖动。
在Proteus的元件库Optoelectronics,子类 为Bargraph Displays,里面包括两个元器 件,主要是显示的颜色的差异。 这里我们选取的是2只条形LED,显示颜色为 绿色,名称为LED-BARGRAPH-GRN,显示 的原理是,引脚号小的一端接高电平,引脚 号大的一端接低电平,每个条形LED相当于 十个LED二极管并排放置在一起。
优点:电路简单,各条检测线独立,识别按键号的软
件编写简单。
不足:独立式键盘适用于按键数目较少的场合,在按
9
键数目较多的场合,要占用较多的I/O口线。
图7-2 独立式键盘的接口电路
(2)中断扫描方式的独立式键盘
为进一步提高扫描键盘工作效率,可采用中断扫描方
式,如图7-3。
优点:键盘只有在键盘有按键按下时,才进行处理,
参考源代码为:
#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar code KeyCodeTable[]={0x11,0x12,0x14,0x18,0x21, 0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82, 0x84,0x88}; //矩阵键盘按键特征码表 void delay() { uchar i; for(i=0;i<200;i++); }
参考源代码为: uchar Keys_Scan() { uchar sCode,kCode,i,k; P1=0xf0; //低4位置0,放入四行 if((P1&0xf0)!=0xf0) //判断是否有键按下 { delay(); //延时去抖动 if((P1&0xf0)!=0xf0) { sCode=0xfe; //行扫描码初值 for(k=0;k<4;k++) //对四行分别进行扫描 { P1=sCode; if((P1&0xf0)!=0xf0) { kCode=~P1; for(i=0;i<16;i++) //查表得到按键序号并返回 if(kCode == KeyCodeTable[i]) return i; } else sCode=_crol_(sCode,1); } } } return -1; }
矩阵式(也称行列式)键盘用于按键数目较多场合,
由行线和列线组成,一组为行线,另一组为列线,按
键位于行、列的交叉点上。如图7-4所示, 一个44的
行、列结构可以构成一个16个按键的键盘。
优点:在按键数目较多的场合,与独立式键盘相比,
要节省较多的I/O口线。
13
图7-4 矩阵式键盘接口
查询方式的矩阵式键盘工作原理。
7.1 7.2 7.3 7.4 7.5 矩阵键盘电路的原理介绍 矩阵键盘硬件电路的设计 软件编程实现矩阵键盘的处理 矩阵键盘电路在Proteus中的验证 实例讲解
7.1 矩阵键盘电路的原理介绍
键盘功能:向单片机输入数据、命令等,是
人与单片机对话的主要手段。
7.1.1 键盘接口应解决的问题
可以参考以下的电路原理图7-9.
图7-9 参考电路图
参考源代码为: void Keys_Scan() //全局变量KeyNo传递键值 { uchar Tmp; P1=0x0f; //高4位置0,放入四行 delay(1); Tmp=P1^0x0f; //若有键按下,异或操作把低四位变为3个0,1个1 switch(Tmp) { case 1: KeyNo=0; break; case 2: KeyNo=1; break; case 4: KeyNo=2; break; case 8: KeyNo=3; break; default: KeyNo=16; //无键按下 } P1=0xf0; //低4位置0,放入四列 delay(1); Tmp=P1 >> 4 ^0x0f; //先右移四位,再取异或 switch(Tmp) { case 1: KeyNo+=0; break; case 2: KeyNo+=4; break; case 4: KeyNo+=8; break; case 8: KeyNo+=12; } }
另一种去除按键抖动的方法是采用专用的键盘/显示器接口
芯片,这类芯片中都有自动去抖动的硬件电路。
7
7.1.2 键盘分类和设计方法
键盘分为两类,包括非编码键盘和编码键盘。
非编码键盘按键直接与单片机相连,通常使用在按
键数量较少的场合。用这种键盘,系统功能通常比较
简单,需处理的任务较少,但可降低成本、简化电路
4*4矩阵键盘控制条形LED显示
如图7-6所示为控制电路。
图中,4*4矩阵键盘的四条行线接到
P1.0~P1.3,四条列线接到P1.4~P1.7,注意 总线和标号的运用;条形LED一块接到P2端 口和部分P3端口,另一块接到P3剩下部分端 口。 4*4矩阵键盘节约了I/O口线,但是识别按键 的代码要比独立键盘复杂一些。
CAP-ELEC CRYSTAL
Capacitors
Capacitors Miscellaneous
Generic
Generic -
RES
RX8 LED-BARGRAPH-GRN BUTTON
Resistors
Resistors Optoelectronics Switches & Relays
Generic
所以实时性强,效率高。
工作原理:当键盘中有按键按下时,74LS30的输出经
过74LS04反相后向单片机的中断请求输入引脚INT0*发
出中断请求信号,单片机响应中断,执行键盘扫描程序 中断服务子程序,识别出按下按键的键号,并跳向该按 键的处理程序。
11
图7-3 独立式键盘的接口电路
12
2. 矩阵式键盘
设计。按下按键的键号信息通过软件来获取。
非编码键盘常见的为两种结构:独立式键盘和矩阵
式键盘。
1. 独立式键盘 (1)查询方式的独立式键盘
特点:一键一线,键相互独立,每个按键各接一条I/O
口线,通过检测I/O输入线的电平状态,可很容易判断哪 个按键被按下,如图7-2所示。图中的上拉电阻保证按键
释放时,输入检测线上有稳定的高电平。
图7-6 矩阵键盘控制电路
7.3 软件编程实现矩阵键盘的处理
以图7-6为例,我们要求电路运行时,点亮的
LED个数与按键的键值相等,例如,按下K1 时,第1只LED(最下方)点亮,按下K2时, 前2只LED点亮,…,按下K16时,第1~16只 LED被点亮。 由原理图可知,矩阵键盘行线连接P1.0~P1.3, 列线连接P1.4~P1.7,扫描过程如下。
15
7.2 矩阵键盘硬件电路的设计
以4*4矩阵键盘为例,介绍矩阵键盘电路的设
计。 在Proteus中,常用的按键是Button,它在 Proteus元件库Switches & Relays类中,如 图7-5所示,也可以直接在Keyword栏输入 Button拾取。
图7-5 按键元器件
除此以外,我们在本例中用到的条形LED,
参考源代码为:
void main() { uchar KeyNo=-1; //-1表示无键按下 uchar i,P2_LED,P3_LED; while(1) { KeyNo=Keys_Scan(); //扫描键盘获取按键序号KeyNo if(KeyNo!=-1) { P2_LED=0xff; P3_LED=0xff; for(i=0;i<=KeyNo;i++) //键值越大,点亮的LED越多 { if(i<8) P3_LED>>=1; else P2_LED>>=1; } P3=P3_LED; P2=P2_LED; } } }
图7-8 电路运行过程
7.5 实例讲解
参照之前的例子,我们修改电路和程序,要
求数码管显示4*4矩阵键盘按键,键值从0~F, 并且按下键同时蜂鸣器响。 分析: 注意矩阵键盘的行线和列线分别与哪几根I/O 口线相连;矩阵键盘的扫描方法可以借鉴前 一例子,也可以采用其他的方法,参考代码 见后面。
1.键盘的任务
任务有3项:
(1)首先判别是否有键按下?若有,进入下一步。 (2)识别哪一个键被按下,并求出相应的键值。 (3)根据键值,找到相应键值的处理程序入口。
3
2. 键盘输入的特点
常见键盘包括触摸式键盘、薄膜键盘和按键式键盘,最常用
的是按键式键盘。
键盘按键实质上是一个开关。如图7-1(a)所示,按键开关的
首先判键盘有无键按下,即把所有行线P1.0~P1.3均
置为低电平,然后检查各列线的状态,若列线不全为高
电平,则ห้องสมุดไป่ตู้示键盘中有键被按下;若所有列线列均为高 电平,说明键盘中无键按下。
在确认有键按下后,即可进入确定具体闭合键的过程。
判断闭合键所在的位置,其方法是依次将行线置为低电 平,在逐行检查各列线的电平状态。若某列为低,则该 列线与行线交叉处的按键就是闭合的按键。
首先判断是否有键按下。为判断16个按键中是否有键 按下,程序首先在4条行线上放置4个0,即在P1端口 输出0xf0,如果有任一按键按下,则4条列线上必有一 位为0。 如果已有键按下,则判断按键所在行、列位置,并返 回按键序号。代码中行扫描码sCode初值为0xfe(1111 1110),通过将该值循环左移,可对P1.0~P1.3对应的4 行逐行发送0,每次发送扫描码后即判断高4位的4个1 中是否有0出现,如果出现0则说明按键在该列上,这 时可将发送的低4位与读取的高4位取反,也就是P1取 反,这样P1中将出现2个1,其余位均变为0,2个1分 别处在低4位和高4位中,高低4位中1所处的位置各有4 种可能,共计16种,根据取反后的值查询矩阵键盘按 键特征码表,可得按键序号。
7.4 矩阵键盘电路在Proteus中的验证
7.4.1 Proteus电路设计
1. 元件清单列表
打开Proteus ISIS编辑环境,按表7-1所列的清单添加元件
表7-1 元 件 清 单 元件名称 AT89C51 所属类 Microprocessor ICs 所属子类 8051 Family
CAP
两端分别连接在行线和列线上,通过键盘开关机械触点的断开、 闭合,其行线电压输出波形如图7-1(b)所示。
图7-1(b)所示的t1和t3分别为键的闭合和断开过程中的抖动
期(呈现一串负脉冲),抖动时间长短与开关的机械特性有关,
一般为5~10ms,t2为稳定的闭合期,其时间由按键动作确定, 一般为十分之几秒到几秒,t0、t4为断开期。
Resistor Packs Bargraph Displays Switches
2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图 7-7所示的原理图连接硬件电路。
图7-7 电路原理图
3、源程序的添加 参照第五讲在Keil中建立工程,添加源程序文件、构 建.hex文件,加载目标代码,执行程序,观察不同按键 被按下后LED灯的显示过程,如图7-8所示。
基本思想是:在检测到有键按下时,该键所对应的行线为低
电平,执行一段延时10ms的子程序后,确认该行线电平是否 仍为低电平,如果仍为低电平,则确认该行确实有键按下。当 按键松开时,行线的低电平变为高电平,执行一段延时10ms的 子程序后,检测该行线为高电平,说明按键确实已经松开。采
取以上措施,可消除两个抖动期t1和t3的影响。
4
图7-1 键盘开关及其行线波形
3.按键的识别
按键的闭合与否,反映在行线输出电压上就是呈现
高电平或低电平,通过对行线电平的高低状态的检测,
便可确认按键是否按下以及是否释放。
为确保单片机对一次按键动作只确认一次按键有效,
必须消除抖动期t1和t3的影响.
6
4.如何消除按键的抖动
去抖动的方法有两种,一种是用软件延时来消除按键抖动。
在Proteus的元件库Optoelectronics,子类 为Bargraph Displays,里面包括两个元器 件,主要是显示的颜色的差异。 这里我们选取的是2只条形LED,显示颜色为 绿色,名称为LED-BARGRAPH-GRN,显示 的原理是,引脚号小的一端接高电平,引脚 号大的一端接低电平,每个条形LED相当于 十个LED二极管并排放置在一起。
优点:电路简单,各条检测线独立,识别按键号的软
件编写简单。
不足:独立式键盘适用于按键数目较少的场合,在按
9
键数目较多的场合,要占用较多的I/O口线。
图7-2 独立式键盘的接口电路
(2)中断扫描方式的独立式键盘
为进一步提高扫描键盘工作效率,可采用中断扫描方
式,如图7-3。
优点:键盘只有在键盘有按键按下时,才进行处理,
参考源代码为:
#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar code KeyCodeTable[]={0x11,0x12,0x14,0x18,0x21, 0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82, 0x84,0x88}; //矩阵键盘按键特征码表 void delay() { uchar i; for(i=0;i<200;i++); }
参考源代码为: uchar Keys_Scan() { uchar sCode,kCode,i,k; P1=0xf0; //低4位置0,放入四行 if((P1&0xf0)!=0xf0) //判断是否有键按下 { delay(); //延时去抖动 if((P1&0xf0)!=0xf0) { sCode=0xfe; //行扫描码初值 for(k=0;k<4;k++) //对四行分别进行扫描 { P1=sCode; if((P1&0xf0)!=0xf0) { kCode=~P1; for(i=0;i<16;i++) //查表得到按键序号并返回 if(kCode == KeyCodeTable[i]) return i; } else sCode=_crol_(sCode,1); } } } return -1; }
矩阵式(也称行列式)键盘用于按键数目较多场合,
由行线和列线组成,一组为行线,另一组为列线,按
键位于行、列的交叉点上。如图7-4所示, 一个44的
行、列结构可以构成一个16个按键的键盘。
优点:在按键数目较多的场合,与独立式键盘相比,
要节省较多的I/O口线。
13
图7-4 矩阵式键盘接口
查询方式的矩阵式键盘工作原理。