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

📄 exemple_screen.asm

📁 基于89c51的led屏幕测试程序
💻 ASM
字号:
;    样屏程序
;-----------位变量定义-------
T0_OVER     BIT     00H
KEY_DOWN    BIT     01H
RS_REVFA    BIT     02H
R_KEY       BIT     03H
G_KEY       BIT     04H
B_KEY       BIT     05H
W_KEY       BIT     06H
;           BIT     07H
;---------------------------
R_OE        BIT     P3.2
G_OE        BIT     P3.3
B_OE        BIT     P3.4
SER_CLK     BIT     P3.5
LATCH       BIT     P3.6
;-----------内存变量定义-----
DISPLAY_DAT DATA    28H
DATA_OE     DATA    29H
INPUT_DAT   DATA    2AH
TACOM       DATA    2BH
RS_DATA     DATA    2CH
;----------------------------
RS_BUFFER   DATA    30H
;----------------------------
        ORG     0000H
        LJMP    MAIN
	ORG     000BH
	LJMP    TIME0PR
	ORG     0023H
	LJMP    RS_RECEIVE
	ORG     100H
MAIN:   LCALL   RAM_INT         ;内部存储器初始化
        LCALL   RS_SET          ;RS232接口初始化
	MOV     SP,#40H
;-----------工作主程序----------
BEGIN00:JNB     RS_REVFA,BEGIN01
        LCALL   RS_DATA_PROG
BEGIN01:JB      KEY_DOWN,BEGIN02
        LCALL   DISPLAY_CLR
        LJMP    BEGIN01
BEGIN02:JNB     R_KEY,BEGIN03
        LCALL   DISPLAY_R
BEGIN03:JNB     G_KEY,BEGIN04
        LCALL   DISPLAY_G
BEGIN04:JNB     B_KEY,BEGIN05
        LCALL   DISPLAY_B
BEGIN05:JNB     W_KEY,BEGIN00
        LCALL   DISPLAY_W
        LJMP    BEGIN00
;-------读按键是否按下程序-------
READ_KEY:JB     P1.4,READ_PA
         SETB   KEY_DOWN
         SETB   R_KEY
         CLR    G_KEY
         CLR    B_KEY
         CLR    W_KEY
         RET
READ_PA: JB     P1.5,READ_PC
         SETB   KEY_DOWN
         SETB   G_KEY
         CLR    R_KEY
         CLR    B_KEY
         CLR    W_KEY
         RET
READ_PC: JB     P1.6,READ_PD
         SETB   KEY_DOWN
         SETB   B_KEY
         CLR    R_KEY
         CLR    G_KEY
         CLR    W_KEY
         RET
READ_PD: JB     P1.7,READ_RET
         SETB   KEY_DOWN
         SETB   W_KEY
         CLR    R_KEY
         CLR    G_KEY
         CLR    B_KEY
READ_RET:RET
;-----RS232接收数据处理程序------
RS_DATA_PROG:
         MOV    A,RS_BUFFER+0
         CJNE   A,#55H,DATA_RET
         MOV    A,RS_BUFFER+4
         CJNE   A,#0AAH,DATA_RET
         MOV    A,RS_BUFFER+1
         CJNE   A,INPUT_DAT,DATA_RET
         LCALL  RS_SEND_DATA
         LCALL  SET_INPUT_KEY
         LCALL  SET_OUTPUT_OE
DATA_RET:RET
;--------------------------------
SET_INPUT_KEY:
         MOV    A,RS_BUFFER+2
         CJNE   A,#01H,SET_INA
         SETB   KEY_DOWN
         SETB   R_KEY
         RET
SET_INA: CJNE   A,#02H,SET_INB
         SETB   KEY_DOWN
         SETB   G_KEY
         RET
SET_INB: CJNE   A,#03H,SET_INC
         SETB   KEY_DOWN
         SETB   B_KEY
         RET
SET_INC: CJNE   A,#04H,SET_RET
         SETB   KEY_DOWN
         SETB   W_KEY
SET_RET: RET
;--------------------------------
SET_OUTPUT_OE:
         MOV    A,RS_BUFFER+2
         CJNE   A,#01H,SET_INE
         MOV    A,RS_BUFFER+3
         MOV    P2,A
         CLR    R_OE
         SETB   G_OE
         SETB   B_OE
         RET
SET_INE: CJNE   A,#02H,SET_INF
         MOV    A,RS_BUFFER+3
         MOV    P2,A
         CLR    G_OE
         SETB   R_OE
         SETB   B_OE
         RET
SET_INF: CJNE   A,#03H,SET_ING
         MOV    A,RS_BUFFER+3
         MOV    P2,A
         CLR    B_OE
         SETB   G_OE
         SETB   R_OE
         RET
SET_ING: CJNE   A,#04H,SET_RET
         MOV    A,RS_BUFFER+3
         MOV    P2,A
         CLR    R_OE
         CLR    G_OE
         CLR    B_OE
SRET_SET: RET
;-----------显示红数据-----------
DISPLAY_R:
        MOV     A,#33H
        MOV     R4,#00H
DISP00: MOV     P0,A
        SETB    SER_CLK
        NOP
        CLR     SER_CLK
        INC     R4
        CJNE    R4,#32,DISP00
        SETB    LATCH
        NOP
        CLR     LATCH
        RET
;-----------显示绿数据-----------
DISPLAY_G:
        MOV     A,#44H
        MOV     R4,#00H
DISP01: MOV     P0,A
        SETB    SER_CLK
        NOP
        CLR     SER_CLK
        INC     R4
        CJNE    R4,#32,DISP01
        SETB    LATCH
        NOP
        CLR     LATCH
        RET
;-----------显示兰数据-----------
DISPLAY_B:
        MOV     A,#88H
        MOV     R4,#00H
DISP02: MOV     P0,A
        SETB    SER_CLK
        NOP
        CLR     SER_CLK
        INC     R4
        CJNE    R4,#32,DISP02
        SETB    LATCH
        NOP
        CLR     LATCH
        RET
;-----------显示白数据-----------
DISPLAY_W:
        MOV     A,#0FFH
        MOV     R4,#00H
DISP03: MOV     P0,A
        SETB    SER_CLK
        NOP
        CLR     SER_CLK
        INC     R4
        CJNE    R4,#32,DISP03
        SETB    LATCH
        NOP
        CLR     LATCH
        RET
;-----------清除所有数据-----------
DISPLAY_CLR:
        MOV     A,#00H
        MOV     R4,#00H
DISP04: MOV     P0,A
        SETB    SER_CLK
        NOP
        CLR     SER_CLK
        INC     R4
        CJNE    R4,#32,DISP04
        SETB    LATCH
        NOP
        CLR     LATCH
        RET
;------- 定时器“0”中断 ------
TIME0PR:PUSH    ACC
        PUSH    PSW
	MOV     TH0,#0CH
	MOV     TL0,#58H
	MOV     A,TACOM
	INC     A
	CJNE    A,#04H,TIME0PB
TIME0PA:LCALL   READ_KEY
        MOV     TACOM,#00H
        SETB    T0_OVER
        SETB    TR0
        POP     PSW
        POP     ACC
        RETI
TIME0PB:JNC     TIME0PA
        MOV     TACOM,A
        SETB    TR0
        POP     PSW
	POP     ACC
	RETI
;-----RS232初始化程序--------
RS_SET:	MOV     TMOD,#21H
	MOV     TH1,#0F4H
	MOV     TL1,#0F4H
	MOV     SCON,#01010000B
	MOV     PCON,#80H        ;4800bps
	MOV     TH0,#0CH
	MOV     TL0,#58H
        SETB    ET0             ;允许"T0"中断
 	SETB    TR0             ;启动定时器"0"
	SETB    TR1
	SETB    ES
	SETB    EA
        RET
;--------初始化各参数-----------
RAM_INT:MOV     A,#00H
	MOV     R0,#20H
RAM_INA:MOV     @R0,A
        INC     R0
        CJNE    R0,#60H,RAM_INA
        MOV     A,#0FFH
        MOV     P0,A
        MOV     P1,A
        MOV     P2,A
        MOV     P3,A
        MOV     A,P1
        ANL     A,#0FH
        MOV     INPUT_DAT,A
        RET
;------RS232数据接收程序-----------
RS_RECEIVE:
        PUSH    ACC
        PUSH    PSW
	JNB     TI,RS_RECA
        POP     PSW
	POP     ACC
        RETI
RS_RECA:JNB     RI,RS_RET
        CLR     RI
	MOV     A,SBUF
RS_RECB:MOV     R1,RS_DATA
        MOV     @R1,A
        INC     R1
        MOV     RS_DATA,R1
        CJNE    R1,#05H,RS_RET
        SETB    RS_REVFA
RS_RET: POP     PSW
        POP     ACC
       	RETI
;-------RS232数据发送程序-----------
RS_SEND_DATA:
        CLR     ES
        MOV     A,#01H
        MOV     SBUF,A
        JNB     TI,$
	CLR     TI
        LCALL   DTIME
        SETB    ES
        RET
;-------------------------
DTIME:  MOV	R3,#080H
	DJNZ	R3,$
 	RET
;--------------------------
DELAY_TIME:
        MOV     R2,#05H
DELAY_A:MOV     R3,#010H
DELAY_B:MOV     R4,#0FFH
        DJNZ    R4,$
        DJNZ    R3,DELAY_B
        DJNZ    R2,DELAY_A
        RET



⌨️ 快捷键说明

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