📄 lcd1.bak
字号:
;################################
FDOG EQU P3.6 ;喂狗信号
;################################
FREQ EQU P1.0 ;请求信号
FBUSY EQU P1.1 ;应答信号
VSDA BIT P0.1
VSCL BIT P0.0
;################################
TMPBUF1 EQU 20H ;发送缓冲区的第一个字节
TMPBUF2 EQU 21H ;发送缓冲区的第二个字节
F_LETREAD BIT 28H ;25H.0 启动串口读数据
F_SHOWED BIT 29H ;25H.1 是否是第一次发送数据到显示屏
F_PAGE BIT 31H ;25H.4 是否是第一次翻页
ASCX EQU 33H ;30H
HANZIY EQU 34H ;31H
HANZIX EQU 35H ;ASCX/2
ASCY EQU 36H ;32H ;HANZIY*16
SUMREAD EQU 37H ;总字节数
SUMITEMS EQU 38H ;总帧数
NOWITEM EQU 39H ;当前帧
KEYCHKBUF EQU 3BH ;判断何键按下(8,4,2,1--上翻,下翻,清屏,删除)
STARTBUF EQU 40H ;缓冲区起始指针
;################################
MTD EQU 3AH ;发送数据缓冲区首址
MRD EQU 28H ;接收数据缓冲区首址
SLA EQU 3CH ;器件寻址字节
NUMBYT EQU 3EH ;传送字节数
SLAW0 EQU 0A0H ;器件写寻址
SLAR0 EQU 0A1H ;器件读寻址
;################################
MAXNUM EQU 19H ;最大帧数
;################################
;START
;################################
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTTM0
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;主程序
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
ORG 0080H
MAIN:
LCALL RSTDOG
CLR P1.0
MOV SP,#0FH ;设置堆饯 (10H - 1FH)
SETB EA ;允许中断
CLR F_PAGE
MOV TMOD,#21H ;TIMER1工作在MODE2(产生串口的波特率),TIMER0工作在方式1
MOV TL1,#0FDH
MOV TH1,#0FDH ;波特率 9600 (晶振 11.0592)
SETB TR1
MOV TL0,#00H ;设初值,溢出时触发中断
MOV TH0,#0DCH
SETB TR0
SETB ET0
LCALL CLEARSCR
;"欢迎您使用恒华电子的产品系列!"
MOV R0,#45H
MOV @R0,#0BBH
INC R0
MOV @R0,#0B6H
INC R0
MOV @R0,#0D3H
INC R0
MOV @R0,#0ADH
INC R0
MOV @R0,#0C4H
INC R0
MOV @R0,#0FAH
INC R0
MOV @R0,#0CAH
INC R0
MOV @R0,#0B9H
INC R0
MOV @R0,#0D3H
INC R0
MOV @R0,#0C3H
INC R0
MOV @R0,#0B9H
INC R0
MOV @R0,#0F0H
INC R0
MOV @R0,#0C1H
INC R0
MOV @R0,#0D6H
INC R0
MOV @R0,#0BAH
INC R0
MOV @R0,#0E3H
INC R0
MOV @R0,#0BBH
INC R0
MOV @R0,#0AAH
INC R0
;MOV @R0,#0B5H
;INC R0
;MOV @R0,#0E7H
;INC R0
;MOV @R0,#0D7H
;INC R0
;MOV @R0,#0D3H
;INC R0
MOV @R0,#0B5H
INC R0
MOV @R0,#0C4H
INC R0
MOV @R0,#0B2H
INC R0
MOV @R0,#0FAH
INC R0
MOV @R0,#0C6H
INC R0
MOV @R0,#0B7H
INC R0
MOV @R0,#0CFH
INC R0
MOV @R0,#0B5H
INC R0
MOV @R0,#0C1H
INC R0
MOV @R0,#0D0H
INC R0
MOV @R0,#021H
INC R0
MOV A,R0
SUBB A,#45H
MOV 44H,A
LCALL WRITEDATA
SETB EA
;CLR EA
;---------------------------------------------------------------------
GO_ON: LCALL RSTDOG
NOP
NOP
;LCALL CLEARSCR
LCALL GETDATA
NOP
NOP
NOP
NOP
NOP
MOV R0,#40H
CJNE @R0,#40H,WRITEJWD ;判断是否存入EEPROM
NOP
LCALL WRITEDATA
NOP
CLR EA
LCALL RSTDOG
NOP
LCALL WRITEIIC
NOP
SJMP NEXTLP
WRITEJWD: MOV R0,#40H
CJNE @R0,#24H,NEXTLP
CLR EA
JB F_PAGE,NEXTLP
LCALL WRBUF
NOP
NEXTLP: SETB EA
NOP
NOP
NOP
NOP
NOP
NOP
AJMP GO_ON
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;从串口读入数据
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
GETDATA: LCALL RSTDOG
NOP
MOV SCON,#50H ;串口工作在MODE1;REN=1允许接收 (RI=0,TI=0)
MOV A,PCON
ANL A,#7FH
MOV PCON,A ;设定PCON.7 为0
;SETB EA ;允许中断
;MOV TMOD,#20H ;TIMER1工作在MODE2(产生串口的波特率)
;MOV TL1,#0FDH
;MOV TH1,#0FDH ;波特率 9600 (晶振 11.0592)
;SETB TR1
MOV R0,#TMPBUF1
MOV @R0,#00H ;缓冲初始化
MOV R1,#40H ;设接收缓冲区指针
CLR F_LETREAD ;读标志清0
MOV SUMREAD,#00H ;接收字节总数清0
WAIT1: LCALL RSTDOG
NOP
JBC RI,GETCOMMDATA ;接收等待,接收完一帧转
SJMP WAIT1
GETCOMMDATA: MOV @R0,SBUF
JNB F_LETREAD,FIRSTCHK ;如果尚未启动读,则判断是否是启动符
CJNE R0,#TMPBUF2,ENDCHK ;(不等于跳转) ,判断是否是结束符
MOV A,@R0
MOV @R1,A
INC R1 ;指针后移一个字节
MOV R0,#TMPBUF1
MOV @R0,#00H ;缓冲初始化
JMP WAIT1
FIRSTCHK: CJNE @R0,#24H,FIRSTCHK1 ;(不等于$跳转)
SJMP LETREAD
FIRSTCHK1: CJNE @R0,#40H,WAIT1 ;(不等于@跳转)
LETREAD: SETB F_LETREAD ;启动读(且第一次读)
CLR EA
MOV A,@R0
MOV @R1,A ;(40H) ,存放$/@
INC R1 ;指针后移一个字节
MOV @R1,#00H ;(41H) ,用于IIC的ADDR
INC R1 ;指针后移一个字节
MOV @R1,#00H ;(42H) ,用于IIC的ADDR
INC R1 ;指针后移一个字节
MOV @R1,#00H ;(43H) ,用于条号
INC R1 ;指针后移一个字节
MOV @R1,#00H ;(44H) ,用于实际所用字节数
INC R1 ;指针后移一个字节
MOV @R0,#00H ;缓冲初始化
JMP WAIT1
ENDCHK: ;CJNE @R0,#0AH,NOTEND ;(不等于LF跳转) ,请勿删除
;DEC R1 ;请勿删除
CJNE @R0,#0DH,NOTEND1 ;(不等于CR跳转)
CLR F_LETREAD ;CLOSE READ
MOV A,@R0
MOV @R1,A
;以下两句临时用
INC R1 ;临时用
MOV @R1,#0AH ;临时用
MOV A,R1
SUBB A,#3FH ;GET THE TOTAL NUMBER (R1-40H+1)
MOV SUMREAD,A ;KEEP THE TOTAL NUMBER OF BUFFER
SUBB A,#7H ;44H = 37H -7
MOV 44H,A ;KEEP THE FACTUSE NUMBER OF BUF
JMP RETURN
NOTEND1: ;INC R1 ;抵消上面的 DEC RI ,请勿删除
NOTEND: MOV A,@R0 ;读入字符串
MOV @R1,A
INC R1 ;指针后移一个字节
JNB 07H,NOTHANZI ;不等于跳转到NOTHANZI,(但如果是汉字,则再读第二个字节)
MOV R0,#TMPBUF2
NOTHANZI: MOV @R0,#00H ;缓冲初始化
JMP WAIT1
RETURN: ;SETB EA
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;输出数据显示
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
WRITEDATA: LCALL RSTDOG
CLR EA
MOV R2,44H ;缓冲区实际所用数据总量
MOV R1,#45H ;缓冲区首地址
MOV ASCX,#00H ;显示屏位置初始化
MOV HANZIY,#00H
MOV ASCY,#00H
MOV HANZIX,#00H
CLR F_SHOWED ;CLR 25H.1 ,是否为第一个显示数据标志清零
WAIT2: LCALL RSTDOG
MOV TMPBUF1,@R1
JB 07H,WRITEHANZI
WRITEASCII: ACALL NEXTSPACE
MOV TMPBUF1,@R1
MOV A,#0F9H
LCALL SENDCMD
MOV A,ASCX ;#04H
LCALL SENDCMD
MOV A,ASCY
LCALL SENDCMD
MOV A,TMPBUF1 ;@R1
LCALL SENDCMD
INC R1
DJNZ R2, WAIT2
JMP RETURN2
WRITEHANZI: ACALL NEXTSPACE
MOV TMPBUF1,@R1
INC R1
MOV TMPBUF2,@R1
ACALL CHGCODE
MOV A,#0F0H
LCALL SENDCMD
MOV A,HANZIX
LCALL SENDCMD
MOV A,HANZIY
LCALL SENDCMD
MOV A,TMPBUF1
LCALL SENDCMD
MOV A,TMPBUF2
LCALL SENDCMD
INC ASCX
INC R1
DEC R2
DJNZ R2, WAIT2
JMP RETURN2
RETURN2: ;SETB EA
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;汉字内码--区位码转换
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
CHGCODE: PUSH A
CLR C
MOV A,TMPBUF1
SUBB A,#0A0H
MOV TMPBUF1,A
CLR C
MOV A,TMPBUF2
SUBB A,#0A0H
MOV TMPBUF2,A
POP A
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;把缓冲输出到EEPROM
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
WRITEIIC: LCALL RSTDOG
CLR EA
;NOP
;取出EEPROM已有的内容
MOV MTD,#41H
MOV MRD,#38H
MOV R5,MTD
MOV 41H,#0
MOV 42H,#78H
MOV SLA,#SLAW0
MOV NUMBYT,#2
LCALL WRNBYT
MOV SLA,#SLAR0
MOV NUMBYT,#1
MOV R5,MRD
LCALL RDNBYT
MOV R0,MRD
INC @R0
MOV 43H,@R0
MOV MTD,#41H
MOV MRD,#0B0H
MOV R5,MTD
MOV 41H,#00
MOV 42H,#40H
MOV SLA,#SLAW0
MOV NUMBYT,#2
LCALL WRNBYT
MOV SLA,#SLAR0
MOV NUMBYT,#42H
MOV R5,MRD
LCALL RDNBYT
MOV R0,MRD
MOV A,43H
CJNE A,#1AH,CHKSPC
LJMP WRMEM
CHKSPC: CJNE @R0,#00H,RE_PLACE
MOV A,43H ; 取得新帧地址
MOV B,#80H
MUL AB
MOV 41H,B
MOV 42H,A
;INC R0
LJMP WRMEM
RE_PLACE: MOV A,@R0
DEC A
MOV @R0,A
MOV R2,A ;取得空白空间的地址
INC R0
MOV 41H,@R0
INC R0
MOV 42H,@R0
DEC R0
LCALL LP_PLACE ;--调整字节位置
;调整EEPROM
WRMEM: MOV A,43H
CJNE A,#1AH,WRNUM
DEC A
WRNUM: MOV R0,#0E8H
MOV @R0,A
INC R0
MOV @R0,A
MOV MTD, #0AEH
MOV R5,MTD
MOV R0,#0AEH
MOV @R0,#0
INC R0
MOV @R0,#40H
MOV SLA,#SLAW0
MOV NUMBYT,#42H
LCALL RSTDOG
LCALL WRNBYT
;把缓冲写入EEPROM
MOV A,43H
CJNE A,#1AH,LOAD_BUF
MOV 41H,#00
MOV 42H,#00H
MOV MTD, #41H
MOV R5,MTD
MOV SLA,#SLAW0
MOV NUMBYT,#2
LCALL WRNBYT
MOV MRD,#0B0H
MOV R5,MRD
MOV SLA,#SLAR0 ;读帧地址
MOV NUMBYT,#40H
LCALL RDNBYT
MOV R0,#0B0H ;保存空白空间
MOV 41H,@R0
INC R0
MOV 42H,@R0
MOV R5,43H
LCALL DEC_MUL2
MOV A,R6
ADD A,MRD ;得出该帧地址
MOV R0,A
MOV @R0,41H
INC R0
MOV @R0,42H
INC R0
MOV R0,#0B0H
DEC 43H
MOV R2,43H
LCALL LP_PLACE
;写入所有帧地址
MOV R0,#0AEH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -