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

📄 key_led1.asm

📁 此程序为调试通过的程序
💻 ASM
字号:
clk  bit  p2.5
dout bit  p2.6
en   bit  p2.7
KEYBUF    EQU  35H
KEY  EQU  39H
DISPBUF   EQU  20H
FLAG0     EQU  0
;***************************************************
            ORG   000H
            AJMP  START
;***************************************************
            ORG   0100H
START:
            MOV   R0,#7FH
            CLR   A
CLRRAM:     MOV   @R0,A
            DJNZ  R0,CLRRAM
            MOV   SP,#7DH
;***************************************************
            MOV   P0,#0FFH
            MOV   P1,#0FFH
            MOV   P2,#0FFH
            MOV   P3,#0FFH
;***************************************************
;初始化参数
;***************************************************
;主程序
;***************************************************
WAIT:
            lcall   keyinput            ;是否有键盘输入
            MOV     A,FLAG0
            CJNE    A,#1H,WAIT
            LCALL   SETDISPBUF
            LCALL   TSLED
            LJMP    WAIT

;******************************************************
KEYINPUT:
            MOV         KEYBUF,#2
;
            MOV         P0,#0FFH
            CLR         P0.4
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH          ;有键按下吗?
            JZ          NOKEY1
            LCALL       DELY10US
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH          ;真的有键按下吗?
            JZ          NOKEY1
            MOV         A,P0
            ANL         A,#0FH
            CJNE        A,#0EH,NK1      ;键码的值是多少?P0.4xP0.0
            MOV         KEYBUF,#3
            LJMP        DK1
NK1:        CJNE        A,#0DH,NK2      ;键码是P0.4xP0.1 ?
            MOV         KEYBUF,#2
            LJMP        DK1
NK2:        CJNE        A,#0BH,NK3      ;键码是P0.4xP0.2 ?
            MOV         KEYBUF,#1
            LJMP        DK1
NK3:        CJNE        A,#07H,NK4      ;键码是P0.4xP0.3 ?
            MOV         KEYBUF,#0
            LJMP        DK1
NK4:        NOP
DK1:
            MOV         A,KEYBUF
            MOV         DPTR,#TAB
            MOVC        A,@A+DPTR       ;查表,取键值
            MOV         KEY,A
            MOV         FLAG0,#1        ;FLAG0=1

DK1A:       MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH          ;按键有没有松开?
            JNZ         DK1A
NOKEY1:
            MOV         P0,#0FFH
            CLR         P0.5
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY2
            LCALL       DELY10US
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY2
            MOV         A,P0
            ANL         A,#0FH
            CJNE        A,#0EH,NK5
            MOV         KEYBUF,#7
            LJMP        DK2
NK5:        CJNE        A,#0DH,NK6
            MOV         KEYBUF,#6
            LJMP        DK2
NK6:        CJNE        A,#0BH,NK7
            MOV         KEYBUF,#5
            LJMP        DK2
NK7:        CJNE        A,#07H,NK8
            MOV         KEYBUF,#4
            LJMP        DK2
NK8:        NOP
DK2:
            MOV         A,KEYBUF
            MOV         DPTR,#TAB
            MOVC        A,@A+DPTR
            MOV         KEY,A
            MOV         FLAG0,#1        ;FLAG0=1

DK2A:       MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JNZ         DK2A
NOKEY2:
            MOV         P0,#0FFH
            CLR         P0.6
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY3
            LCALL       DELY10US
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY3
            MOV         A,P0
            ANL         A,#0FH
            CJNE        A,#0EH,NK9
            MOV         KEYBUF,#0bh
            LJMP        DK3
NK9:        CJNE        A,#0DH,NK10
            MOV         KEYBUF,#0ah
            LJMP        DK3
NK10:       CJNE        A,#0BH,NK11
            MOV         KEYBUF,#9
            LJMP        DK3
NK11:       CJNE        A,#07H,NK12
            MOV         KEYBUF,#8
            LJMP        DK3
NK12:       NOP
DK3:
            MOV         A,KEYBUF
            MOV         DPTR,#TAB
            MOVC        A,@A+DPTR
            MOV         KEY,A
            MOV         FLAG0,#1        ;FLAG0=1

DK3A:       MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JNZ         DK3A
NOKEY3:
            MOV         P0,#0FFH
            CLR         P0.7
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY4
            LCALL       DELY10US
            MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JZ          NOKEY4
            MOV         A,P0
            ANL         A,#0FH
            CJNE        A,#0EH,NK13
            MOV         KEYBUF,#0fh
            LJMP        DK4
NK13:       CJNE        A,#0DH,NK14
            MOV         KEYBUF,#0eH
            LJMP        DK4
NK14:       CJNE        A,#0BH,NK15
            MOV         KEYBUF,#0dH
            LJMP        DK4
NK15:       CJNE        A,#07H,NK16
            MOV         KEYBUF,#0ch
            LJMP        DK4
NK16:       NOP
DK4:
            MOV         A,KEYBUF
            MOV         DPTR,#TAB
            MOVC        A,@A+DPTR
            MOV         KEY,A
            MOV         FLAG0,#1        ;FLAG0=1

DK4A:       MOV         A,P0
            ANL         A,#0FH
            XRL         A,#0FH
            JNZ         DK4A
NOKEY4:
            RET
;**********************************************
;填充显示缓冲区
;input:     key,dispbuf
;output:    dispbuf
;use:       A,R0,R1,R2
;**********************************************
SETDISPBUF:
        MOV     R0,#DISPBUF
        MOV     A,#0H     ;小数点位/不显示
        MOV     @R0,A
        MOV     A,#8
        ADD     A,R0
        MOV     R0,A      ;R0=DISPBUF+8指向蜂鸣器设定位
        MOV     R1,A
        DEC     R1
        DEC     R1
        MOV     A,#0      ;蜂鸣器不鸣叫
        MOV     @R0,A
        dec     r0
        mov     a,#01H	  ;识别码=01
        mov     @r0,a
        DEC     R0
;
        MOV     R2,#0
YIWEI:                    ;缓冲区逐次后移一位
        DEC     R0
        MOV     A,@R0
        MOV     @R1,A
        INC     R2
        DEC     R1
        CJNE    R2,#5,YIWEI
        MOV     A,KEY
        MOV     @R0,A     ;设置第一位数码管的值(key)
        RET
;*********************************************************
;//串行发送DTLED-6显示
;//dispbuf0-dispbuf1-dispbuf2-dispbuf3-dispbuf4-dispbuf5-dispbuf6-dispbuf7-dispbuf8
;// 小数点 - 数码管1- 数码管2- 数码管3- 数码管4- 数码管5- 数码管6-ID识别码-BZ识别码
;//00000xxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx
;//小数点=1~6,其它为不显示
;//数码管1-6=0~15,
;//ID识别码=0~15(本开发板ID=01)
;//BZ识别码=BZ.3为蜂鸣输出控制位,0=关闭,1=打开
;//     BZ0~2为蜂鸣频率输出设定为,000=不分频,  最高频率输出=4800Hz;
;//	                           001=一次分频,频率输出=4800/ 2 =2400Hz;
;//	   			   010=二次分频,频率输出=4800/ 4 =1200Hz;
;//				   011=三次分频,频率输出=4800/ 8 =600Hz;
;//	   			   100=四次分频,频率输出=4800/ 16=300Hz;
;//	   			   101=五次分频,频率输出=4800/ 32=150Hz;
;//	   			   110=六次分频,频率输出=4800/ 64=75Hz;
;//	   			   111=七次分频,频率输出=4800/128=38Hz;
;//======================================================================
tsled:
	CLR	CLK
	CLR	EN
        NOP
	LCALL	DELY10us
	LCALL	DELY10us
	LCALL	DELY10us
	LCALL	DELY10us
        MOV     A,#0
        MOV     R2,A		;//9个字节
        MOV     R3,A		;一个字节中的4个位
        MOV     R0,#DISPBUF
DISP0:
        MOV     A,@R0
        SWAP	A
DISP2:
        SETB    CLK
        RLC      A
        JNC     ZHI0
        SETB    DOUT
        SJMP    NEI
ZHI0:   CLR     DOUT
NEI:
        NOP
        CLR     CLK
        LCALL	DELY3uS
        LCALL	DELY3uS
        LCALL	DELY3uS
        INC     R3
        CJNE    R3,#4,DISP2
;
        MOV     R3,#0
        INC     R2
        INC     R0
        CJNE    R2,#9,DISP0
        SETB    EN
        RET
;/*********************************************************************/

DELY10US:
            MOV       R6,#10
            DJNZ      R6,$
            RET
DELY3US:
            MOV       R6,#3
            DJNZ      R6,$
            RET
;**********************************************************
TAB:    DB	01H,02H,03H,0aH	;/*键盘码00,01,02,03,*/
        DB	04H,05H,06H,0bH	;/*键盘码04,05,06,07,*/
        DB	07H,08H,09H,0cH	;/*键盘码08,09,0a,0b,*/
        DB	0eH,00H,0fH,0dH	;/*键盘码0c,0d,0e,0f*/
       
;/*********************************************************************/
  END

⌨️ 快捷键说明

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