📄 origin.asm
字号:
ORG 0000H
LJMP 0100H ;开机或者复位后,跳转到INIT初始化程序
ORG 0100H
INIT: MOV A,#0
MOV DPTR,#0FD00H ;初始化行复位端口,置全零
MOVX @DPTR,A
MOV DPTR,#0FE00H ;初始化行置位端口,置全零
MOVX @DPTR,A
MOV A,#0FFH
MOV DPTR,#0FB00H
MOVX @DPTR,A ;初始化列选择1端口,送无效字
MOV DPTR,#0F700H
MOVX @DPTR,A ;初始化列选择2端口,送无效字
MOV DPTR,#0EF00H
MOVX @DPTR,A ;初始化列选择3端口,送无效字
LOGO: MOV R0,#40H ;R0 IS DISPLAY BUFFER POINTER
MOV R1,#0 ;R1 IS DATA POINTER
MOV R2,#60 ;THERE ARE 40 Bytes Logo Buffer
LOG1: MOV A,R1 ;MOVE DATA POINER TO "A"
MOV DPTR,#300H ;LOAD LOGO ADDRESS
MOVC A,@A+DPTR ;MOVE DISPLAY DATA TO "A"
MOV @R0,A ;MOVE "A" TO BUFFER
INC R0 ;INCREASE BUFFER POINTER
INC R1 ;INCREASE DATA POINTER
DJNZ R2,LOG1 ;IF !(R2=0) THEN GOTO LOG1
MOV R0,#40H ;LOAD DISPLAY BUFFER ADDRESS TO R0
LCALL FIRST ;GOTO DISPLAY SUBPROGRAM
TEST: MOV DPTR,#0BF00H ;加载DATA标志端口地址
TES1: MOVX A,@DPTR ;读入DATA标志
ANL A,#01H ;屏蔽高7位
JZ TES1 ;为低,则继续查询DATA标志
MOV A,#0FFH
MOV P1,A ;要从P1口读入,先置全“1”
MOV A,P1 ;读入P1口数据
CJNE A,#0F0H,TES1 ;若不为F0H则继续查询
MOV DPTR,#07F00H ;加载ACK端口地址
MOV A,#01H ;屏蔽高7位
MOVX @DPTR,A ;ACK置高
CALL DELAY1S ;延时1S
MOV A,#0
MOVX @DPTR,A ;ACK置低
MAIN: MOV R0,#30H ;加载接收数据缓冲区起始地址指针
MAI1: MOV DPTR,#0BF00H ;加载DATA标志端口地址
MAI2: MOVX A,@DPTR ;读入主控制器数据标志
ANL A,#01H ;屏蔽A高7位
JZ MAI2 ;查询DATA信号是否为高
MOV A,#0FFH
MOV P1,A ;P1口要读入数据,先置全"1"
MOV A,P1 ;读入P1口的数据
PUSH A ;压入最新接收的数据
MOV @R0,A ;将接收数据写入接收数据缓冲区
INC R0 ;指向下一个缓冲存储单元
MOV A,#01H
MOV DPTR,#07F00H ;加载ACK端口地址
MOVX @DPTR,A ;ACK端口置高
MOV DPTR,#0BF00H ;加载DATA标志端口地址
MAI3: MOVX A,@DPTR
ANL A,#01H ;屏蔽高7位数据
JNZ MAI3 ;若DATA未变低,等待
MOV A,#0
MOV DPTR,#07F00H ;加载ACK端口地址
MOVX @DPTR,A ;ACK端口置低
POP A ;弹出读入的数据
CJNE A,#0FFH,MAI1 ;若不是0FFH结束符,读下一数据
DECODE: MOV DPTR,#0400H ;加载显示字库地址指针
MOV R0,#30H ;加载接收缓存地址指针
MOV R1,#40H ;加载显示缓存地址指针
DECO1: INC R0 ;接收缓存指针加1
MOV A,@R0 ;取一个接收缓存中的数据
CJNE A,#0FFH,DECO2 ;不是FFH结束符,则继续译码
LJMP DRIVE ;若为FFH结束符,转驱动显示
DECO2: MOV R2,#4 ;一个字符字库占用5字节
CAL: ADD A,@R0
DJNZ R2,CAL ;计算字库存储区偏移量
MOV R2,#5 ;一个字符字库占用5字节
GET: PUSH A ;保护偏移量
MOVC A,@A+DPTR ;取ROM字库中点阵显示数据
MOV @R1,A ;保存点阵显示数据至显示缓冲区
POP A ;恢复偏移量
INC A ;取下一字节字库数据
INC R1 ;显示缓存指针加1
DJNZ R2,GET ;不到5字节,继续取字库数据
LJMP DECO1 ;开始下一字符译码
DRIVE: MOV R0,#40H ;加载显示缓存起始地址
MOV R1,#30H ;判断显示模式
MOV A,@R1
CJNE A,#0F1H,NEXT1
LJMP MODE1 ;F1H表示显示模式一
NEXT1: CJNE A,#0F2H,NEXT2 ;F2H表示显示模式二
LJMP MODE2
NEXT2: CJNE A,#0F3H,NEXT3 ;F3H表示显示模式三
LJMP MODE3
NEXT3: LJMP MODE4 ;F4H表示显示MODE4
MODE1: lCALL FIRST ;刷新第一块显示板
LJMP MAIN ;返回主程序
MODE2: LCALL FIRST ;刷新第1块显示板
LCALL SECOND ;刷新第2块显示板
LJMP MAIN ;返回主程序
MODE3: LCALL FIRST ;刷新第1块显示板
LCALL SECOND ;刷新第2块显示板
LCALL THIRD ;刷新第3块显示板
LJMP MAIN ;返回主程序
MODE4: LCALL THIRD ;单独刷新第3块显示板
LJMP MAIN ;返回主程序
FIRST: MOV R1,#0 ;列选择线指针置零,从第0列开始刷新
FIR1: MOV A,@R0 ;取一列的行点阵显示数据
PUSH A ;保护行置位数据
CPL A ;对A取反,得到行复位数据
MOV DPTR,#0FD00H ;加载行复位端口地址
MOVX @DPTR,A ;行置位数据送行置位口
MOV DPTR,#0FB00H ;加载第1块列驱动板地址
MOV A,R1 ;列指针内容送A
MOVX @DPTR,A ;选中相应的列选择线
LCALL DELAY ;延时5ms
MOV A,#0FFH ;送无效字
MOVX @DPTR,A ;以关闭列译码器
MOV A,#0
MOV DPTR,#0FD00H ;加载行复位端口地址
MOVX @DPTR,A ;行复位口清零
INC R1 ;列选择数据加1
POP A ;恢复行置位数据
MOV DPTR,#0FE00H ;加载行置位端口地址
MOVX @DPTR,A ;送行复位数据
MOV DPTR,#0FB00H ;加载第1块列驱动板地址
MOV A,R1
MOVX @DPTR,A ;选中列置位驱动线
LCALL DELAY ;延时5ms
MOV A,#0FFH ;送无效字
MOVX @DPTR,A ;关闭列译码器
MOV A,#0
MOV DPTR,#0FE00H ;加载行置位端口地址
MOVX @DPTR,A ;行置位口清零
INC R1 ;修改列驱动选择指针
INC R0 ;修改显示缓存指针
CJNE R1,#40,FIR1 ;不满二十列则继续刷新
RET ;返回主程序
SECOND: MOV R1,#0 ;列选择线指针置零,从第0列开始刷新
SEC1: MOV A,@R0 ;取行点阵显示数据
PUSH A ;保护数据
CPL A ;对A取反,得到行复位数据
MOV DPTR,#0FD00H ;加载行复位端口地址
MOVX @DPTR,A ;行复位数据送行复位口
MOV DPTR,#0F700H ;加载列驱动板2地址
MOV A,R1
MOVX @DPTR,A ;选中列复位选择线
LCALL DELAY ;延时5ms
MOV A,#0FFH ;送无效字
MOVX @DPTR,A ;以关闭列译码器
MOV A,#0 ;
MOV DPTR,#0FD00H ;加载行复位端口地址
MOVX @DPTR,A ;行复位口清零
POP A ;弹出行置位数据
MOV DPTR,#0FE00H ;加载行置位端口地址
MOVX @DPTR,A ;送行置位数据
INC R1 ;列选择数据指针加1
MOV DPTR,#0F700H ;加载列驱动板2地址
MOV A,R1
MOVX @DPTR,A ;选中列置位驱动线
LCALL DELAY ;延时5ms
MOV A,#0FFH ;送无效字
MOVX @DPTR,A ;关闭列译码器
MOV A,#0
MOV DPTR,#0FE00H ;加载行置位端口地址
MOVX @DPTR,A ;行置位口清零
INC R1 ;修改列驱动选择指针
INC R0 ;修改显示缓存指针
CJNE R1,#40,SEC1 ;不满二十列则继续刷新
RET ;返回主程序
THIRD: MOV R1,#0 ;列选择线指针置零,从第0列开始刷新
THI1: MOV A,@R0 ;取行点阵显示数据
PUSH A ;保护数据
CPL A ;对A取反,得到行复位数据
MOV DPTR,#0FD00H ;加载行复位端口地址
MOVX @DPTR,A ;行复位数据送行复位口
MOV DPTR,#0EF00H ;加载列驱动板3地址
MOV A,R1
MOVX @DPTR,A ;选中列复位选择线
LCALL DELAY ;延时5ms
MOV A,#0FFH ;送无效字
MOVX @DPTR,A ;以关闭列译码器
MOV A,#0 ;
MOV DPTR,#0FD00H ;加载行复位端口地址
MOVX @DPTR,A ;行复位口清零
POP A ;弹出行置位数据
MOV DPTR,#0FE00H ;加载行置位端口地址
MOVX @DPTR,A ;送行置位数据
INC R1 ;列选择数据指针加1
MOV DPTR,#0EF00H ;加载列驱动板3地址
MOV A,R1
MOVX @DPTR,A ;选中列置位驱动线
LCALL DELAY ;延时5ms
MOV A,#0FFH ;送无效字
MOVX @DPTR,A ;关闭列译码器
MOV A,#0
MOV DPTR,#0FE00H ;加载行置位端口地址
MOVX @DPTR,A ;行置位口清零
INC R1 ;修改列驱动选择指针
INC R0 ;修改显示缓存指针
CJNE R1,#40,THI1 ;不满二十列则继续刷新
RET ;返回主程序
DELAY: MOV R7,#20 ;5ms延时子程序(12MHz)
DEL1: MOV R6,#125
DEL2: DJNZ R6,DEL2
DJNZ R7,DEL1
RET
DELAY1s:MOV R7,#10 ;延时1S的子程序
DEL1S1: MOV R6,#200
DEL1S2: MOV R5,#125
DEL1S3: DJNZ R5,DEL1S3
DJNZ R6,DEL1S2
DJNZ R7,DEL1S1
RET
ORG 0300H
DB 7FH,04H,08H,10H,7FH
DB 3FH,40H,40H,40H,3FH
DB 7CH,12H,11H,12H,7CH
DB 7CH,12H,11H,12H,7CH
DB 0,0,0,0,0
DB 0,0,0,0,0
DB 0,0,0,0,0
DB 0,0,0,0,0
ORG 0400H
DB 3EH,51H,49H,45H,3EH ;数字“0”的字库编码
DB 00H,42H,7FH,40H,00H ;数字“1”的字库编码
DB 42H,61H,51H,49H,46H ;数字“2”的字库编码
DB 22H,49H,49H,49H,36H ;数字“3”的字库编码
DB 18H,14H,12H,7FH,10H ;数字“4”的字库编码
DB 2FH,49H,49H,49H,31H ;数字“5”的字库编码
DB 3EH,49H,49H,49H,32H ;数字“6”的字库编码
DB 01H,01H,79H,05H,03H ;数字“7”的字库编码
DB 36H,49H,49H,49H,36H ;数字“8”的字库编码
DB 26H,49H,49H,49H,36H ;数字“9”的字库编码
DB 7CH,12H,11H,12H,7CH ;英文“A”的字库编码
DB 7FH,49H,49H,49H,36H ;英文“B”的字库编码
DB 3EH,41H,41H,41H,22H ;英文“C”的字库编码
DB 41H,7FH,41H,41H,3EH ;英文“D”的字库编码
DB 7FH,49H,49H,49H,41H ;英文“E”的字库编码
DB 7FH,09H,09H,09H,01H ;英文“F”的字库编码
DB 3EH,41H,41H,51H,32H ;英文“G”的字库编码
DB 7FH,08H,08H,08H,7FH ;英文“H”的字库编码
DB 00H,41H,7FH,41H,00H ;英文“I”的字库编码
DB 20H,40H,40H,40H,3FH ;英文“J”的字库编码
DB 7FH,04H,14H,22H,41H ;英文“K”的字库编码
DB 7FH,40H,40H,40H,40H ;英文“L”的字库编码
DB 7FH,02H,04H,02H,7FH ;英文“M”的字库编码
DB 7FH,04H,08H,10H,7FH ;英文“N”的字库编码
DB 3EH,41H,41H,41H,3EH ;英文“O”的字库编码
DB 7FH,09H,09H,09H,06H ;英文“P”的字库编码
DB 3EH,41H,51H,61H,3EH ;英文“Q”的字库编码
DB 7FH,09H,19H,29H,46H ;英文“R”的字库编码
DB 26H,49H,49H,49H,32H ;英文“S”的字库编码
DB 01H,01H,3FH,01H,01H ;英文“T”的字库编码
DB 3FH,40H,40H,40H,3FH ;英文“U”的字库编码
DB 1FH,20H,40H,20H,1FH ;英文“V”的字库编码
DB 3FH,40H,38H,40H,3FH ;英文“W”的字库编码
DB 63H,14H,08H,14H,63H ;英文“X”的字库编码
DB 03H,04H,78H,04H,03H ;英文“Y”的字库编码
DB 61H,51H,49H,45H,43H ;英文“Z”的字库编码
DB 00H,00H,00H,00H,00H ;渐近条形图亮“0”条
DB 01H,01H,01H,01H,01H ;渐近条形图亮“1”条
DB 03H,03H,03H,03H,03H ;渐近条形图亮“2”条
DB 07H,07H,07H,07H,07H ;渐近条形图亮“3”条
DB 0FH,0FH,0FH,0FH,0FH ;渐近条形图亮“4”条
DB 1FH,1FH,1FH,1FH,1FH ;渐近条形图亮“5”条
DB 3FH,3FH,3FH,3FH,3FH ;渐近条形图亮“6”条
DB 7FH,7FH,7FH,7FH,7FH ;渐近条形图亮“7”条
DB 00H,00H,22H,00H,00H ;冒号“:”字库编码
DB 08H,08H,08H,08H,08H ;短横线“-”字库编码
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -