查看: 1149|回复: 0
打印 上一主题 下一主题

最简行列式按钮识别程序

[复制链接]
跳转到指定楼层
沙发
发表于 2015-9-26 21:55:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ORG 0000H
              LJMP START
              ORG 0050H
       START:  MOV DPTR,#TAB
     MAIN:   MOV P2,#0FH
       M1: MOV A,P2
              CJNE A,#0FH,M2
              SJMP M1
       M2: LCALL DEL   ;延时子程序
              MOV A,P2
              CJNE A,#0FH,M3   
              SJMP M1     ;去抖动
       M3: LCALL KEY
              MOVC A,@A+DPTR  ;查表取出键码
              MOV P0,A
                CLR P1.3        ;显示
              LCALL DEL
              SJMP MAIN
    ;----------计算键值子程序------------
         ;-----首先计算行键值-----------
       KEY:    JB P2.0,K4   ;判断行线P2.0上按键有无按下
              MOV R0,#0    2.0已按下
              SJMP ZERO    ;跳转至计算列键值
       K4: JB P2.1,K8   ;判断行线P2.1上按键有无按下
              MOV R0,#4    2.1已按下
              SJMP ZERO
       K8: JB P2.2,KC   ;判断行线P2.2上按键有无按下
              MOV R0,#8    2.2已按下
              SJMP ZERO
       KC: MOV R0,#0CH
          ;----计算列键值-------------
       ZERO:   MOV P2,#0F0H  
              JB P2.4,ONE  ;判断行线P2.4上按键有无按下
              MOV R1,#0    2.4已按下
              SJMP WAIT    ;跳转至等待按键释放
       ONE:     JB P2.5,TWO  ;判断行线P2.5上按键有无按下
              MOV R1,#1    2.5已按下
              SJMP WAIT
       TWO:    JB P2.6,THR  ;判断行线P2.6上按键有无按下
              MOV R1,#2    2.6已按下
              SJMP WAIT
       THR:      MOV R1,#3    2.7已按下
           ;----等待按键释放-------
       WAIT:   MOV P2,#0F0H   ;等待按键释放
              MOV A,P2
              CJNE A,#0F0H,WAIT
              MOV A,R0
              ADD A,R1     ;计算出键值
              RET
           ;----延时子程序-------
       DEL:      MOV R6,#40
       D1:  MOV R7,#248
              DJNZ R7,$
              DJNZ R6,D1
              RET

       TAB:      DB  0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H

              DB 88H,83H,0C6H,0A1H,86H,8EH
            END            
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表