📄 st7920pp.asm
字号:
;******************************************************************************
;
; ST7920控制器与MPU(AT89C51 采用11.0592M晶振)并行接口程序(翻页)
;
;******************************************************************************
RS_ST7920 EQU P3.0 ; (RS) H:Data L:Instruction Code(R/W)
RW_ST7920 EQU P3.1 ; (R/W) H:Read L:Write
EN_ST7920 EQU P3.2 ; (E)
ST7920_PORT EQU P1
ST7920_COM EQU 30H ;调用LCD命令缓冲字
ST7920_DataH EQU 31H ;调用LCD显示字符区码
ST7920_DataL EQU 32H ;调用LCD显示字符位码
DDRAM_Address EQU 33H ;LCD数据寄存器DDRAM当前地址
LCDRAMADD_H EQU 34H ;存放LCD数据的外部RAM当前地址缓存(高字节)
LCDRAMADD_L EQU 35H ;存放LCD数据的外部RAM当前地址缓存(低字节)
LCDRAMADD_SH EQU 36H ;存放LCD数据的外部RAM页起始地址(高字节)
LCDRAMADD_SL EQU 37H ;存放LCD数据的外部RAM页起始地址(低字节)
LCDPageChar_Num EQU 38H ;LCD每页显示字数
LCDPage_Num EQU 39H ;LCD当前页号
LCDAllChar_Num EQU 3AH ;本条信息所有字数(双字节)
LCDUnDis_Num EQU 3BH ;本条信息剩余待显示字数(双字节)
LCDPageEnd_Flag BIT 01H ;本条信息结束标志位
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
START: NOP
NOP
W_7132: MOV DPL,#00H
MOV DPH,#00H
INC DPTR
MOV A,#55H
MOVX @DPTR,A
INC DPTR
MOV R7,#55H
MOV A,#01H
W_71321: NOP
NOP
MOVX @DPTR,A
INC DPTR
INC A
DJNZ R7,W_71321
NOP
NOP
LCDDis_OneMsg:NOP
NOP
MOV LCDRAMADD_SH,#00H
MOV LCDRAMADD_SL,#00H
NOP
LCALL INI_St7920
NOP
LCALL WLCD_OnePage
NOP
NOP
LCALL TurnDown_OnePage
NOP
NOP
LCALL TurnDown_OnePage
NOP
NOP
LCALL TurnDown_OnePage
NOP
NOP
LCALL TurnDown_OnePage
NOP
NOP
LCALL TurnUp_OnePage
NOP
NOP
LCALL TurnUp_OnePage
NOP
NOP
LCALL TurnUp_OnePage
NOP
NOP
LCALL TurnUp_OnePage
NOP
NOP
LJMP LCDDis_OneMsg
;********************************************************************
;模块名称:INI7920 (ST7920 LCD初始化)
;入口参数:ST7920_COM(待写命令字)
;出口参数:结束后 1. 选择8BIT MPU 控制界面
; 2. 选择基本指令集
; 3. 屏幕整体显示,游标显示关,游标位置反白关
; 4. DDRAM填满20H(空格),地址计数器AC="00",进入点设定I/D="1"(游标右移AC加1)
;堆栈使用:1BYTE
;********************************************************************
INI_St7920: NOP
NOP
MOV ST7920_COM, #30H ; 功能设定,选择8BIT MPU 控制界面
LCALL WLCD_Command ; DL="1"
NOP
NOP
MOV ST7920_COM, #30H ; 功能设定,选择基本指令集
LCALL WLCD_Command ; RE="0"
NOP
NOP
MOV ST7920_COM, #0CH ; 设定显示状态,屏幕整体显示,游标显示关,游标位置反白关
LCALL WLCD_Command ; D="1" C="0" B="0"
NOP
NOP
MOV ST7920_COM, #01H ; 清除显示,将DDRAM填满20H,AC="00" I/D="1"
LCALL WLCD_Command
NOP
NOP
MOV LCDPage_Num,#00H
LCALL CountAllChar_Num
NOP
NOP
INC LCDRAMADD_SL
NOP
NOP
RET
;********************************************************************
;模块名称:WLCD_OnePage (写一页LCD)
;入口参数:
;出口参数:
;堆栈使用:1BYTE
;********************************************************************
WLCD_OnePage: NOP
NOP
LCALL Clear_LCD ;写页面前先清除此页
NOP
NOP
MOV LCDPageChar_Num,#1FH ;赋LCD每页显示字数
MOV LCDAllChar_Num, LCDUnDis_Num
MOV LCDRAMADD_H, LCDRAMADD_SH ;赋写页面外部RAM起始地址
MOV LCDRAMADD_L, LCDRAMADD_SL
MOV DPH, LCDRAMADD_H
MOV DPL, LCDRAMADD_L
;MOV R7, LCDPageChar_Num ;赋每页写入字数给R7 (CHECK)
WLCD_OnePage1:NOP
NOP
MOVX A, @DPTR
MOV ST7920_DataH, A
INC DPTR
MOVX A, @DPTR
MOV ST7920_DataL, A
LCALL WLCD_DDRAM ;将外部RAM内容(双字节)写入DDRAM
INC DPTR
NOP
NOP
DEC LCDAllChar_Num
MOV A, LCDAllChar_Num
JZ WLCD_OnePage2 ;本条信息是否写完
NOP
NOP
DJNZ LCDPageChar_Num, WLCD_OnePage1 ;此页是否写完
NOP
NOP
MOV LCDRAMADD_H, DPH
MOV LCDRAMADD_L, DPL
NOP
NOP
LCALL LCDHasNextPage ;显示还有下一页图标
CLR LCDPageEnd_Flag ;清除本条信息结束标志位
NOP
NOP
RET
WLCD_OnePage2:NOP
NOP
LCALL LCDNoNextPage ;显示没有下一页图标
SETB LCDPageEnd_Flag ;设置本条信息结束标志位
NOP
NOP
RET
;********************************************************************
;模块名称:WLCD_OnePage (LCD向上翻一页)
;入口参数:
;出口参数:
;堆栈使用:1BYTE
;********************************************************************
TurnUp_OnePage: NOP
NOP
MOV A, LCDPage_Num
JZ TurnUp_OnePage1 ;判断是否为第一页,若是则保留本页内容,不再向上翻页
NOP
MOV LCDPageChar_Num,#1FH
NOP
CLR C ;若否则将首地址转到上一页
MOV A,LCDRAMADD_SL
SUBB A, LCDPageChar_Num
MOV LCDRAMADD_SL, A
MOV A, LCDRAMADD_SH
SUBB A, #00H
MOV LCDRAMADD_SH,A
NOP
NOP
CLR C
MOV A,LCDRAMADD_SL
SUBB A, LCDPageChar_Num
MOV LCDRAMADD_SL, A
MOV A, LCDRAMADD_SH
SUBB A, #00H
MOV LCDRAMADD_SH,A
NOP
NOP
MOV A, LCDUnDis_Num ;剩余待显示字数加LCD每页显示字数
ADD A, LCDPageChar_Num
MOV LCDUnDis_Num, A
NOP
NOP
LCALL WLCD_OnePage ;写上一页
NOP
NOP
DEC LCDPage_Num ;LCD当前页号减一
TurnUp_OnePage1:NOP
NOP
RET
;********************************************************************
;模块名称:TurnDown_OnePage (LCD向下翻一页)
;入口参数:
;出口参数:
;堆栈使用:1BYTE
;********************************************************************
TurnDown_OnePage: NOP
NOP
JB LCDPageEnd_Flag, TurnDown_OnePage1 ;判断是否为最后一页,若是则保留本页内容,不再向下翻页
NOP
MOV LCDPageChar_Num,#1FH
NOP
CLR C ;若否则将首地址转到下一页
MOV A,LCDRAMADD_SL
ADDC A, LCDPageChar_Num
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -