4×4矩阵键盘的工作原理与编程

  • 格式:pdf
  • 大小:1.01 MB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ME300B单片机学习开发系统应用之三

---4×4矩阵键盘的工作原理与编程

本文介绍如何在ME300B型51/AVR单片机学习开发系统上使用数码管显示4×4矩阵键盘的键值。

一、硬件工作原理的简单介绍

该实验使用ME300B上的8位数码管显示电路和4×4矩阵键盘电路。现将这二部分的电路工作原理进行简单的介绍:

1、4×4矩阵键盘的工作原理

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

K2 P15K3 P16

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

所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。

在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;找到特征编码后,取顺序码

MOV30H,A;存入30H单元

RET

KEY_IN3:

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

RET;00H为结束码

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

KEY_TABLE:

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

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

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

DB00H;结束码

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;延时2MS

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