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

📄 8255_key.asm

📁 MCS-51单片机实验 39个实用实验和源码
💻 ASM
字号:
;FOR    EAT598-HD-V3.0
;---------------------------------------------------------
C8255   EQU     0F22BH          ;8255命令口地址
P8255A  EQU     0F228H          ;8255 PA口地址
P8255B  EQU     0F229H          ;8255 PB口地址
P8255C  EQU     0F22AH          ;8255 PC口地址
KEYVAL  EQU     30H             ;读到的键码
FLAG    EQU     40H				;有键标志
;---------------------------------------------------------
        ORG     0000H
        SJMP    START
        ORG     0030H
START:        
        MOV     SP,#60H
        MOV     FLAG,#00H       ;按键标志初始值:00无键,FF有键
        MOV     R2,#0FEH		;位码初始值
        LCALL   DELAY  
        MOV     KEYVAL,#00H     ;置显示初始值
        MOV     DPTR,#C8255
      ;  MOV     A,#82H         ;PB口输入,PA,PC口输出
        MOV     A,#90H          ;PC口输出,PA输入,PB口输出
        MOVX    @DPTR,A
        MOV     DPTR,#P8255C    
	    MOV     A,#00H
	    MOVX    @DPTR,A
   
KB_DIS:
        LCALL   RD_KB          ;读键子程序 
        LCALL   DISP           ;显示子程序 
        SJMP    KB_DIS         ;循环扫描
;---------------------------------------------------------         
DISP: 
		MOV     A,FLAG
		JZ      DISP_END       ;无键转DISP_END;有键显示
        MOV     DPTR,#C8255
        MOV     A,#89H         ;PC口输入,PA,PB口输出
        MOVX    @DPTR,A
   ;	MOV     DPTR,#P8255A   ;显示键值
		MOV 	DPTR,#P8255A   ;写位码
		MOV 	A,R2
		MOVX	 @DPTR,A	   
		MOV     DPTR,#P8255B   ;显示键值
	    MOV     A,KEYVAL             
        MOVX    @DPTR,A
        LCALL   DELAY1         ;显示延时
        LCALL   DELAY1        
		MOV  	A,R2		   ;下一位	
		SETB 	C
		RLC  	A
		MOV  	R2,A
		CJNE    A,#0FFH,DISP_END;八位轮回
		MOV   	R2,#0FEH        ;重置位码初值
DISP_END:     
        RET
;---------------------------------------------------------         
;读取键盘子程序
RD_KB:
        MOV     DPTR,#C8255
        MOV     A,#90H          ;PC口输出,PA输入,PB口输出
        MOVX    @DPTR,A
        MOV     A,#02H         ;键盘扫描第一行
        MOV     DPTR,#P8255C
        MOVX    @DPTR,A          
   ;     MOV     DPTR,#P8255B    
        MOV     DPTR,#P8255A    
        MOVX    A,@DPTR        
        CJNE    A,#0FFH,KEY_L0 ;判键是否按下,有键转KEY_L0
		SJMP    KEY_L1         ;无键转第二行 
KEY_L0:
        LCALL   DELAY22          ;延时消抖        
   ;     MOV     DPTR,#P8255B    ;读键值 
        MOV     DPTR,#P8255A  
        MOVX    A,@DPTR                 
        MOV     R1,#00H
        CJNE    A,#0FFH,KEYCAL ;计算键值   
KEY_L1:
        MOV     A,#01H         ;扫描第二行
        MOV     DPTR,#P8255C
        MOVX    @DPTR,A         
   ;     MOV     DPTR,#P8255B    ;读键值 
        MOV     DPTR,#P8255A  
        MOVX    A,@DPTR
        CJNE    A,#0FFH,J_KEY_L1;判键是否按下,有键转J_KEY_L1
        SJMP    NOKEY          ;无键转结束
J_KEY_L1:
        LCALL   DELAY22          ;延时消抖 
    ;     MOV     DPTR,#P8255B    ;读键值 
        MOV     DPTR,#P8255A  
        MOVX    A,@DPTR          
        MOV     R1,#08H
        CJNE    A,#0FFH,KEYCAL ;计算键值 
        SJMP    NOKEY          ;无键按下       
KEYCAL:                        ;计算键码
        MOV     R0,#08H
SHIFT:
        RRC     A
        JNC     CALC
        INC     R1
        DJNZ    R0,SHIFT
CALC:                           ;换算显示码
        MOV     DPTR,#LEDSEG
        MOV     A,R1
        MOVC    A,@A+DPTR
        MOV     KEYVAL,A          
        SJMP    KEYWAIT
NOKEY:                      
        MOV     FLAG,#00H
        SJMP    KEYEXIT
KEYWAIT:
	;	MOV     DPTR,#P8255B	;等待键释放
	    MOV     FLAG,#0FFH
	    MOV     DPTR,#P8255A 
		MOVX    A,@DPTR   
		CJNE    A,#0FFH,KEYWAIT 
KEYEXIT:RET       
;---------------------------------------------------------        
DELAY:  MOV     R0,#0H          ;延时20MS子程序
DELAY0:
        MOV     R1,#27H
        DJNZ    R1,$
        DJNZ    R0,DELAY1
        RET
;---------------------------------------------------------        
DELAY1:  MOV     R0,#0H          ;延时
DELAY11:
        MOV     R1,#00H
        DJNZ    R1,$
        DJNZ    R0,DELAY11
        RET        
;---------------------------------------------------------        
DELAY2:  MOV     R0,#0H          ;延时
DELAY22:
        MOV     R1,#10H
        DJNZ    R1,$
        DJNZ    R0,DELAY22
        RET                
;---------------------------------------------------------          
;LED显示常数表
LEDSEG: DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H    ;0,1,2,3,4,5,6,7
        DB      7FH,6FH,77H,7CH,39H,5EH,79H,71H    ;8,9,A,B,C,D,E,F
;---------------------------------------------------------        
        END

⌨️ 快捷键说明

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