📄 中文显示.asm
字号:
;*******************************************************************
;* 中文显示广告牌程序 *
;* amygse *
;* 2004.6.5 *
;*******************************************************************
;21H~26H--显示内容存储单元
;B -----每次移入内存单元的数据要左移的次数
;27H------寻址偏址
;28H-----每次移入内存单元的数据要左移的次数临时值
;29H-----扫描还剩几行寄存
;2AH-----左移速度
;2CH-----应该选通那一行寄存
;30H,31H-----延时同步修正寄存器
;堆栈入口40H
RXD1 EQU P1.4 ;红色串行内容发送
TXD1 EQU P1.5 ;红色串行CP端
RXD2 EQU P1.6 ;绿色串行内容发送
TXD2 EQU P1.7 ;绿色串行CP端
EN1 EQU P3.7 ;EN1为高电平,关闭显示端口;EN1为低电平时,开放显示端口
;*********中断入口程序****************
ORG 0000H
LJMP MIAN
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
;***************主程序****************
MIAN: MOV 20H,#01H ;设开始为模式1
STRAT: SETB EN1 ;关显示端口
MOV SP,#40H ;堆栈首址
MOV R0,#21H ;初使化寄存显示单元
MOV R1,#12H ;21H~2DH单元清零
MOV A,#00H
ST: MOV @R0,A
INC R0
DJNZ R1,ST
LCALL STR
MOV A,20H
RL A
MOV 20H,A
JB ACC.3, MIAN ;模式的选择,有5种,红,绿,橙,绿+红,红+绿,现选前4种。
LJMP STRAT ;循环显示内容
;*****左移显示汉字程序************
STR: MOV DPTR,#TAB ;赋查表初址
MOV 2DH,#2
HH: MOV 2EH,#32;共有多少个半角字符,一个汉字等于两个字符,个数值为实际字符个数减5
HHH: LCALL PLAY ;运行PLAY一次后,内容左移显示八次,寻址偏址不变.
CLR C
MOV A,DPL
ADD A,#10H
MOV DPL,A
MOV A,DPH
ADDC A,#00H
MOV DPH,A
DJNZ 2EH,HHH
DJNZ 2DH,HH
RET
;*********左移一个字符程序**************
PLAY: MOV B, #01H ;每次移入内存单元的数据要左移次数次值
NLINE: MOV 2AH,#02h ;左移速度
GG: LCALL LINE16 ;扫描显示1帧
DJNZ 2AH,GG
INC B
MOV A,#09H
CJNE A,B,NLINE ;如果B中的数超过8就完成1个字符的显示,否则继续循环.
RET
;*********扫描显示1帧行子程序******************
LINE16: MOV 29H,#10H ;扫描的行数
FF: LCALL LINE1 ;扫描显示1行子程序
DJNZ 29H,FF
MOV A,27H
SUBB A,#10H
MOV 27H,A
RET
;*********扫描显示一行子程序******************
LINE1: MOV 28H,B ;显示内容要左移几次数再显示的赋值给28H单元
LCALL SEND ;发送串行口子程序
LCALL XH ;选通行子程序
CLR EN1 ;开显示端口,显示延时开始
LCALL DL800US ;延时显示1ms
LCALL MSTR ;将显示内容移入内存单元21H~26H ,跳出后27H加1
EE: LCALL ZY
DJNZ 28H,EE
LCALL ZYXZ ;左移速度同步修正
SETB EN1 ;关显示端口,显示延时结束
RET
;***********左移速度同步修正子程序********--
ZYXZ: MOV 30H,B
MOV A,#09H
SUBB A,30H
MOV 31H,A
AA: LCALL DL22US
DJNZ 31H ,AA
RET
;*******显示内容移入内存单元子程序*********
MSTR: MOV R0,#21H
MOV R4,#06H
MOV A, 27H
BB: MOVC A, @A+DPTR
MOV @R0,A
MOV A,27H
ADD A,#10H
MOV 27H,A
INC R0
DJNZ R4,BB
MOV A,27H
SUBB A,#5FH
MOV 27H,A
RET
;**********左移一位子程序**************
;21H~26H存入显示内容,
;R0为显示未址,R2为移出高位个数
ZY: MOV R0, #26H ;显示单元未址
MOV R2, #6H ;移出高位个数
CLR C
CC: MOV A, @R0
RLC A ;将后一字节的最高位移到C里,再移到前一字节的最低位
MOV @R0, A
DEC R0
DJNZ R2, CC
CLR C
RET
;**********发送数据到串口子程序***************
SEND: MOV R0,#25H
MOV R5,#5H
LOOP: MOV R2,#08H
MOV A,@R0
LCALL DD
DEC R0
DJNZ R5,LOOP
CLR C
RET
DD: JB 00H,DD1
JB 01H,DD2
JB 02H,DD3
JB 03H,DD4
JB 04H,DD5
RET
DD1: CLR TXD1
SETB TXD2
RRC A
MOV RXD1,C
SETB TXD1
SETB TXD2
DJNZ R2,DD1
RET
DD2: CLR TXD2
SETB TXD1
RRC A
MOV RXD2,C
SETB TXD2
SETB TXD1
DJNZ R2,DD2
RET
DD3: CLR TXD1
CLR TXD2
RRC A
MOV RXD1,C
MOV RXD2,C
SETB TXD1
SETB TXD2
DJNZ R2,DD3
RET
DD4: CLR TXD1
CLR TXD2
RRC A
MOV RXD1,C
CPL C
MOV RXD2,C
SETB TXD1
SETB TXD2
DJNZ R2,DD4
RET
DD5: CLR TXD1
CLR TXD2
RRC A
MOV RXD2,C
CPL C
MOV RXD1,C
SETB TXD1
SETB TXD2
DJNZ R2,DD5
RET
;*******选通行子程序*****************
XH: MOV 2CH,29H ;29H存运行剩几行数值
MOV A,#0fH
SUBB A,2CH ;16列减剩余行数得现在应该扫描行
MOV P1,A ;送P1口
RET
;******800US延时子程序*****************
DL800US: MOV R6,#1dH
DL1: MOV R5,#18H
DL2: DJNZ R5,DL2
DJNZ R6,DL1
RET
;******22US延时子程序*****************
DL22US: MOV R6,#19
DL3: DJNZ R6,DL3
NOP
RET
tab:
DB 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H,00H,01H,01H,03H,0FH,30H,60H,0F3H,0EFH,0F8H,73H,04H,05H,04H,03H ;“车”图形
DB 3FH,0CBH,80H,18H,18H,0FFH,00H,00H,0FEH,0FFH,3FH,9FH,4FH,40H,40H,80H
DB 0FFH,0E7H,00H,80H,40H,0F8H,0C0H,0C3H,0C0H,0FFH,0E0H,0CEH,91H,15H,11H,0EH
DB 0C0H,0E0H,30H,10H,18H,04H,26H,0E6H,86H,0EEH,0E6H,64H,38H,00H,00H,00H
;-- 文字: 欢 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,000H,0FCH,005H,085H,04AH,028H,010H,018H,018H,024H,024H,041H,086H,038H,000H,
DB 080H,080H,080H,0FEH,004H,048H,040H,040H,040H,060H,0A0H,090H,018H,00EH,004H,000H,
;-- 文字: 迎 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 040H,021H,036H,024H,004H,004H,0E4H,024H,025H,026H,024H,020H,020H,050H,08FH,000H,
DB 000H,080H,07CH,044H,044H,044H,044H,044H,044H,054H,048H,040H,040H,000H,0FEH,000H,
;-- 文字: 光 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 001H,021H,019H,00DH,009H,001H,07FH,004H,004H,004H,004H,008H,008H,010H,020H,040H,
DB 000H,010H,018H,010H,020H,004H,0FEH,040H,040H,040H,040H,042H,042H,042H,03EH,000H,
;-- 文字: 临 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 001H,009H,009H,049H,04AH,04AH,04CH,049H,049H,049H,049H,049H,049H,009H,009H,000H,
DB 000H,080H,000H,0FEH,020H,010H,010H,004H,0FEH,024H,024H,024H,024H,0FCH,004H,000H,
;-- 文字: [ --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,01EH,010H,010H,010H,010H,010H,010H,010H,010H,010H,010H,010H,010H,01EH,000H,
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,
;-- 文字: 信 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 008H,00CH,018H,017H,030H,033H,050H,093H,010H,013H,012H,012H,012H,013H,012H,000H,
DB 080H,060H,040H,0FEH,000H,0F8H,000H,0F8H,000H,0F8H,008H,008H,008H,0F8H,008H,000H,
;-- 文字: 息 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 001H,002H,01FH,010H,01FH,010H,01FH,010H,01FH,000H,009H,028H,028H,068H,007H,000H,
DB 000H,000H,0F0H,010H,0F0H,010H,0F0H,010H,0F0H,000H,000H,084H,092H,012H,0F0H,000H,
;-- 文字: 工 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,03FH,001H,001H,001H,001H,001H,001H,001H,001H,001H,001H,001H,0FFH,000H,000H,
DB 000H,0FCH,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,0FEH,000H,000H,
;-- 文字: 程 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 00DH,071H,011H,011H,0FDH,011H,030H,03BH,054H,050H,093H,010H,010H,010H,017H,010H,
DB 0F8H,008H,008H,008H,008H,0F8H,000H,0FCH,040H,040H,0FCH,040H,040H,040H,0FEH,000H,
;-- 文字: 学 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 001H,010H,00CH,008H,07FH,040H,08FH,000H,000H,07FH,000H,000H,000H,000H,002H,001H,
DB 008H,08CH,0C8H,090H,0FEH,004H,0E8H,040H,080H,0FEH,080H,080H,080H,080H,080H,000H,
;-- 文字: 院 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,0F8H,08FH,094H,0A0H,0A3H,090H,088H,08FH,0A9H,091H,081H,082H,082H,084H,088H,
DB 080H,040H,0FEH,004H,000H,0F8H,000H,000H,0FEH,020H,020H,020H,022H,022H,022H,01EH,
;-- 文字: ] --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,078H,008H,008H,008H,008H,008H,008H,008H,008H,008H,008H,008H,008H,078H,000H,
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,
;-- 文字: 第 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 010H,01FH,028H,045H,09FH,000H,01FH,010H,010H,01FH,001H,002H,00CH,070H,000H,000H,
DB 040H,07EH,0A0H,010H,0F8H,088H,0F8H,080H,080H,0FCH,084H,084H,094H,088H,080H,080H,
;-- 文字: 三 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,000H,07FH,000H,000H,000H,000H,03FH,000H,000H,000H,000H,000H,07FH,000H,000H,
DB 000H,000H,0FCH,000H,000H,000H,000H,0F8H,000H,000H,000H,000H,000H,0FEH,000H,000H,
;-- 文字: 届 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,03FH,020H,020H,03FH,020H,020H,02FH,028H,028H,02FH,028H,048H,04FH,088H,000H,
DB 000H,0FCH,004H,004H,0FCH,080H,080H,0F8H,088H,088H,0F8H,088H,088H,0F8H,008H,000H,
;-- 文字: 电 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 001H,001H,001H,03FH,021H,021H,03FH,021H,021H,021H,03FH,021H,001H,001H,000H,000H,
DB 000H,000H,000H,0F8H,008H,008H,0F8H,008H,008H,008H,0F8H,008H,002H,002H,0FEH,000H,
;-- 文字: 子 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,03FH,000H,000H,000H,001H,001H,001H,0FFH,001H,001H,001H,001H,001H,005H,002H,
DB 000H,0F0H,020H,040H,080H,000H,000H,004H,0FEH,000H,000H,000H,000H,000H,000H,000H,
;-- 文字: 设 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 040H,021H,031H,021H,001H,001H,0E2H,025H,021H,021H,020H,020H,028H,030H,023H,00CH,
DB 000H,0F0H,010H,010H,010H,010H,00EH,0F8H,008H,008H,090H,090H,060H,090H,00EH,004H,
;-- 文字: 计 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 040H,020H,030H,020H,000H,0F3H,010H,010H,010H,010H,010H,012H,014H,018H,010H,000H,
DB 020H,020H,020H,020H,020H,0FEH,020H,020H,020H,020H,020H,020H,020H,020H,020H,020H,
;-- 文字: 制 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 024H,034H,024H,03FH,044H,004H,07FH,004H,03FH,024H,024H,024H,024H,027H,005H,004H,
DB 004H,004H,024H,0A4H,024H,024H,0A4H,024H,0A4H,0A4H,0A4H,0A4H,084H,084H,014H,008H,
;-- 文字: 作 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 008H,00CH,009H,013H,012H,034H,050H,090H,010H,010H,010H,010H,010H,010H,010H,010H,
DB 080H,080H,000H,0FEH,080H,088H,0FCH,080H,080H,084H,0FEH,080H,080H,080H,080H,080H,
;-- 文字: 大 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 001H,001H,001H,001H,001H,0FFH,001H,002H,002H,002H,004H,004H,008H,010H,020H,040H,
DB 000H,000H,000H,000H,000H,0FEH,000H,080H,080H,040H,040H,020H,010H,018H,00EH,004H,
;-- 文字: 赛 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 001H,07FH,044H,0BFH,004H,03FH,004H,07FH,008H,03FH,0C9H,009H,009H,002H,00CH,030H,
DB 000H,0FEH,044H,0F0H,040H,0F8H,040H,0FCH,030H,0EEH,024H,020H,020H,0C0H,038H,010H,
;-- 文字: 颁 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 010H,029H,024H,024H,042H,042H,0BCH,014H,014H,014H,024H,024H,024H,054H,08BH,000H,
DB 000H,0FEH,020H,040H,0FCH,084H,0A4H,0A4H,0A4H,0A4H,0A4H,0A4H,050H,08CH,004H,000H,
;-- 文字: 奖 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 004H,044H,024H,014H,005H,016H,024H,044H,005H,0FFH,001H,002H,004H,008H,030H,0C0H,
DB 040H,07EH,084H,084H,068H,050H,020H,040H,000H,0FEH,000H,080H,040H,030H,00EH,004H,
;-- 文字: 晚 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,000H,079H,04AH,04CH,04BH,07AH,04AH,04BH,04AH,048H,078H,001H,006H,038H,000H,
DB 080H,080H,0F8H,010H,020H,0FCH,044H,044H,0FCH,040H,0A0H,0A0H,022H,022H,01EH,000H,
;-- 文字: 会 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 001H,001H,002H,004H,008H,010H,06FH,080H,000H,03FH,002H,004H,008H,011H,03FH,010H,
DB 000H,000H,080H,040H,020H,018H,0EEH,004H,000H,0F8H,000H,020H,010H,0F8H,018H,010H,
;-- 文字: ! --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 000H,000H,000H,000H,010H,010H,010H,010H,010H,010H,010H,010H,010H,000H,010H,000H,
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,
DB 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
DB 00H, 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -