⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3x4jian.asm

📁 3X4键盘扫描显示Proteus仿真程序
💻 ASM
字号:
KB_DELAY1   EQU    30H     ;键盘子程序中延时用寄存器1  
KB_DELAY2   EQU    31H     ;键盘子程序中延时用寄存器2
H_NUM       EQU    32H     ;键盘程序中的行号器
 
     ORG       0000H
       AJMP      START
;ORG  0003H
;LJMP  KEY


          START:
           ;SETB  Ex0
      ;SETB  IT0
      ;SETB  ex1
      ;SETB  IT1
      ;SETB  ES
      ;SETB  EA   
;KEYBOARD:   

  
;MOV  R2,#01H    
;CJNE  R2,#01H, KEY_FX        
;AJMP  KEYBOARD 
;以下为键盘扫描与键值识别程序
KEYBOARD:
       LCALL     KB_SCAN       ;调用键盘扫描程序
       JZ        KEYBOARD      ;若无按键动作,循环扫描
       LCALL     KB_DELAY      ;若有按键动作,调用20ms延时程序去抖动
       LCALL     KB_SCAN       ;然后再调用键盘扫描程序,看是否真的有按键动作
       JZ        KEYBOARD      ;若是抖动,则返回循环扫描


 ;确实有按键动作,分析键值   

      ;SETB       P1.4          ;使P1口的低四位口线接收数据
      ;SETB       P1.5
      ;SETB        P1.6
      MOV       P1,#11111110B  ;P1.0这一行送0
       MOV       H_NUM,#0       ;此行行号为0
       LCALL     KB_ID          ;调用按键识别程序

       MOV       P1,#11111101B  ;P1.1这一行送0
       MOV       H_NUM,#3       ;对应的此行的行号为3
       LCALL     KB_ID          ;调用按键识别程序

       MOV       P1,#11111011B  ;P1.2这一行送0
       MOV       H_NUM,#6       ;对应的此行的行号为6
       LCALL     KB_ID          ;调用按键识别程序

       MOV       P1,#11110111B  ;P1.3这一行送0
       MOV       H_NUM,#9      ;对应的此行的行号为9
       LCALL     KB_ID          ;调用按键识别程序


     AJMP      KEYBOARD        



;按键识别程序
KB_ID:
       JB       P1.6,KBID_P15    ;如若不是P1.6列有动作,跳转查下一列
       JNB     P1.6,$           ;如果是该列动作,当按键未松开时,在此循环等待
       MOV      A,#1             ;按键松开时,将该列的列号赋值给A
       ADD      A,H_NUM          ;将行号和列号相加,得到按键的键值

MOV DPTR,#TABLE
	MOVC A,@A+DPTR
    MOV P2,A
       RET

  KBID_P15:
       JB       P1.5,KBID_P14    ;如若不是P1.5列有动作,跳转查下一列
       JNB      P1.5,$           
       MOV      A,#2            ;将该列的列号赋值给A
       ADD      A,H_NUM          ;行号和列号相加得键值
  

 MOV DPTR,#TABLE
	MOVC A,@A+DPTR
	MOV P2,A
       RET
     
  KBID_P14: 
       JB       P1.4, KEID_END    ;如若不是P1.4列有动作,跳转到返回处
       JNB      P1.4,$
       MOV      A,#3          ;该列的列号赋值给A
       ADD      A,H_NUM          ;行号和列号相加得键值

      MOV DPTR,#TABLE
	MOVC A,@A+DPTR
    
	MOV P2,A
        KEID_END:       
       RET
;键盘扫描程序
KB_SCAN:
       ;SETB      P1.4            ;使P1口的低四位口线处于接收状态
       ;SETB      P1.5
       ;SETB      P1.6            
MOV       P1,#11110000B   ;P1口寄存器高四位赋初值为1,低四位赋初值为0
       MOV       A,P1
       XRL       A,# 11110000B    ;判断P1口是否有按键动作,若有则A不全为0,若没有动作则A中全为0
       RET


;键盘去抖动延时子程序,延时为20ms
KB_DELAY:
       MOV       KB_DELAY1,#100
 KB_D0:MOV       KB_DELAY2,#200
 KB_D1:DJNZ      KB_DELAY2,KB_D1
       DJNZ      KB_DELAY1,KB_D0
       RET
     
;KEY:
   ;MOV  R2,#00H
   
   ;RETI
TABLE:  DB 11000000B ;0
		 DB 11111001B ;1
	  	DB 10100100B ;2
		DB 10110000B ;3
		DB 10011001B ;4
		DB 10010010B ;5
		DB 10000010B ;6
		DB 11111000B ;7
		DB 10000000B ;8
		DB 10010000B ;9
		DB 10001001B ;10
		DB 11000000B ;11
		DB 10011100B ;12
		
	
end



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -