⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1.bak

📁 使用C51单片机
💻 BAK
📖 第 1 页 / 共 3 页
字号:
;################################
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 + -