📄 waixian.asm
字号:
;费额显示屏程序
L_CLK1 BIT P3.2 ;金额个位
L_CLK2 BIT P3.3 ;金额十位
L_CLK3 BIT P3.4 ;金额百位
L_CLK4 BIT P3.5 ;车型
L_CLR BIT P3.7
C_SHOW EQU 4FH ;定显标志
C_FLASH EQU 4EH ;闪烁标志
C_FLA1 EQU 4DH ;闪烁标志1
C_FLA2 EQU 4CH ;闪烁标志2
ORG 0000H
LJMP START
ORG 000BH ;定时中断入口
LJMP TISEV
ORG 0023H ;串口通讯中断入口
LJMP TXSEV
ORG 0100H ;主程序
START: NOP
NOP
MOV SP,#50H
LCALL TEST ;调用自检子程序
CLR C_SHOW
CLR C_FLASH
CLR C_FLA1
CLR C_FLA2
MOV TMOD,#01H ;T0工作方式一
MOV TH0,#0D8H ;定时器初值(10MS)
MOV TL0,#0F0H
SETB EA ;CPU开中断
SETB ET0 ;允许T0中断
MOV SCON,#070H ;串口工作方式1
MOV TMOD,#21H ;T1工作方式二
MOV TH1,#0F3H ;波特率2400
MOV TL1,#0F3H
MOV A,PCON
CLR ACC.7
MOV PCON,A
MOV R0,#30H ;接收缓冲区首地址
MOV R7,#00H ;接收字节数
SETB PS ;设置串口中断为高优先级
CLR PT0 ;T0中断为低优先级
SETB TCON.6 ;启动定时器T1
SETB ES ;允许串口中断
SETB TR0
;
MAIN: NOP
AJMP MAIN
;================自检子程序======================
TEST: CLR L_CLR ;
LCALL DL
SETB L_CLR
LCALL BLACK
RET
DL: MOV R6,#05H ;延时子程序
DL1: MOV R5,#0FFH
DL2: MOV R4,#0FFH
DL3: DJNZ R4,DL3
DJNZ R5,DL2
DJNZ R6,DL1
RET
;===============定时中断服务子程序===============
TISEV: PUSH ACC
PUSH DPL
PUSH DPH
PUSH PSW
MOV TH0,#0D8H ;定时器初值(10MS)
MOV TL0,#0F0H
JB C_FLASH,TTF ;是闪烁就跳转
JB C_SHOW,TTS ;是定显就跳转
AJMP TT1
TTS: DJNZ 40H,TT1
MOV 40H,#500
CLR C_SHOW ;清除定显标志
LCALL BLACK ;调用黑屏子程序
AJMP TT1
TTF: DJNZ 41H,TT1
MOV 41H,#100
JB C_FLA1,TTA
JB C_FLA2,TTB
AJMP TT1
TTB: CLR C_FLA2
SETB C_FLA1
LCALL BLACK
AJMP TT1
TTA: CLR C_FLA1
SETB C_FLA2
LCALL SHOW
TT1: POP PSW
POP DPH
POP DPL
POP ACC
RETI
;=================黑屏子程序=====================
BLACK: CLR L_CLK1
CLR L_CLK2
CLR L_CLK3
CLR L_CLK4
MOV A,#0FFH
MOV P1,A
SETB L_CLK1
SETB L_CLK2
SETB L_CLK3
SETB L_CLK4
RET
;=============串口通讯中断服务子程序=============
TXSEV: PUSH ACC
PUSH DPL
PUSH DPH
PUSH PSW
JB SCON.0,JIE ;监测是否接收中断
CLR SCON.1 ;清除发送中断标志
AJMP ENDT ;中断返回
JIE: CLR SCON.0 ;清除接收中断标志
MOV A,SBUF ;接收数据
CJNE A,#0A0H,JIE1 ;不是A0则转JIE1
MOV R0,#30H
AJMP ENDT
JIE1: CJNE A,#0A1H,JIE2 ;不是A1则转JIE2
SETB C_SHOW ;接收确认,定显5S
CLR C_FLASH
CLR C_FLA1
CLR C_FLA2
LCALL SHOW
MOV 40H,#500
AJMP ENDT
JIE2: MOV @R0,A ;接收数据
MOV A,#0A2H
MOV SBUF,A
INC R0
INC R7
CJNE R7,#03H,ENDT
MOV R7,#00H
MOV R0,#30H
SETB C_FLASH ;设置闪烁标志
SETB C_FLA1
CLR C_FLA2
MOV 41H,#100
ENDT: POP PSW
POP DPH
POP DPL
POP ACC
RETI
;=============================================
;将BCD码转换为7段码并放到35-38中
;入口:压缩BCD码在30,31,32中
BCDT: MOV DPTR,#TAB
MOV A,30H ;BCD码转换子程序
ANL A,#0FH
MOVC A,@A+DPTR
MOV 35H,A ;车型LED4
MOV A,31H
ANL A,#0FH
CJNE A,#00H,ANO
MOV 36H,#0FFH
AJMP ANO1
ANO: MOVC A,@A+DPTR
MOV 36H,A ;金额百位LED3
ANO1: MOV A,32H
ANL A,#0FH
MOVC A,@A+DPTR
MOV 38H,A ;金额个位LED1
MOV A,32H
SWAP A
ANL A,#0FH
CJNE A,#00H,ANO2
MOV A,36H
CJNE A,#0FFH,ANO4
MOV 37H,#0FFH
AJMP ANO3
ANO4: MOV 37H,#11H
AJMP ANO3
ANO2: MOVC A,@A+DPTR
MOV 37H,A ;金额十位LED2
ANO3: RET
;七段码表
TAB: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H,00H,00H,00H,00H,00H,00H
;===================显示子程序===================
SHOW: LCALL BCDT
MOV A,35H
CJNE A,#00H,S_1
AJMP S_T
S_1: MOV A,36H
CJNE A,#00H,S_2
AJMP S_T
S_2: MOV A,37H
CJNE A,#00H,S_3
AJMP S_T
S_3: MOV A,38H
CJNE A,#00H,S_4
AJMP S_T
S_4: CLR L_CLK4
CLR L_CLK3
CLR L_CLK2
CLR L_CLK1
MOV A,35H
MOV P1,A
SETB L_CLK4
MOV A,36H
MOV P1,A
SETB L_CLK3
MOV A,37H
MOV P1,A
SETB L_CLK2
MOV A,38H
MOV P1,A
SETB L_CLK1
S_T: RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -