- ;=================================================================
- ;程序编写人:兰建
- ;编写地点:51hei培训机构
- ;时间:6月4日上午星期四
- ;功能:矩阵键盘在P1口,利用反转法读取键值,16个独立按键中的1-15号
- ;按键均有两个功能,定义16号按键为功能键,按下不显示任何数字,当按
- ;住这个案件不松,再按下1-15号按键时,数码显示16-30.
- ;=======================开始初始化================================
- SHUCHU EQU P0 ;定义P0口为输出口
- PIANXUAN EQU P2 ;设置P2.0为片选
- JIANPAN EQU P1 ;键盘接口
- ;========================程序开始================================
- ORG 00H ;程序开始
- JMP START ;跳到START
- ORG 0030H ;入口地址
- START:
- MOV PIANXUAN,#05 ;片选
- MOV SHUCHU,#0FFH ;上电默认不显示
- MOV R0,#00H ;顺序码清零
- MOV 30H,#00H ;键值存储单元清零
- LOOP:
- MOV JIANPAN,#0F0H ;把P1口高四位设为输入,同时把低四位设为0
- MOV A,JIANPAN ;读P1口高四位列线
- ANL A,#0F0H ;屏蔽低四位
- MOV B,A ;保存高四位列线
- MOV JIANPAN,#0FH ;把P1口低四位设为输入,同时把高四位设为0
- MOV A,JIANPAN ;读取P1口低四位行线
- ANL A,#0FH ;屏蔽高四位
- ORL A,B ;列线和行线合并
- CJNE A,#0FFH,KEY ;判断是否右键按下,右则跳到按键处理
- JMP LOOP ;没有返回继续查询
- KEY:
- MOV 30H,A ;保存键值
- MOV DPTR,#TAB1 ;指向键值表
- MOV R0,#0FFH ;FF+1=0所以R0里面放FF,既可以显示0
- L1:
- INC R0 ;顺序码加1
- MOV A,R0 ;
- MOVC A,@A+DPTR ;查键值表
- CJNE A,#77H,L2 ;判断是否键值为表格最后一个
- JMP LOOP ;相等表示没按键按下或者查到最后了,返回重新查询
- L2:
- CJNE A,30H,L1
- CALL JISUAN ;计算处理分离十位和个位
- CALL DISPLAY ;动态显示十位和个位
- JMP LOOP ;返回、重新查询
- ;========================计算子程序=========================
- ;输入:30H
- ;输出:"A和B"
- ;实现的功能:把30H的数据的十位和个位分离出来
- ;============================================================
- JISUAN:INC R0
- MOV A,R0 ;数据放在A中
- MOV B,#10 ;除数放在B中
- DIV AB ;商放在A中,余数放在B中
- RET
- ;========================显示子程序==========================
- ;输入:"A"
- ;输出:"P0口"
- ;实现的功能:把A的数输出到P0口显示,十位和个位分开显示
- ;============================================================
- DISPLAY:MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示十位
- MOV PIANXUAN,#02H ;片选
- CALL DELAY
- MOV SHUCHU,#0FFH
- MOV A,B
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示个位
- MOV PIANXUAN,#03H ;片选
- CALL DELAY ;延时
- MOV SHUCHU,#0FFH
- RET
- ;========================延时程序============================
- ;输入;无
- ;输出: 无
- ;实现的功能:延时一段时间
- ;============================================================
- DELAY:
- MOV R6,#80
- L7:MOV R5,#80
- DJNZ R5,$
- DJNZ R6,L7
- RET
- ;=======================共阳查表数据==============================
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H, 82H,0F8H,80H,90H ;0-9共阳极数据
- ;=======================共阳查表数据==============================
- TAB1:DB 0EEH,0DEH,0BEH,07EH,0EDH,0DDH,0BDH,07DH
- DB 0EBH,0DBH,0BBH,07BH,0E7H,0D7H,0B7H ;反转描码表
- DB 66H,56H,36H,76H,65H,55H,35H,75H,63H
- DB 53H,33H,73H,67H,57H,37H,77H
- ;=========================程序结束================================
- END
复制代码
|