矩阵键盘介绍与使用程序(完整版)实用资料.doc

上传人:知****量 文档编号:91808455 上传时间:2023-05-27 格式:DOC 页数:36 大小:1.41MB
返回 下载 相关 举报
矩阵键盘介绍与使用程序(完整版)实用资料.doc_第1页
第1页 / 共36页
矩阵键盘介绍与使用程序(完整版)实用资料.doc_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《矩阵键盘介绍与使用程序(完整版)实用资料.doc》由会员分享,可在线阅读,更多相关《矩阵键盘介绍与使用程序(完整版)实用资料.doc(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、矩阵键盘介绍与使用程序(完整版)实用资料(可以直接使用,可编辑 完整版实用资料,欢迎下载)单片机外接键盘电路一、原理简介键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。我们可以通过键盘输入数据或命令来实现简单的人机通信。在设计键盘电路与程序前,我们需要了解键盘和组成键盘的按键的一些知识。1. 按键的分类一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。按键按照接口原理又可分为编

2、码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别。全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。2. 按键的输入原理在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL

3、逻辑电平,以便与通用数字系统的逻辑电平相容。此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。因此,键信息输入是与软件结构密切相关的过程。 对于一组键或一个键盘,通过接口电路与单片机相连。单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。3. 按键的特点与去抖机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图1(

4、a) 所示,抖动时间的长短与开关的机械特性有关,一般为5 10 ms。从图中可以看出,在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。( 本学习板采用软件去抖方式)。软件去抖的流程图如图1(b) 所示。图1从按键的去抖流程图我们可以知道,检测到有键按下时,应延时等待一段时间(可调用一个5ms10ms的延迟子程序),然后再次判断按键是否被按下,若此时判断按键仍被按下

5、,则认为按键有效,若此时判断按键没有被按下,说明为按键抖动或干扰,应返回重新判断。键盘真正被按下才可进行相应的处理程序,此时基本就算实现了按键输入,进一步的话可以判断按键是否释放。二、电路详解电路图如图2 所示。图2从图2 中可知独立式按键采用每个按键单独占用一根I/O 口线结构。当按下和释放按键时,输入到单片机I/O 端口的电平是不一样的,因此可以根据不同端口电平的变化判断是否有按键按下以及是哪一个按键按下。从图2(a) 中可以看出,按键和单片机引脚连接并加了上拉电阻,这样当没有按键按下的时候,I/O 输入的电平是高电平,当有按键按下的时候,I/O 输入的电平是低电平。虽然独立式按键电路配置

6、灵活,软件结构简单,但每个按键必须占用一根I/O 口线,因此,在按键较多时,I/O 口线浪费较大。对于比较复杂的系统或按键比较多的场合,可以用到矩阵键盘,图2(b) 中所示的为44的矩阵式键盘,其他矩阵式键盘的设计方法类似。44 的矩阵式键盘由4 根行线和4 根列线交叉构成,按键位于行列的交叉点上,这样就构成了16 个按键。其中交叉点的行列线是不连接的,当按键按下的时候,此交叉点处的行线和列线导通。图2(b) 行线通过上拉电阻接到VCC 上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线在交点导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键

7、盘中的每条行线与4 条列线相交,交点的按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,键分析时必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。三、程序设计本文设计实例关键程序如下。独立按键程序#define keyio P0 ( 1)#define key1 P0_3 ( 2)keyio|=0X0F; ( 3)if(key1=0) ( 4)delay_nms(20); ( 5)if(key1=0) ( 6)while(key1=0); ( 7)return 1; ( 8)程序说明:(1)定义按键管脚。(2)定义按键连接管脚。(3)将按键连接管脚输出高电平,从而接收

8、输入。(4)如果此时管脚所连接按键被按下。(5)延时一段时间,去抖作业。(6)如果此时按键仍然被按下,此时按键有效。(7)等待按键抬起,死循环,如果按键一直按下则一直等待。(8)返回键值。矩阵键盘程序#define KEYIO P0 ( 1)code ksp4=0x7F,0xBF,0xDF,0xEF; ( 2)unsigned char keypad_scan() ( 3)char key,i; ( 4)KEYIO=0xF0; ( 5)if (KEYIO!=0xF0) ( 6)for(i=0;i=3;i+) ( 7)delaykey(10); ( 8)KEYIO=kspi; ( 9)delay

9、key(10); ( 10)if(KEYIO!=kspi) /不等于ox( 11)delaykey(10); ( 12)key=KEYIO; ( 13)while(KEYIO=key); ( 14)return(key); ( 15)程序说明:(1)定义矩阵键盘管脚。(2)将扫描时用到的管脚四种输出电平状态定义成一个数组。/确定第几列数(3)按键扫描程序。(4)定义两个临时变量key,i。(5)让键盘管脚的高四位输出高电平,低四位为低电平,为扫描按键准备。(6)如果此时管脚状态电平发生变化。(7)将之前定义的数组中的值赋予管脚,开始逐次扫描。(8)延时一段时间,去抖。(9)输出扫描按键的电平。

10、(10)再延时一段时间。(11)如果此时按键管脚电平依旧不是输出的默认电平,表示有键按下。(12)延时一段时间,让电平稳定。(13)读取当前按键管脚电平,即键值。(14)等待按键抬起,死循环,如果按键一直按下则一直等待。(15)返回键值。四、调试要点与实验现象接好硬件,通过冷启动方式将程序所生成的。hex文件下载到单片机运行后,打开串口调试助手软件,设置好波特率9600,复位单片机,然后按下板上的44按键中的任意一个,并注意观串口调试助手上的显示。(见图3),可以观察到在接收窗口有按键的数据显示。图3 按键通过串口调试助手显示界面此外,在本文所附的实验程序中,其中与串口通信中调用了发送字符函数

11、与发送字符串函数。在没有仿真器和遇到需要显示一些提示信息的时候,可以采用串口打印的方式,这样不仅直观方便而且不增加其他成本。五、总结本文介绍了单片机外接键盘的工作原理并给出了实例,通过该文,我们可以知道一个完善的键盘控制程序应具备以下功能:(1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。(2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。(3) 准确输出按键值(或键号),以满足按键功能要求。对于矩阵键盘而言,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。此外

12、,按键的扫描方式有多种,本文中所述的是程序扫描方式,另外常见的还有定时扫描方式和中断扫描方式,这些方式均可以在本学习板上实现,因此希望读者结合前几讲的知识,自行进行程序的编写与调试。下讲将讲述单片机动态驱动数码管原理与实例,敬请期待。矩阵键盘是单片机编程中所使用的键盘.0 b|; 7 1 m9 Mz1.矩阵式键盘的结构与工作原理0 c; J- / M O) y X/ |6 7 k在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按

13、键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。+ D3 p1 l5 K0 _5 j矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。3

14、?8 h4 S s; W5 r2、矩阵式键盘的按键识别方法1 i+ F- y, x# P4 i Y, P1 n$ F确定矩阵式键盘上何键被按下介绍一种“行扫描法”。i$ I4 W, J! v& C行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。 h0 g( i. ?* z, P( g1、判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。- _7 R0 5 i3 y9 y0 M

15、+ f/ 2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。c9 n6 O. u6 Se, t: 下面给出一个具体的例子:6 L G# : c$ t图仍如上所示。8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.

16、17设置为输出线。4根行线和4根列线形成16个相交点。5 7 e 8 f9 M6 k+ W1、检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。1 l( i3 / 3 c& ?. j( k2、去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。4 |3 B; y g & 5 / N3、若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:4 9 b$ p6 L# r- bP1.7 1 1 1 0% ?7 e) Z# e&

17、Q3 P1.6 1 1 0 1. L2 m5 ?4 g1 rP1.5 1 0 1 1% 6 g1 J, p2 S& F& X1 Q% iP1.4 0 1 1 18 f/ A3 T% o: e. r在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值2 O; w4 w0 C# 5 ) D4、为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。3 u# 3 u! Y! D 5 m键盘扫描程序:1 r- d K7 J K: g7 k) : 1 L从以上分

18、析得到键盘扫描程序的流程图如图2所示。程序如下$ o4 q: C3 n* t3 7 BSCAN: MOV P1,#0FH e7 7 e/ ! FMOV A,P1+ P, ? V. a k8 oANL A,#0FH! p* h4 v& & kCJNE A,#0FH,NEXT1: x r+ $ U. Y; F6 i5 uSJMP NEXT38 I7 ! & E6 4 X aNEXT1: ACALL D20MS$ K9 s* ) ? n/ S$ f2 MOV A,#0EFH% |A D1 u2 _- S* S2 r6 o( BNEXT2: MOV R1,A, o+ j4 0 a5 _% e/ c9

19、M/ jMOV P1,A3 , h8 q& - P: C, _9 X2 CMOV A,P1& Z/ K- _) B8 e qH7 KANL A,#0FH0 O2 + b- CJNE A,#0FH,KCODE;9 ?t* l* |0 J; E- MOV A,R1& , J$ ) x$ t$ |0 mSETB C. S+ gZ0 H7 e( ) RLC A* i! u# j; A$ ( O2 g8 JC NEXT2* o( J, F/ T: b* k2 Z7 GNEXT3: MOV R0,#00H0 r+ o( D8 z& h, j5 hRET w* , D/ h5 d* g& r K- QKCO

20、DE: MOV B,#0FBH0 B9 h4 n; F1 P6 rNEXT4: RRC A2 v6 E( W6 A& L o& TINC B/ t4 o0 t9 h! J* d JC NEXT40 L8 d/ bC: y, U ; ?8 G gMOV A,R12 P. N$ E3 F- i: X0 wd+ m fSWAP A8 F2 v% k f?5 L; |( Y nNEXT5: RRC A% P6 e; R; 3 E& u, v8 INC B8 Q/ C1 x9 x5 eINC B* j6 I b+ n/ I8 zINC B( r( 0 N/ b# INC B7 j& t7 T+ G9 a

21、8 L, & mJC NEXT5j* k. w5 q4 j0 A; q7 PNEXT6: MOV A,P18 / e0 u3 J9 O$ ?* c3 # c% a! |ANL A,#0FH7 Q& W* W9 e4 aL/ O( SCJNE A,#0FH,NEXT6 o: r9 k3 J; RMOV R0,#0FFH6 G: B# l5 my2 K, O) BRET6 H2 f& N3 x+ Y$ D! R键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题

22、,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。. E- J7 k8 K v, Q: u键盘是由一组规则排列的按键组成,一个按键实际上是一个开关元件,也就是说键盘是一组规则排列的开关。1 i _/ D1 l/ z% ) N键盘工作原理/ b5 c; f/ ; O: X( k4 Z. x( f1按键的分类7 V6 B8 E$ k& t: m* i按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中

23、最常见的是触点式开关按键。- b8 X5 M* ! V4 U/ u J按键按照接口原理可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。* s8 j+ K7 F, R6 e C5 x全编码键盘能够由硬件逻辑自动提供与键对应的编码,此外,一般还具有去抖动和多键、窜键保护电路,这种键盘使用方便,但需要较多的硬件,价格较贵,一般的单片机应用系统较少采用。非编码键盘只简单地提供行和列的矩阵,其它工作均由软件完成。由于其经济实用,较多地应用于单片机系统中。下面将重点介绍非编码键盘接口。J

24、4 f+ 1 k+ q) Y v2键输入原理# | 1 ?/ E5 rA m , m3 o# ?在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。 s9 b8 f) 9 o5 对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将键输入并检查是哪一个键按下,将该键号送入累加器ACC,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。; u5 ?: i/ g( H$ Z+ L

25、c( B8 p% 3按键结构与特点) 2 Z v q. H& S- ( 8 微机键盘通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统的逻辑电平相容。/ a, W+ e) P$ V/ X( w机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图7.2所示,抖动时间的长短与开关的机械特性有关,一般为510ms。7 b2 n0 J* s U& J5 m% F. ; v- N; W9 |1 p在硬件上可采用在键输出端加R-S触发器(双稳态触发器)

26、或单稳态触发器构成去抖动电路,图7.3是一种由R-S触发器构成的去抖动电路,当触发器一旦翻转,触点抖动不会对其产生任何影响。) + e& M& f1 l: p4 V4 |电路工作过程如下:按键未按下时,a = 0,b = 1,输出Q = 1,按键按下时,因按键的机械弹性作用的影响,使按键产生抖动,当开关没有稳定到达b端时,因与非门2输出为0反馈到与非门1的输入端,封锁了与非门1,双稳态电路的状态不会改变,输出保持为1,输出Q不会产生抖动的波形。当开关稳定到达b端时,因a = 1,b = 0,使Q = 0,双稳态电路状态发生翻转。当释放按键时,在开关未稳定到达a端时,因Q = 0,封锁了与非门2

27、,双稳态电路的状态不变,输出Q保持不变,消除了后沿的抖动波形。当开关稳定到达b端时,因a = 0,b = 0,使Q = 1,双稳态电路状态发生翻转,输出Q重新返回原状态。由此 右图 双稳态去抖电路5 y9 X; 0 X4 Q3 c y( H2 v3 v可见,键盘输出经双稳态电路之后,输出已变为规范的矩形方波。 V1 1 P. r( t# . c_软件上采取的措施是:在检测到有按键按下时,执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态;同理,在检测到该键释放后,也应采用相同的步骤进行确认,从

28、而可消除抖动的影响。# h1 X5 s5 D: _: N; q4按键编码2 E+ t! _( Y( r5 m6 w0 ) r9 一组按键或键盘都要通过I/O口线查询按键的开关状态。根据键盘结构的不同,采用不同的编码。无论有无编码,以及采用什么编码,最后都要转换成为与累加器中数值相对应的键值,以实现按键功能程序的跳转。! c, S+ c9 b* e0 y: 5编制键盘程序/ K4 N4 Y; H; o) g一个完善的键盘控制程序应具备以下功能:2 b3 L* p$ A/ B M) k(1)检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。5 h8 , B$ D8 G/ ;

29、c(2)有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。3 n7 d( v1 T, N5 I+ U* * _(3)准确输出按键值(或键号),以满足跳转指令要求。) N, H( 8 s, O3 P. k. g5 9 Q. F独立式按键+ F/ C7 : C5 h6 B# x7 V- |单片机控制系统中,往往只需要几个功能键,此时,可采用独立式按键结构。/ 2 o7 r1 s9 L6 _, u1独立式按键结构9 u+ LK5 * x) q% i独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占

30、用一根I/O) pA. O4 ; 4 b: T& f3 J8 M) B左图 独立式按键电路3 x/ 9 |( M d8 M6 S9 S口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图7.4所示。* X8 f y+ Q, 7 F- l独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。6 Z# mM* q, s2 Y# e/ z1 F6 p2 S图7.4中按键输入均采用低电平有效,此外,上拉电阻保证了按键断开时,I/O口线有确定的高电平。当I/O口线内部有上拉电阻时,外电路可不接上拉电阻。( O3 .

31、 X n, u4 y. d2独立式按键的软件结构1 _* b$ xT/ z5 M2 G# l: v& T独立式按键软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。图7.4中的I/O口采用P1口,请读者自行编制相应的软件。1 ! - w7 o: r9 6 s713 矩阵式按键1 B b0 J4 P/ a7 B d/ a单片机系统中,若使按键较多时,通常采用矩阵式(也称行列式)键盘。; h5 |4 H9 I7 d2 A n1矩阵式键盘的结构及原理$ R3 IJ/ d8 B矩阵式键盘由行

32、线和列线组成,按键位于行、列线的交叉点上,其结构如下图所示。# d. n$ m( g5 G7 S由图可知,一个44的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。- d; J) / l9 x$ s3 Q! y0 G矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到5V上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互

33、影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。2 L% F$ r: x0 N2矩阵式键盘按键的识别; W! o5 i P; W( . F识别按键的方法很多,其中,最常见的方法是扫描法。下面以图7.5中8号键的识别为例来说明扫描法识别按键的过程。6 b2 T5 q, Q& w; l( z |按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平,显然,如果让所有的列线也处在高电平,那么,按键按下与否不会引起行线电平的变化,因此,必须使所有列线处在低电平,只有这样,当有键按下时,该键所在的行电平才会由高电平变为低电平。CPU根据行电平的变化,便能判定相应的行

34、有键按下。8号键按下时,第2行一定为低电平,然而,第2行为低电平时,能否肯定是8号键按下呢?回答是否定的,因为9、10、11号键按下同样使第2行为低电平。为进一步确定具体键,不能使所有列线在同一时刻都处在低电平,可在某一时刻只让一条列线处于低电平,其余列线均处于高电平,另一时刻,让下一列处在低电平,依此循环,这种依次轮流每次选通一列的工作方式称为键盘扫描。采用键盘扫描后,再来观察8号键按下时的工作过程,当第0列处于低电平时,第2行处于低电平,而第1、2、3列处于低电平时,第2行却处在高电平,由此可判定按下的键应是第2行与第0列的交叉点,即8号键。4 Q/ t4 R ?7 k6 o3键盘的编码2

35、 D, z& z, : I. T1 s1 H2 W* H9 g对于独立式按键键盘,因按键数量少,可根据实际需要灵活编码。对于矩阵式键盘,按键的位置由行号和列号唯一确定,因此可分别对行号和列号进行二进制编码,然后将两值合成一个字节,高4位是行号,低4位是列号。如图7.5中的8号键,它位于第2行,第0列,因此,其键盘编码应为20H。采用上述编码对于不同行的键离散性较大,不利于散转指令对按键进行处理。因此,可采用依次排列键号的方式对安排进行编码。以图7.5中的44键盘为例,可将键号编码为:01H、02H、03H0EH、0FH、10H等16个键号。编码相互转换可通过计算或查表的方法实现。 a1 c/

36、r1 R0 c+ ?7 d( w) g) n F4键盘的工作方式. k3 d1 W/ p# ! N$ Z, N1 n在单片机应用系统中,键盘扫描只是CPU的工作内容之一。CPU对键盘的响应取决于键盘的工作方式,键盘的工作方式应根据实际应用系统中CPU的工作状况而定,其选取的原则是既要保证CPU能及时响应按键操作,又不要过多占用CPU的工作时间。通常,键盘的工作方式有三种,即编程扫描、定时扫描和中断扫描。) Zx! V V9 M, x- O4 N1)编程扫描方式& i$ U* H4 g4 P0 Y0 l% y编程扫描方式是利用CPU完成其它工作的空余调用键盘扫描子程序来响应键盘输入的要求。在执行

37、键功能程序时,CPU不再响应键输入要求,直到CPU重新扫描键盘为止。 c% h$ H) : 9 键盘扫描程序一般应包括以下内容:7 W7 b$ w$ D7 y% Z(1)判别有无键按下。/ B# g c$ B* e: T: C0 B/ Y(2)键盘扫描取得闭合键的行、列值。- Q6 p7 C5 s& 3 m2 l1 L(3)用计算法或查表法得到键值。4 e0 j! h0 X9 2 Y4 b; L(4)判断闭合键是否释放,如没释放则继续等待。. I7 s% 0 r* v4 j( Q0 u, (5)将闭合键键号保存,同时转去执行该闭合键的功能。: + & v& D8 o1 l图7.6 8155扩展

38、I/O口组成的矩阵键盘# 4 * v& T5 H: j h+ Q$ 图7.6是一个48矩阵键盘电路,由图可知,其与单片机的接口采用8155扩展I/O芯片,键盘采用编程扫描方式工作,8155C口的低4位输入行扫描信号,A口输出8位列扫描信号,二者均为低电平有效。8155的IO/ 与P2.0相连, 与P2.1相连, 、 分别与单片机的 、 相连。由此可确定8155的口地址为:* m, P) Z0 j# M) Q- t9 g: L# F命令/状态口:0100H(P2未用口线规定为0)& L$ t# 7 Q e- L+ TA口:0101H$ j: O! w) X9 y( x9 y/ Z5 K G+ t

39、B口:0102H) c$ g8 G) Q N& bC口:0103H2 ) ?; n7 ; P7 M9 r! w图7.6中,A口为基本输出口,C口为基本输入口,因此,方式命令控制字应设置为43H。在编程扫描方式下,键盘扫描子程序应完成如下几个功能:2 x# * u. 9 A# % m(1)判断有无键按下。其方法为:A口输出全为0,读C口状态,若PC0PC3全为1,则说明无键按下;若不全为1,则说明有键按下。4 d7 / H: j ) R* * s0 j(2)消除按键抖动的影响。其方法为:在判断有键按下后,用软件延时的方法延时10ms后,再判断键盘状态,如果仍为有键按下状态,则认为有一个按键按下,

40、否则当作按键抖动来处理。 s& A R, * / i2 f1 c(3)求按键位置。根据前述键盘扫描法,进行逐列置0扫描。图7.6中,32个键的键值分布如下(键值由4位16进制数码组成,前两位是列的值,即A口数据,后两位是行的值,即C口数据,X为任意值):% a8 2 t3 O% T4 p0 f7 YFEXE FDXE FBXE F7XE EFXE DFXE BFXE 7FXE5 C% l1 m0 F7 H$ B$ a% DFEXD FDXD FBXD F7XD EFXD DFXD BFXD 7FXD7 g& 8 r! Zp; L6 I- CFEXB FDXB FBXB F7XB EFXB DF

41、XB BFXB 7FXB9 . g4 # p! J / qFEX7 FDX7 FBX7 F7X7 EFX7 DFX7 BFX7 7FX79 b$ g9 I# - y, g0 B按键键值确定后,即可确定按键位置。相应的键号可根据下述公式进行计算:键号=行首键号+列号。图7.6中,每行的行首可给以固定的编号0(00H),8(08H),16(10H),24(18H),列号依列线顺序为07。; V7 t; 9 H) i7 r& h& m7 C! (4)判别闭合的键是否释放。按键闭合一次只能进行一次功能操作,因此,等按键释放后才能根据键号执行相应的功能键操作。 o1 ) O % 键盘扫描程序流程图请参阅

42、实训7图7.1中的主程序流程图。# O, I0 M M! G* I0 # n* d& u键盘扫描程序请参阅实训7源程序中的键盘查询程序、键盘扫描程序和按键查询子程序三部分。* P, E e) a- O; g* |实训7是矩阵式键盘的一种典型应用,与图7.6相比,8155入口地址不同,矩阵键盘列数不同,再就是为兼顾键盘和显示,防抖所用的延时子程序由显示子程序替代。! V4 B r6 E2)定时扫描方式:) U9 p; F7 h! t$ Q+ B定时扫描方式就是每隔一段时间对键盘扫描一次,它利用单片机内部的定时器产生一定时间(例如10ms)的定时,当定时时间到就产生定时器溢出中断,CPU响应中断后

43、对键盘进行扫描,并在有键按下时识别出该键,再执行该键的功能程序。定时扫描方式的硬件电路与编程扫描方式相同,程序流程图如下图所示。# W8 v4 D; . b& I图中,标志1和标志2是在单片机内部RAM的位寻址区设置的两个标志位,标志1为去抖动标志位,标志2为识别完按键的标志位。初始化时将这两个标志位设置为0,执行中断服务程序时,首先判别有无键闭合,若无键闭合,将标志1和标志2置0后返回;若有键闭合,先检查标志1,当标志1为0时,说明还未进行去抖动处理,此时置位标志1,并中断返回。由于中断返回后要经过10ms后才会再次中断,相当于延时了10ms,因此,程序无须再延时。下次中断时,因标志1为1,

44、CPU再检查标志2,如标志2为0说明还未进行按键的识别处理,这时,CPU先置位标志2,然后进行按键识别处理,再执行相应的按键功能子程序,最后,中断返回。如标志2已经为1,则说明此次按键已做过识别处理,只是还未释放按键,当按键释放后,在下一次中断服务程序中,标志1和标志2又重新置0,等待下一次按键。2 Q7 9 G- l 1 u3)中断扫描方式 B! mk+ u; A采用上述两种键盘扫描方式时,无论是否按键,CPU都要定时扫描键盘,而单片机应用系统工作时,并非经常需要键盘输入,因此,CPU经常处于空扫描状态,为提高CPU工作效率,可采用中断扫描工作方式。其工作过程如下:当无键按下时,CPU处理自

45、己的工作,当有键按下时,产生中断请求,CPU转去执行键盘扫描子程序,并识别键号。7 l( v* A0 c) |# R左图是一种简易键盘接口电路,该键盘是由8051P1口的高、低字节构成的44键盘。键盘的列线与P1口的高4位相连,键盘的行线与P1口的低4位相连,因此,P1.4P1.7是键输出线,P1.0P1.3是扫描输入线。图中的4输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5V电源,输出端接至8051的外部中断输入端 。具体工作如下:当键盘无键按下时,与门各输入端均为高电平,保持输出端为高电平;当有键按下时,端为低电平,向CPU申请中断,若CPU开放外部中断,则会响应中断请求,转去执行键盘扫描子程序。. W0 t! v+ z1 i. K4 Z. 这是初学时写的最简单、最详细、效率最高的矩阵键盘扫描程序,只用了四条常用命令(MOV/送数、JB/高电平转移、JMP/直接转移、RET/子程序返回),保证初学者一看就懂!本程序已经在本站电子实验板上验证通过,占用时间少,效率高,被选作单片机的测试

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁