资源预览内容
第1页 / 共2页
第2页 / 共2页
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
程序程序 12-2:扫描键盘(对应图:扫描键盘(对应图 12-7) ORG00H; 起始地址 00HK1:MOVP2, #0F0H; 设置 P2.4P2.7 为输入端口MOVA, P2; 从 P2 读取所有列的值ANLA, #11110000B; 屏蔽掉无用的低 4 位,非列值CJNEA, #11110000B, K1; 查询直到所有的按钮释放K2:CALLDELAY; 调用 20ms 延时子程序(省略)MOVA, P2; 从 P2 读取状态,看有没有按钮被按下ANLA, #11110000B; 屏蔽掉无用的低 4 位,非列值CJNEA, #11110000B, OVER; 如果有按钮按下,跳到 OVERJMPK2; 循环检测 OVER:CALLDELAY; 延时 20ms 防止抖动MOVA, P2; 从 P2 读取状态ANLA, #11110000B; 屏蔽掉无用的位CJNEA, #11110000B, OVER1; 如果有按钮按下,找到行 JMPK2; 如果没有按钮按下,循环扫描OVER1:MOVP2, #11111110B; 第 0 行输出低电平MOVA, P2; 读所有的列ANLA, #11110000B; 屏蔽掉无用的位CJNEA, #11110000B, ROW_0; 如果第 0 行有按钮按下,找列MOVP2, #11111101B; 第 1 行输出低电平MOVA, P2; 读所有的列ANLA, #11110000B; 屏蔽掉无用的位CJNEA, #11110000B, ROW_1; 如果第 1 行有按钮按下,找列MOVP2, #11111011B; 第 2 行输出低电平MOVA, P2; 读所有的列ANLA, #11110000B; 屏蔽掉无用的位CJNEA, #11110000B, ROW_2; 如果第 2 行有按钮按下,找列MOVP2, #11110111B; 第 3 行输出低电平MOVA, P2; 读所有的列ANLA, #11110000B; 屏蔽掉无用的位CJNEA, #11110000B, ROW_3; 如果第 3 行有按钮按下,找列LJMPK2; 如果没有,则循环ROW_0:MOVDPTR, #KCODE0; 设置 DPTR=第 0 行的起始地址SJMPFIND; 找列ROW_1:MOVDPTR, #KCODE1; 设置 DPTR=第 1 行的起始地址SJMPFIND; 找列ROW_2:MOVDPTR, #KCODE2; 设置 DPTR=第 2 行的起始地址SJMPFIND; 找列ROW_3:MOVDPTR, #KCODE3; 设置 DPTR=第 3 行的起始地址FIND:SWAPAFIND1:RRCA; 看看是否进位 C 为 0JNCMATCH; 如果是 0,就跳到 MATCH 找键值INCDPTR; DPTR 加 1SJMPFIND1; 循环查找MATCH:CLRA; A=0MOVCA, A+DPTR; 用 DPTR 在数据表中找到键值装入 AMOVP1, A; 显示键值LJMPK1; 循环DELAY:; 延时 20ms 程序,省略RET; 键值保存在以下的数据表中,可根据系统实际需要进行修改ORG300H; 数据表起始地址KCODE0: DB1,2,3,T; 第 0 行KCODE1: DB4,5,6,U; 第 1 行KCODE2: DB7,8,9,D; 第 2 行KCODE3: DB*,0,#,C; 第 3 行END
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号