前言 AZWJ—2型智能瓦斯检测记录仪是一种采用单片机控制的煤矿便携式瓦斯浓度测量记录仪表。它用于煤矿井下采掘工作面、巷道、等有爆炸性气体环境对甲烷浓度进行间断或连续监测;检测记录仪通过键盘设置测量、打印、暂停等工作方式,设定日期、时间、报警值等参数。
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置
一、任务描述 用AT89S52的并行口P2接4×4矩阵键盘,以P0-P3作输入线,以P4-P7作输出线;在数码管上显示每个按键的“0-F”序号。对应的按键的序号排列如下图所示,并在P1口接一位数码管,用静态显示的方法将键值显示出来。 F B 7 3 E A 6 2 D 9 5 1 C 8 4 返回
二、任务分析 1、键盘输入模块:扫描键盘、读取一次键盘并将键值存入键 值缓冲单元。 2、显示模块:将显示单元的内容在显示器上显示。 1、键盘输入模块:扫描键盘、读取一次键盘并将键值存入键 值缓冲单元。 2、显示模块:将显示单元的内容在显示器上显示。 3、主程序:调用键盘输入模块和显示模块。 返回
三、任务演示 返回
四、相关知识 (一)矩阵式按键单片机系统中,若使按键较多时,通常采用矩阵式(也称行列式)键盘。 1、矩阵式键盘的结构及原理 矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。其结构如图4-1所示。 图4-1 矩阵式键盘结构 返回
由图4-1可知,一个4×4的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。 矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
识别按键的方法很多,其中,最常见的方法是扫描法。下面以图4. 2中8号键的识别为例来说明扫描法识别按键的过程。 2、矩阵式键盘按键的识别 识别按键的方法很多,其中,最常见的方法是扫描法。下面以图4. 2中8号键的识别为例来说明扫描法识别按键的过程。 按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平,显然,如果让所有的列线也处在高电平,那么,按键按下与否不会引起行线电平的变化,因此,必须使所有列线处在低电平,只有这样,当有键按下时,该键所在的行电平才会由高电平变为低电平。CPU根据行电平的变化,便能判定相应的行有键按下。8号键按下时,第2行一定为低电平,然而,第2行为低电平时,能否肯定是8号键按下呢?回答是否定的,因为9、10、11号键按下同样使第2行为低电平。为进一步确定具体键,不能使所有列线在同一时刻都处在低电平,可在某一时刻只让一条列线处于低电平,其余列线均处于高电平,另一时刻,让下一列处在低电平,依此循环,这种依次轮流每次选通一列的工作方式称为键盘扫描。
采用键盘扫描后,再来观察8号键按下时的工作过程,当第0列处于低电平时,第2行处于低电平,而第1、2、3列处于低电平时,第2行却处在高电平,由此可判定按下的键应是第2行与第0列的交叉点,即8号键。 键盘的编码对于独立式按键键盘,因按键数量少,可根据实际需要灵活编码。对于矩阵式键盘,按键的位置由行号和列号唯一确定,因此可分别对行号和列号进行二进制编码,然后将两值合成一个字节,高4位是行号,低4位是列号。如图4-1中的8号键,它位于第2行,第0列,因此,其键盘编码应为20H。采用上述编码对于不同行的键离散性较大,不利于散转指令对按键进行处理。因此,可采用依次排列键号的方式对安排进行编码。以图4-1中的4×4键盘为例,可将键号编码为:01H、02H、03H…0EH、0FH、10H等16个键号。编码相互转换可通过计算或查表的方法实现。
3、键盘的工作方式 在单片机应用系统中,键盘扫描只是CPU的工作内容之一。CPU对键盘的响应取决于键盘的工作方式,键盘的工作方式应根据实际应用系统中CPU的工作状况而定,其选取的原则是既要保证CPU能及时响应按键操作,又不要过多占用CPU的工作时间。通常,键盘的工作方式有三种,即编程扫描、定时扫描和中断扫描。 1)编程扫描方式 编程扫描方式是利用CPU完成其它工作的空余调用键盘扫描子程序来响应键盘输入的要求。在执行键功能程序时,CPU不再响应键输入要求,直到CPU重新扫描键盘为止。 键盘扫描程序一般应包括以下内容: (1)判别有无键按下。 (2)键盘扫描取得闭合键的行、列值。 (3)用计算法或查表法得到键值。 (4)判断闭合键是否释放,如没释放则继续等待。 (5)将闭合键键号保存,同时转去执行该闭合键的功能。
2)定时扫描方式 定时扫描方式就是每隔一段时间对键盘扫描一次,它利用单片机内部的定时器产生一定时间(例如10ms)的定时,当定时时间到就产生定时器溢出中断,CPU响应中断后对键盘进行扫描,并在有键按下时识别出该键,再执行该键的功能程序。定时扫描方式的硬件电路与编程扫描方式相同,程序流程图如图4-2所示。 图4-2程序流程
图4-2中,标志1和标志2是在单片机内部RAM的位寻址区设置的两个标志位,标志1为去抖动标志位,标志2为识别完按键的标志位。初始化时将这两个标志位设置为0,执行中断服务程序时,首先判别有无键闭合,若无键闭合,将标志1和标志2置0后回车;若有键闭合,先检查标志1,当标志1为时,说明还未进行去抖动处理,此时置位标志1,并中断回车。由于中断回车后要经过10ms后才会再次中断,相当于延时了10ms,因此,程序无须再延时。下次中断时,因标志1为1,CPU再检查标志2,如标志2为说明还未进行按键的识别处理,这时,CPU先置位标志2,然后进行按键识别处理,再执行相应的按键功能子程序,最后,中断回车。如标志2已经为1,则说明此次按键已做过识别处理,只是还未释放按键,当按键释放后,在下一次中断服务程序中,标志1和标志2又重新置0,等待下一次按键。
3)中断扫描方式 采用上述两种键盘扫描方式时,无论是否按键,CPU都要定时扫描键盘,而单片机应用系统工作时,并非经常需要键盘输入,因此,CPU经常处于空扫描状态,为提高CPU工作效率,可采用中断扫描工作方式。其工作过程如下:当无键按下时,CPU处理自己的工作,当有键按下时,产生中断请求,CPU转去执行键盘扫描子程序,并识别键号。 P1.0 P1.1 P1.3 P1.2 P1.4 P1.5 P1.6 P1.7 INT0 +5V 8051 & 图4-3 中断扫描键盘电路
图4-3是一种简易键盘接口电路,该键盘是由8051P1口的高、低字节构成的4×4键盘。键盘的列线与P1口的高4位相连,键盘的行线与P1口的低4位相连,因此,P1.4P1.7是键输出线,P1.0P1.3是扫描输入线。图中的4输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5V电源,输出端接至8051的外部中断输入端。 具体工作如下:当键盘无键按下时,与门各输入端均为高电平,保持输出端为高电平;当有键按下时,端为低电平,向CPU申请中断,若CPU开放外部中断,则会响应中断请求,转去执行键盘扫描子程序。
4、1.4×4矩阵键盘识别处理 每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0"和“1",开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0"实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
流程图 P2=FFH,P2.0=0 P2=FFH,P2.2=0 有键按下吗? 延时10ms 真得有键按下吗? 根据当前状态识别按键
汇编源程序: H_NUM EQU 3AH KEYNUM EQU 3BH ORG 0000H AJMP MAIN ORG 0030H KEYBOARD: LCALL KB_SCAN JZ KEYBOARD LCALL KB_DELAY MOV P2,#11101111B MOV H_NUM,#0 LCALL KB_ID MOV P2,#11011111B MOV H_NUM,#4 MOV P2,#10111111B MOV H_NUM,#8
LCALL KB_ID MOV P2,#01111111B MOV H_NUM,#12 MOV A,KEYNUM MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P1,A AJMP MAIN KB_ID: JB P 0,KBID_P21 JNB P 0,$ MOV A,#0 ADD A,H_NUM MOV KEYNUM,A RET KBID_P21: JB P 1,KBID_P22 JNB P 1,$ MOV A,#1
KBID_P22: JB P 2,KBID_P23 JNB P 2,$ MOV A,#2 ADD A,H_NUM MOV KEYNUM,A RET KBID_P23: JB P 3,KEID_END JNB P 3,$ MOV A,#3 KEID_END: KB_SCAN: MOV P2,#00001111B MOV A,P2 XRL A,#00001111B
KB_DELAY: MOV R7,#100 KB_D0:MOV R6,#200 KB_D1:DJNZ R6,KB_D1 DJNZ R7,KB_D0 RET TABLE: DB 0C0H;0 DB 0F9H;1 DB 0A4H;2 DB 0B0H;3 DB 099H;4 DB 092H;5 DB 082H;6 DB 0F8H;7 DB 080H;8 DB 090H;9 DB 088H;A DB 083H;b DB 0C6H;C DB 0A1H;d DB 086H;E DB 08EH;F END
(二)静态显示 1、数码管简介 1)数码管结构 数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0 9、字符A F、H、L、P、R、U、Y、符号“"及小数点“"。数码管的外型结构如图4-4(a)所示。数码管又分为共阴极和共阳极两种结构,分别如图4-4(b)和图4-4(c)所示。
(a) 外型结构 (b) 共阴极 (c)共阳极 图4-4 数码管结构图
2)数码管工作原理 共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。 共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起,通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端,当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
3)数码管字形编码 要使数码管显示出相应的数字或字符必须使段数据口输出相应的字形编码。对照图7.10(a),字型码各位定义如下: 数据线D0与a字段对应,D1字段与b字段对应……,依此类推。如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。如要显示“0",共阳极数码管的字型编码应为:11000000B(即C0H);共阴极数码管的字型编码应为:00111111B(即3FH)。依此类推可求得数码管字形编码如表4-1所示。
表4-1 数码管字型编码表 显示字符 字形 共 阳 极 共 阴 极 dp g f e d c b a 字型码 字形码 1 C0H 3FH 表4-1 数码管字型编码表 显示字符 字形 共 阳 极 共 阴 极 dp g f e d c b a 字型码 字形码 1 C0H 3FH F9H 06H 2 A4H 5BH 3 B0H 4FH 4 99H 66H 5 92H 6DH 6 82H 7DH 7 F8H 07H 8 80H 7FH 9 90H 6FH
A 1 88H 77H B 83H 7CH C C6H 39H D A1H 5EH E 86H 79H F 8EH 71H H 89H 76H L C7H 38H P 8CH 73H R CEH 31H U C1H 3EH Y 91H 6EH BFH 40H . 7FH 80H 熄灭 灭 FFH 00H
所谓静态显示,就是当显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。这种显示方法的每一位都需要有一个8位输出口控制。 2、静态显示接口 所谓静态显示,就是当显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。这种显示方法的每一位都需要有一个8位输出口控制。 静态显示器的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度高,控制系统在运行过程中,仅仅在需要更新显示内容时,CPU才执行一次显示更新子程序,这样大大节省了CPU的时间,提高了CPU的工作效率;缺点是位数较多时,所需的I/O口太多,硬件开销太大。 返回
五、任务布置 1、记录AZWJ 2型智能煤气检测记录仪在使用过程中的注意事项。 2、画出矩阵式键盘的结构,分析其工作原理。 3、简述矩阵式键盘的工作方式。 4、画出数码管的结构图,分析其特点及工作原理。 5、写出静态显示的概念及优缺点。 6、画出4×4矩阵式键盘的工作流程图。 返回