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

📄 st7920pp.asm

📁 st7920是现在比较好用的一款液晶显示控制器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
       
       
       
;******************************************************************************
;
;           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 + -