;在电脑附件里面的超级终端界面上以彩色显示一幅字符画,并且有一个旋转光标动态显示
;注意程序后面的超级终端转义字符的定义说明
;11.0592M晶振,串口比特率57600
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV SP,#40H
MOV TMOD,#20h ;T1为常数自动重装入的8位定时计数器,既波特率发生器,T0为16位的定时计数器
MOV PCON,#80h ;SMOD=1
MOV TH1,#0FFH ;初始化波特率,11.0592下,且SMOD=1加倍情况下,0FFH=57600,0FDH=19200 ,0FAH=9600
MOV SCON,#50h ;Standard UART settings
SETB TR1 ;T1开始工作
SETB EA ;开全部中断
ACALL SEND
LOOP:
ACALL XZGB
SJMP LOOP
XZGB:;旋转光标显示
ACALL TG ;发送退格
MOV A,#5CH ;把"\"送入A
ACALL SENDA ;把A发送出去
ACALL YS ;延时
ACALL TG
MOV A,#7CH ;把"|"送入A
ACALL SENDA
ACALL YS
ACALL TG
MOV A,#2FH ;把"/"送入A
ACALL SENDA
ACALL YS
ACALL TG
MOV A,#2DH ;把"-"送入A
ACALL SENDA
ACALL YS
RET
TG: ;发送退格命令
MOV A,#08H
ACALL SENDA
RET
SENDA: ;把A发送到串口出去
MOV SBUF,A
JNB TI,$
CLR TI
RET
YS: ;通用延时子程序
MOV 02H,#35 ;较合适的旋转速度
YS1: PUSH 02H
YS2: PUSH 02H
YS3: PUSH 02H
DJNZ R2,$
POP 02H
DJNZ R2,YS3
POP 02H
DJNZ R2,YS2
POP 02H
DJNZ R2,YS1
RET
SEND:;发送字符画
MOV A,#0CH ;发送清屏命令
MOV SBUF,A
JNB TI,$
CLR TI
MOV DPTR,#ST2;暂存字符画结束位置
MOV R0,DPL
MOV R1,DPH
MOV DPTR,#ST1;字符画开始位置
SEND1:
CLR A
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC DPL
MOV A,DPL
CJNE A,#00H,SEND2
INC DPH
SEND2:
MOV A,DPH
CJNE A,01H,SEND1 ;判断是否到了字符画末尾了
MOV A,DPL
CJNE A,00H,SEND1
RET
ST1:
DB 1BH,"[1;33;46m" ;这句就是转义字符定义,1BH代表“ESC”转义字符开始,1代表高亮显示,33代表黄色前景,46代表青蓝色背景
; 前景 背景 颜色
; ---------------------------------------
; 30 40 黑色
; 31 41 紅色
; 32 42 綠色
; 33 43 黃色
; 34 44 藍色
; 35 45 紫紅色
; 36 46 青藍色
; 37 47 白色
; 代码 意义
; -------------------------
; 0 终端默认设置(一般的默认为黑底白字)
; 1 高亮显示
; 4 使用下划线
; 5 闪烁
; 7 反白显示
; 8 不可见
;字符画,注意每句末尾要加两个控制字符
DB " *** *** ***** ****** **** ",0AH,0DH
DB " * * * * * * * * * ",0AH,0DH
DB " * * * * * * * * * ",0AH,0DH
DB " * * * * * * * ",0AH,0DH
DB " * * * * * ***** * ",0AH,0DH
DB " *** * * *** * * * ",0AH,0DH
DB " * * * ** *** * * ",0AH,0DH
DB " * * *** * * * * ",0AH,0DH
DB " * * * * * * ",0AH,0DH
DB " * * * * * * * * * ",0AH,0DH
DB " * * * * * * * * * ",0AH,0DH
DB " *** *** ***** *** ******* ",0AH,0DH
ST2:;字符画末尾
END