📄 yibupstc9.asm
字号:
;*************************************
;*********异步屏控制卡驱动程序V1.0****
;********* 南京东大智能 ****
;*************************************
;调试过程:1、能显示固定汉字及图片。
; 2、设置任意内码,调用字库显示汉字
; 3、加入通信程序,显示汉字
; 4、测试调整
; 修改了接受数据是控制数据长度070111
clk equ p1.0
stb equ p1.1
datr1 equ p1.2
datr2 equ p1.3
l0 equ p1.4
l1 equ p1.5
l2 equ p1.6
;noe equ p1.3
;hoe equ p0.0
;noe2 equ p0.1
;hoe2 equ p0.2
oe1 equ p1.7
oe2 equ p3.2
;*************************************
p4 equ 0e8h
led1 equ p4.0
led2 equ p4.1
led3 equ p4.2
led4 equ p4.3
;*************************************
dat2 equ p3.3
clk2 equ p3.4
set2 equ p3.5
;*************************************
org 0000h
ljmp main
org 23h ;串行中断入口地址
jmp com_int ;串行中断服务程序
main: nop
nop
cpl led2 ;喂狗
;mov p1, #00h
mov 20h, #00h ;标志积存器
;//00h:串口接收到数据包标志,通知主程序处理数据
;//01h:清屏标志
mov 21h, #00h ;从字库来的数据进行反转用积存器
mov 28h, #00h ;合并aciic暂存
mov 29h, #00h ;合并aciic暂存
mov 2ah, #0cdh ;串口数据接收指针
mov 2bh, #00h ;串口数据接收缓冲
mov 2ch, #00h
mov 2fh, #0fh ;595控制线输出。
;*****************
mov 30h, #00h
mov 31h, #01h
mov 32h, #02h
mov 33h, #03h
mov 34h, #04h
mov 35h, #05h
mov 36h, #06h
mov 37h, #07h
mov 38h, #08h
mov 39h, #09h
mov 3ah, #0ah
mov 3bh, #0bh
mov 3ch, #0ch
mov 3dh, #0dh
mov 3eh, #0eh
mov 3fh, #0fh
;40h---5bh :接收数据缓冲扩大改为0cdh--0f2h
mov 40h, #00h ;空闲计数低位
mov 41h, #00h ;空闲计数高位
;5ch: 暂存1
;5dh: 暂存2
;5eh:接收校验和
;5fh:发送校验和
mov sp, #60h
lcall comm ;初始化串口
lcall intdata ;初始化接收数据缓冲
;**************************************************
cpl led2
lcall zhuanyi ;根据串口读到的内码,从汉字库中读出字模数据,
;并依次存储在ram中 .
lcall nbsjcl ;上屏内部数据处理,把字库转换成直接显示的数据,
;加快扫描的速度。
cpl led2
lcall nbsjclx ;下屏内部数据处理,把字库转换成直接显示的数据,
;加快扫描的速度。
lcall com_send ;串口发送数据
;************************************
main1: nop
cpl led1
cpl led2
;lcall zhuanyi ;根据串口读到的内码,从汉字库中读出字模数据,
;并依次存储在ram中 .
;lcall nbsjcl ;上屏内部数据处理,把字库转换成直接显示的数据,
;加快扫描的速度。
;lcall nbsjclx ;下屏内部数据处理,把字库转换成直接显示的数据,
;加快扫描的速度。
;lcall dqzimo ;读取字模程序
lcall com_cl ;串口数据处理
;串口数据处理数据包合法后要存储,否则不存储。
;lcall jsdizhi ;计算字摸地址(16)
lcall kongxian ;计数程序,在串口中断时清零,计数到一定值后
;清串口数据处理标志和指针(070111)
jb 01h, qingp ;若清屏标志有效则不执行显示程序
lcall xianshis ;调用显示上排
lcall xianshix ;调用显示下排
qingp: nop
ljmp main1
;**************************************************
kongxian: nop
inc 40h
mov a, 40h
cjne a, #1fh, exitkx
mov 40h, #00h
clr 00h ;串口接收到数据包标志,通知主程序处理数据
mov 2ah, #0cdh ;串口数据接收指针
inc 41h
mov a, 41h
cjne a, #0f0h, exitkx
mov 41h, #00h
nop
setb 01h ;设置清屏标志
exitkx: nop
ret
;**************************************************
;初始化接收缓冲区
intdata: nop
mov r0, #0cdh
mov @r0, #0cch ;启示字
inc r0
mov @r0, #26h ;除头尾外字节数
inc r0
mov @r0, #01h ;显示屏地址
inc r0
;C4 CF BE A9 B6 AB B4 F3 D6 C7 C4 DC
;D6 C7 C4 DC BB AF CD A3 B3 B5 B3 A1 CF B5 CD B3
mov @r0, #0d6h ;汉字1
inc r0
mov @r0, #0c7h ;汉字1
inc r0
mov @r0, #0c4h ;汉字2
inc r0
mov @r0, #0dch ;汉字2
inc r0
mov @r0, #0bbh ;汉字3
inc r0
mov @r0, #0afh ;汉字3
inc r0
mov @r0, #0cdh ;汉字4
inc r0
mov @r0, #0a3h ;汉字4
inc r0
mov @r0, #0b3h ;汉字5
inc r0
mov @r0, #0b5h ;汉字5
inc r0
mov @r0, #0b3h ;汉字6
inc r0
mov @r0, #0a1h ;汉字6
inc r0
mov @r0, #0cfh ;汉字7
inc r0
mov @r0, #0b5h ;汉字7
inc r0
mov @r0, #0cdh ;汉字8
inc r0
mov @r0, #0b3h ;汉字8
inc r0
;D6 C7 C4 DC BB AF CD A3 B3 B5 B3 A1 CF B5 CD B3
;BF D5 32 33 CE BB A4 A2 A4 A1 BF D5 32 36 CE BB
;00 00 C4 CF BE A9 B6 AB B4 F3 D6 C7 C4 DC 00 00
mov @r0, #00h ;汉字9
inc r0
mov @r0, #00h ;汉字9
inc r0
mov @r0, #0c4h ;汉字10
inc r0
mov @r0, #0cfh ;汉字10
inc r0
mov @r0, #0beh ;汉字11
inc r0
mov @r0, #0a9h ;汉字11
inc r0
mov @r0, #0b6h ;汉字12
inc r0
mov @r0, #0abh ;汉字12
inc r0
mov @r0, #0b4h ;汉字13
inc r0
mov @r0, #0f3h ;汉字13
inc r0
mov @r0, #0d6h ;汉字14
inc r0
mov @r0, #0c7h ;汉字14
inc r0
mov @r0, #0c4h ;汉字15
inc r0
mov @r0, #0dch ;汉字15
inc r0
mov @r0, #00h ;汉字16
inc r0
mov @r0, #00h ;汉字16
inc r0
;
mov @r0, #2ah ;备用字
inc r0
mov @r0, #65h ;除头尾外字节和
inc r0
mov @r0, #55h ;结束字
ret
;**************************************************
;根据串口读到的内码,从汉字库中读出字模数据,
;并依次存储在ram中 .
zhuanyi: nop
;处理第1个字
mov r0, #0d0h ;指向接收数据首
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #00h ;第几个字标志
mov 5dh, #20h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram 2000h-201fh
;处理第2个字
mov r0, #0d2h
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #20h ;第几个字标志
mov 5dh, #20h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram 2000h-201fh
;处理第3个字
mov r0, #0d4h
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #40h ;第几个字标志
mov 5dh, #20h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第4个字
mov r0, #0d6h
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #60h ;第几个字标志
mov 5dh, #20h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第5个字
mov r0, #0d8h
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #80h ;第几个字标志
mov 5dh, #20h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第6个字
mov r0, #0dah
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #0a0h ;第几个字标志
mov 5dh, #20h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第7个字
mov r0, #0dch
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #0c0h ;第几个字标志
mov 5dh, #20h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第8个字
mov r0, #0deh
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #0e0h ;第几个字标志
mov 5dh, #20h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;(第二排)
;处理第9个字
mov r0, #0e0h
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #00h ;第几个字标志
mov 5dh, #21h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第10个字
mov r0, #0e2h
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #20h ;第几个字标志
mov 5dh, #21h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第11个字
mov r0, #0e4h
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #40h ;第几个字标志
mov 5dh, #21h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第12个字
mov r0, #0e6h
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #60h ;第几个字标志
mov 5dh, #21h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第13个字
mov r0, #0e8h
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #80h ;第几个字标志
mov 5dh, #21h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第14个字
mov r0, #0eah
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #0a0h ;第几个字标志
mov 5dh, #21h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第15个字
mov r0, #0ech
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #0c0h ;第几个字标志
mov 5dh, #21h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
;处理第16个字
mov r0, #0eeh
mov a, @r0
mov r2, a
inc r0
mov a, @r0
mov r3, a
mov 5ch, #0e0h ;第几个字标志
mov 5dh, #21h ;第几个字标志
lcall dqzimo ;读取字模到内存程序
lcall cunram ;存储到ram
nop
ret
;**************************************************
;读取字模程序
dqzimo: nop
;78h-- 79h-- 7ah-- 7bh-- 7ch-- 7dh--7eh--7fh--
clr 78h ;RS485 0--JIESHOU
setb 79h ;ROM-CE'
setb 7ah ;RAM-CE2'
setb 7bh ;RAM-CE1'
CLR 7ch ;A19
CLR 7dh ;A18
CLR 7eh ;A17
CLR 7fh ;A16
;mov 2fh,#0fh ;位选控制字
mov a, 2fh
;lcall send_kz
;*********************************************
;判断r2,r3的值,若是00h则输出全为00h
;判断r2,r3的值,若是小于a0h则分别输出r2,r3的字库
mov a, r2
clr cy
cjne a, #0a0h, bd1 ;判断与#0a0h大小
bd1: jnc clhanzi ;若r2大于0a0h,则转入汉字处理
cjne a, #00h, smz1 ;判断r2是否=0
mov a, r3
cjne a, #00h, smz1 ;判断r3是否=0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -