本文引用地址:https://www.eepw.com.cn/article/201611/321762.htm=====================================================
矩阵键盘键值查找程序
键值存入30H单元
=====================================================
KEY_SCAN:;识别键盘有无键按下子程序
MOVP1,# 0F0H;置列线为0,行线为1
MOVA,P1;读P1口
ANLA,#0F0H;取出高四位
MOVB,A;暂存到B
MOVP1,#0FH;置列线为1,行线为0
MOVA,P1;读P1口
ANLA,#0FH;取出低四位
ORLA,B;高四位与低四位逻辑或运算重新组合
CJNEA,#0FFH,KEY_IN1;0FFH为无按键按下
RET
KEY_IN1:;识别具体按键值子程序
MOVB,A;将按键的特征编码暂存于B
MOVDPTR,#KEYTABLE
MOVR3,#0FFH
KEY_IN2:
INCR3;顺序码加1
MOVA,R3
MOVCA,@A+DPTR;查表
CJNEA,B,KEY_IN3;比较,若相同则找到按键的特征编码。
MOVA,R3;找到特征编码后,取顺序码
MOV30H,A;存入30H单元
RET
KEY_IN3:
CJNEA,#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;延时2 MS
DJNZ R2,DISP1;重复显示下一个
RET;显示完成,返回
因键值显示只需用一位数码管,可将上面的显示程序进行优化,得到下面的显示程序。
====================================================
键值显示子程序
====================================================
KEY_PLAER:
MOVA,30H;键值数据送入A
MOVDPTR,#TABLE;取段码表地址
MOVCA,@A+DPTR;查显示数据对应段码
MOVP0,A;段码送入P0口
CLRP2.7;第一个数码管显示
CALLDELAY2MS
SETBP2.7
RET
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH;0-F
三、演示程序的功能
当你按下矩阵键盘中的任何一个键,蜂鸣器响一声,并在数码管上显示相应的键值。图4为ME300B开发系统的实际演示图片。

图4ME300B开发系统显示键值“E”
评论