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

📄 keyboard.txt

📁 本代码是基于单片机sst89c58的测试代码设计
💻 TXT
字号:
DTIME EQU 48H
ORDER EQU 50H ;键盘命令标志
KEYNUM EQU 51H;定义键值,连续四个字节51H,52H,53H,54H,分别存储X,Y(由高到低)
ORG 0000H
LJMP MAIN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
             ORG 0030H
MAIN:
BLOCK0:           
             LCALL  KEYPRO         
             MOV    A,ORDER
             ANL    A,#0F0H          ;??????????
             CLR    C                ;??????????
             SUBB   A,#80H           ;??????????         
             JZ     BLOCK0
             MOV    R5,#4            ;循环4次,第一次是X坐标的十位 
                                  ;第二次是X的个位,第三次是Y的十位,第四次是 
                                  ;Y的个位 
             MOV    R1,#51H          ;坐标值存储区
NUMS:
             LCALL  KEYPRO         ;KEYPRO出口是R3
             MOV    A,R3
             ;DEC   R1
             ;SUBB   A,@R1
             ;JNZ    GETIT           ;与上一次不相等则取数,否则增加一次采样
             ;INC    R1
             ;INC    R5   
             ;GETIT:
             ;INC    R1
             ;MOV    A,R3
             MOV    @R1,A
             INC    R1
             LCALL  KEYDELAY
             DJNZ   R5,NUMS
             MOV    A,#0             ;寄存器组清零
             MOV    R7,A
             MOV    R6,A
             MOV    R5,A
             MOV    R3,A
             MOV    R1,A
             MOV    R0,A
BLOCK1: 
             MOV    A,#4BH          ;清屏指令键编码
             CLR    C
             SUBB   A,ORDER
             JZ     CLR_KEYNUM       ;清屏键按下,跳到CLR_KEYNUM处
             MOV    DTIME,R7
             MOV    R7,#255
SHOW:                             ;显示程序段
             LCALL  DISPLAY
             DJNZ   R7,SHOW
             MOV    R7,DTIME
             LJMP   BLOCK0
CLR_KEYNUM:                       ;清屏程序段
             MOV    R7,4
             MOV    R0,#51H
CLRNOW:
             MOV    A,#0
             MOV    @R0,A
             INC    R0
             DJNZ   R7,CLRNOW   
             LJMP   BLOCK0


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;KEYDELAY;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEYDELAY:
            MOV    R2,#255
DEL0:
            MOV    R4,#255
            DJNZ   R4,$
            DJNZ   R2,DEL0
            RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;KEYPRO函数出口是R3,ORDER;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEYPRO:    ;该函数出口是R3
LOOP0:                    
           MOV    R6,#4   ;扫描四次
           MOV    R7,#01H;键盘扫描初值
LOOP1:
           MOV    DPTR,#0E400H 
           MOV    A,R7
           MOVX   @DPTR,A       ;设置扫描初值
           MOV    DPTR,#0E000H 
           MOVX   A,@DPTR        ;读键盘初值
           ANL    A,#0FH ;
           CJNE   A,#0FH,FINTABLE  
           ;本行没有按键按下,则继续扫描
           MOV    A,R7
           RL     A
           MOV    R7,A   ;移位扫描下一行
           DJNZ   R6,LOOP1         ;
           LJMP   LOOP0 ;没有键按下则等待????????????????????????????????????????????

FINTABLE:      ;有按键按下转到该处


           SWAP     A
           ADD      A,R7    ;组成8BIT状态
           SWAP     A
           MOV      R7,A           ;R7内是按键状态值
           ANL      A,#0F0H
           CJNE     A,#0F0H,KDEFINE;若不是命令键,转到数字定义程序,否则把命令值给ORDER
           MOV      A,R7
           MOV      ORDER,A  ;把命令值赋给ORDER

            LJMP    EXIT ;有命令键按下跳出????????????????????????
KDEFINE:

SAME:  
            MOVX    A,@DPTR        ;读键盘初值
            ANL     A,#0FH ;
            CJNE    A,#0FH,SAME

            MOV     R0,#0
            MOV     R6,#10
 GO_ON:
            MOV     DPTR,#TABLE
            MOV     A,R0
            MOVC    A,@A+DPTR
            CLR     C
            SUBB    A,R7   ;R7内是按键状态值
            JZ      OK       ;找到对应状态值,转到OK处,否则继续查找
            INC     R0
            INC     R0
            DJNZ    R6,GO_ON ;
            INC     R5     ;最后仍未找到,说明所按的键非法,R5加一,再等待按键???是否加提示信
                           ;息????????????????????????????????????????????????????????
OK:                        ;把状态值转换为定义值
            INC     R0
            MOV     A,R0
            MOVC    A,@A+DPTR
            MOV     R3,A
EXIT:
                    RET 
TABLE: DB 1EH,1,1DH,2,1BH,3,17H,4,2EH,5,2DH,6,2BH,7,27H,8,4EH,9,4DH,0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;DISPLAY子程徐;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  DISPLAY:
	           MOV 		R1,#51H       ;指向显示数据首址
                   MOV 		R6,#10H      ;扫描控制字初值
             PLAY: MOV 		A,R6          
                   MOV 		DPTR,#0E400H  ;送扫描地址
                   MOVX   	@DPTR,A        
		   MOV          A,@R1
                   MOV 		DPTR,#TAB     
                   MOVC		A,@A+DPTR     
                   MOV 		DPTR,#0E200H  ;送数码管地址
		   MOVX         @DPTR,A
                   LCALL 	DL1MS        
                   INC 		R1            
                   MOV 		A,R6            
                   JB 		ACC.7,ENDOUT    ;ACC.8=0时一次显示结束
                   RL		A               
                   MOV 		R6,A            
                   AJMP 	PLAY           
           ENDOUT: MOV          A,#00H          
                   MOV 		DPTR,#0E200H      
		   MOVX         @DPTR,A
		   MOV          DPTR,#0E400H
		   MOVX         @DPTR,A 
                   RET
             TAB: DB 0FAH,10,0E3H,6BH,1BH,79H,0F9H,2AH,0FBH,7BH,01H
;共阳段码表          "0""1""2" "3""4""5""6""7" "8""9"--"
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           延时程序                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;1MS延时程序,LED显示程序用
             DL1MS: MOV 	R2,#10
             DL1:   MOV 	R4,#200
             DL2:   DJNZ 	R4,DL2
                    DJNZ 	R2,DL1
                    RET
END

⌨️ 快捷键说明

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