当前位置:文档之家› 4×4矩阵键盘的工作原理 )

4×4矩阵键盘的工作原理 )

4*4按键程序与电路图
1、4×4矩阵键盘的工作原理



矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。



图1为ME300B矩阵键盘电路图,行线接P1.4-P1.7,列线接P1.0-P1.3。










图1 矩阵键盘电路






图2 按键排列







2、数码管动态扫描显示电路






















在ME300B开发系统中,采用了8位数码管动态扫描显示。它将所有数码管的8个段线相应地并接在一起,并接到 AT89S51的P0口,由P0口控制字段输出。而各位数码管的共阳极由AT89S51的P2口控制Q20-Q27来实现8位数码管的位输出控制。



这样,对于一组数码管动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。



由于各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。因此,同一时刻如果各位数码管的位选线都处于选通状态的话,8位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式。即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。同时,段线上输出相应位要显示字符的字型码。这样同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。



虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。



图3 数码管电路







数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。



在ME300B单片机开发系统中使用数码管来显示信息时,要将JP2的2、3端短接。见图3







二、演示程序的编程方法







1、4×4矩阵键盘的

编程方法:



1.1、先读取键盘的状态,得到按键的特征编码。



先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到16个键的特征编码。



举例说明如何得到按键的特征编码:



假设“1”键被按下,找其按键的特征编码。



从P1口的高四位输出低电平,即P1.4-P1.7为输出口。低四位输出高电平,即P1.0-P1.3为输入口。读P1口的低四位状态为“ 1101”,其值为“0DH”。



再从P1口的高四位输出高电平,即P1.4-P1.7为输入口。低四位输出低电平,即P10-P13为输出口,读P1口的高四位状态为“1110”,其值为“E0H”。



将两次读出的P0口状态值进行逻辑或运算就得到其按键的特征编码为“EDH”。



用同样的方法可以得到其它15个按键的特征编码。







1.2、根据按键的特征编码,查表得到按键的顺序编码。



将用上述方法得到的16个按键的特征编码按图2按键排列的顺序排成一张特征编码与顺序编码的对应关系表,然后用当前读得的特征编码来查表,当表中有该特征编码时,它所在的位置就是对应的顺序编码。







1.3、矩阵键盘键值查找程序的具体编程



这个演示程序的主要功能有:



1、识别键盘有无按键按下,若无键按下返回。



2、如果有键按下,找出具体的按键值(顺序码)。







=====================================================



矩阵键盘键值查找程序



键值存入30H单元



=====================================================



KEY_SCAN: ;识别键盘有无键按下子程序



MOV P1,#0F0H ;置列线为0,行线为1



MOV A,P1 ;读P1口



ANL A,#0F0H ;取出高四位



MOV B,A ;暂存到B



MOV P1,#0FH ;置列线为1,行线为0



MOV A,P1 ;读P1口



ANL A,#0FH ;取出低四位



ORL A,B ;高四位与低四位逻辑或运算重新组合



CJNE A,#0FFH,KEY_IN1 ;0FFH为无按键按下



RET







KEY_IN1: ;识别具体按键值子程序



MOV B,A ;将按键的特征编码暂存于B



MOV DPTR,#KEYTABLE



MOV R3,#0FFH



KEY_IN2:



INC R3 ;顺序码加1



MOV A,R3





MOVC A,@A+DPTR ;查表



CJNE A,B,KEY_IN3 ;比较,若相同则找到按键的特征编码。



MOV A,R3 ;找到特征编码后,取顺序码



MOV 30H,A ;存入30H单元



RET



KEY_IN3:



CJNE A,#00H,KEY_IN2 ;末完,继续查



RET ;00H为结束码



; 特征编码与顺序编码的对应关系表



KEY_TABLE:



DB 0EEH,0EDH,0EBH,0E7H,0DEH ;0,1,2,3,4, 顺序码



DB 0DDH,0DBH,0D7H,0BEH,0BDH ;5,6,7,8,9, 顺序码



DB 0BBH,0B7H,07EH,07DH,07BH, 077H ;A,B,C,D,E,F 顺序码



DB 00H ; 结束码







2、8位数码管显示程序的编程方法







根据要使用的数码管的具体位置来确定扫描初值和扫描方向。



根据使用数码管的个数来确定扫描的位数。



准备好要显示的数据,放入相应的显示单元中。



===========================================================



8位数码管显示子程序



;从右至左依次点亮8个数码管



===========================================================



DISPLAY:



MOV R1,#07FH ;扫描初值送入R1



MOV R2,#08H ;扫描位数送入R2



MOV R0,#30H ;开始填充显示单元







DISP1: MOV A,@R0 ;显示内容送入A



MOV DPTR,#TABLE ;获得表头



MOVC A,@A+DPTR ;查表获得显示数据



MOV P0,A ;显示单元数据



MOV P2,R1 ;开始显示当前位



MOV A,R1 ;准备显示下一位



RR A



MOV R1,A



INC R0 ;取下一个单元地址



LCALL DELAY2MS ;延时 2 MS



DJNZ R2,DISP1 ;重复显示下一个



RET ;显示完成,返回







因键值显示只需用一位数码管,可将上面的显示程序进行优化,得到下面的显示程序。



====================================================



键值显示子程序



====================================================



KEY_PLAER:



MOV A,30H ;键值数据送入A



MOV DPTR,#TABLE ;取段码表地址



MOVC A,@A+DPTR ;查显示数据对应段码



MOV P0,A ;段码送入P0口



CLR P2.7 ;第一个数码管显示



CALL DELAY2MS



SETB P2.7



RET



TABLE:



DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H



DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH














矩阵式键盘工作原理

将I/O口线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,这就构成了矩阵式键盘。矩阵式键盘中按键的数量可达行线数n乘以列线数m,如4行、4列的矩阵键盘的按键数可以达到4×4=16个。由此可见矩阵式键盘在按键较多时,可以节省I/O口线。
8位单片机系统常用键盘大小有4×4、4×8、8×8等。下面以4×4矩阵式键盘为例说明矩阵式键盘的工作原理,电路原理图如图7-2所示。
从图7-2可见,8条I/O口线分为4条行线和4条列线,按键设置在行线和列线交点上,即按键开关的两端分别接在行线和列线上。行线通过一个电阻接到+5V电源上,在没有键按下时,行线处于高电平状态。
判断是否有键按下的方法分下面几步:
(1) 向所有的列线I/O口输出低电平后,将行线的电平状态读人累加器A中。若无键下,行线仍保持高电平状态,若有键按下,行线至少应有一条为低电平。
(2) 确定有键按下后,求键码。
求键码的方法是:依次从一条列线上输出低电平,然后检查各行线的状态,若全为高电平,说明该闭合键不在该列,若不全为1,则说明闭合键在该列,且在变为低电平的行的交点上。
值得注意的是,在键盘处理程序中,每个键都被赋予了一个键号,由从列线I/O口输出的数据和从行线I/O口读入的数据可以求出闭合键的键号。

矩阵式键盘工作方式

在单片机应用系统中,非编码键盘由CPU通过键盘处理程序完成整个工作过程。相对CPU来说,按键闭合是随机发生的,键盘处理程序必须能够及时捕捉到闭合的键,并求出其键码。按照这一过程的不同,非编码键盘的工作方式可分为程序扫描方式和中断扫描方式。
1.程序扫描方式
一般情况下,在单片机应用系统中,键盘处理只是CPU工作的一部分。为了能及时发现有键按下CPU必须不断调用键盘处理程序,对键盘进行扫描,因此称为程序扫描方式。

图7-3是由8051与一种矩阵式键盘构成的接口电路。由8155扩展的I/O口作为行线和列线,构成具有32键的4×8的矩阵式键盘。行线与8l55的PC0—PC3相连,列线与PA口的8条线相连,键码如图7-3所示。
键盘工作过程如下:
⑴ 判断键盘中有无键按下。如PA 口输出00H,再将PC口的状态读入,若PC0~PC3全为1,说明无键按下,若不全1,则有键按下。
⑵ 消除抖动。当发现有键按下时,延时一段时间后再判断键盘的状态,若仍有键保持按下状态,则可断定有键按下,否则认为是抖动。
⑶ 求键号与键值。
键号是

键盘上各键的编号如1、2、3、…31。键值是根据扫描原理,各键所对应的16进制数码。结合图7-3,键号与键值对应关系如下:
①键号按照行首键号与列号相加的方法排列
列号0、1、2、3、4、5、6、7…
行首号是0、8、16、24,如10=8(行首号)+2(列号)
② 键值为列值加行值
“0”号键对应列线PA0=0,其它全为“1”列值为FE;行线中PC0=0,其它的全为“1”,高4位没有用,以“X”表示。行值为XE,故“0”号键对应键值为“FEXE”,如此类推。
⑷ 等待闭合键释放。为了避免一次闭合多次求其键,等待闭合键释放后再将键码送入A。
键盘处理程序流程图如图7-4所示,程序如下:
设主程序已把8155初始化PA口基本输出口,PC口为基本输入口。

KEY: LCALL KS ;判别有无键按下
JNZ K1 ;有键按下转K1
LCALL DELAY ;无键按调用延时子程序
AJMP KEY ;返回重新查询
K1: LCALL DELAY ;加长延时,消除键抖动
LCALL DELAY
LCALL KS ;再次查询有无键按下
JNZ K2 ;有键按下,转逐列扫描
AJMP KEY ;误读键,返回
K2: MOV R2, #0FEH ;首列扫描字送R2
MOV R4, #00H ;首列号送R4
K3: MOV DPTR, #PA ;A口地址送DPTR
MOV A, R2
MOVX @DPTR, A ;列扫描字送8155A口
INC DPTR
INC DPTR
MOVX A, @DPTR ;读取行扫描值
JB ACC.0, L1 ;第0行无键按下,转查第1行
MOV A, #00H ;第0行有键按下,行首键号送A
AJMP LK ;转求键号
L1: JB ACC.1, L2 ;第1行无键按下,转查第2行
MOV A, #08H ;第1行有键按下,行首键号送A
AJMP LK ;转求键号
L2: JB ACC.2, L3 ;第2行无键按下,转查第3行
MOV A, #20H ;第2行有键按下,行首键号送A
AJMP LK ;转求键号
L3: JB ACC.3, NEXT ;第3行无键按下,改查下一列
MOV A, #18H ;第3行有键按下,行首键号送A
LK: ADD A, R4 ;形成键码送A
PUSH ACC ;键码
K4: LCALL DELAY
LCALL KS ;等待键释放
JZ K4 ;未释放,等待
POP A ;键释放,弹出键码
RET
NEXT: INC R4 ;修改列号
MOV A, R2
JNB ACC.7, KEY ;8列扫描完返回KEY
RL A ;未扫描完扫描字左移一位
MOV R2, A ;扫描字存R2
AJMP K3
KS: MOV DPTR, #PA ;A口地址送入DPTR
MOV A, #00H ;全扫描字送A
MOVX @DPTR, A ;全扫描字PA口
INC DPTR ;指向C口
INC DPTR
MOVC A, @DPTR ;读入PC口状态
CPL A ;变正逻辑、高电平表示有键按下
ANL A, #0FH ;屏蔽高4位
RET
DELAY: MOV R7, #0FFH
LP0: MOV R6, #0FFH
L

P: NOP
DJNZ R6, LP
DJNZ R7, LP0 ;延时子程序
RET
在程序中KS为查询有无键按下的子程序;DELAY为延时子程序。
2.中断扫描方式
采用扫描方式,无论有无键按下CPU都要定时扫描,特别是在那些按键次数不多的系统,反复空扫描,浪费了CPU的大量时间。为了提高CPU的效率,常采用中断方式。所谓中断方式就是当有按键按下时发出中断请求信号,中断响应后转入中断服务子程序,再去抖动、求键码和处理按键等工作。
图7-5所示为中断扫描方式的接口电路图。矩阵式键盘与8051单片机的P1口直接相连,其中P1.7~P1.4经二极管与行线连接,P1.3~P1.0与列线连接,另一端经电阻与+5V电源相连。列线与一个与门的输入端相连,与门输出端接8051的 。当P1.7~P1.4全为0状态时,若无键闭合, 保持高电平,若有键闭合时, 变为低电平,CPU开中断时,就会响应中断,转向中断服务程序。由于中断方式键盘处理过程和程序扫描方式大致相同,这里不再作详细介绍。




相关主题
文本预览
相关文档 最新文档