- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
任务九:8-8矩阵键盘
任务九:8*8矩阵键盘数码管显示实验
ORG 00H
LJMP MAIN
ORG 30H
MAIN: MOV P0,#0FFH ;初始化
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV 30H,#00H ;行编码放置单元
MOV 31H,#00H ;列编码放置单元
MOV 32H,#100 ;键值放置单元
LOOP: LCALL KEYS ;按键判断子程序
LCALL DELAY ;延时10MS
LCALL KEYS;按键判断子程序
LCALL PANDUAN;判断行号和列号
LCALL JISUAN;计算键值
LCALL SHOW ;数码管显示键值
LJMP LOOP
KEYS: MOV P1,#00H ;按键判断子程序,
MOV P3,#0FFH ;列为0,行为1
MOV A,P3
CJNE A,#0FFH, KEYS1
LJMP KEYS_RET
KEYS1:MOV 30H,A ;有键按下,行编码放入30H
MOV P3,#00H ;列为1,行为0
MOV P1,#0FFH
MOV A,P1
CJNE A,#0FFH, KEYS2
LJMP KEYS_RET
KEYS2:MOV 31H,A;有键按下,列编码放入31H
KEYS_RET:
RET
PANDUAN: ;判断行号和列号
MOV A,30H;判断行号
MOV R0,#00H;行号值放入R0中
PANHANG1:
JNB ACC.0,PANLIE
INC R0
RR A
LJMP PANHANG1
PANLIE:MOV A,31H;判断列号
MOV R1,#00H; 列号值放入R1中
PANLIE1:
JNB ACC.0, PANDUAN_RET
INC R1
RR A
LJMP PANLIE1
PANDUAN_RET:
RET
JISUAN:MOV A,R0;计算键值
MOV B,#8;行号乘以8加列号
MUL AB
ADD A,R1
MOV 32H,A;键值放入32H单元中
RET
SHOW: ;显示子程序
MOV A,32H
MOV B,#10
DIV AB
MOV DPTR,#TAB ;将32H中值
MOVC A,@A+DPTR;十位显示出来
MOV P0,#0FFH
MOV P0,A
MOV P2,#0FEH
LCALL DELAY
MOV A,B
MOV DPTR,#TAB ;将32H中值
MOVC A,@A+DPTR;个位显示出来
MOV P0,#0FFH
MOV P0,A
MOV P2,#0FDH
LCALL DELAY
RET
DELAY:MOV R7,#40;延时10MS子程序
D1:MOV R6,#123
NOP
D2:DJNZ R6, D2
DJNZ R7,D1
RET
TAB: ;数码管段码表
DB 0C0H,0F9H,0A4H,0B0H
DB 099H,092H,082H,0F8H
DB 080H,090H,088H,083H
DB 0C6H,0A1H,086H,08EH
END
说明:此例与4*4键盘一样,先行线为0,列线为1;然后行线为1,列线为0;其都为8位不能合并,采用“行号*8+列号=键值”形式,行号(0~7)8行,列号(0~7)8列。
行号列号判断有专门的子程序,另外键值显示部分采用的是动态显示(显示的是两位数)。
返回
键值送32H单元
再加列号
取行号(R0值)
行号乘以8到A
计算键值子程序
计算键值子程序
N
返回
取列编码到A
Y
ACC.0=0?(行编码的最后一位是否为0?)
取行编码到A
R0清零(用来放行号)
判断行号列号子程序
按键判断子程序
按键判断
按键判断
返回
Y
N
行编码放入30H中
按键判断子程序
A=0FF
文档评论(0)