📄 exemple_screen.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 + -