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

📄 st7920pp.asm

📁 st7920是现在比较好用的一款液晶显示控制器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                   MOV    LCDRAMADD_SL, A
                   MOV    A, LCDRAMADD_SH
                   ADDC   A, #00H
                   MOV    LCDRAMADD_SH,A
                   NOP
                   NOP
                   CLR    C
                   MOV    A,LCDRAMADD_SL
                   ADDC   A, LCDPageChar_Num
                   MOV    LCDRAMADD_SL, A
                   MOV    A, LCDRAMADD_SH
                   ADDC   A, #00H
                   MOV    LCDRAMADD_SH,A
                   NOP
                   NOP
                   CLR    C
                   MOV    A, LCDUnDis_Num                   ;剩余待显示字数减LCD每页显示字数
                   SUBB   A, LCDPageChar_Num
                   MOV    LCDUnDis_Num, A   
                   NOP
                   NOP
                   LCALL   WLCD_OnePage                     ;写下一页
                   NOP
                   NOP
                   INC    LCDPage_Num                       ;LCD当前页号加一
 TurnDown_OnePage1:NOP
                   NOP
                   RET

                  
;********************************************************************
;模块名称:WLCD_OnePage (写一页LCD)
;入口参数:
;出口参数:       
;堆栈使用:1BYTE
;********************************************************************
CountAllChar_Num: NOP
                  NOP
                  INC    LCDRAMADD_SL                        ;起始地址后一字节为字节长度值
                                                             ;(第一字节为信息条数,第二字节为字节长度值,之后为信息数据)
                  MOV    DPL, LCDRAMADD_SL 
                  MOV    DPH, LCDRAMADD_SH
                  MOVX   A, @DPTR                            ;读取本条信息字节长度
                  MOV    B, #02H                             ;将本条信息字节长度除以2,转换为本条信息字数(双字节)
                  DIV    AB
                  MOV    LCDUnDis_Num,A
                  MOV    A,B
                  CJNE   A, #00H,CountAllChar_Num1           ;判断是否有余数,若有,本条信息字数加一
                  NOP
                  NOP
                  RET   
CountAllChar_Num1:NOP
                  NOP
                  INC    LCDUnDis_Num                   
                  NOP
                  NOP
                  RET
   
;********************************************************************
;模块名称:St7920_BUSY (LCD忙信号检测程序)
;出口参数:用ACC但不修改,只修改DDRAM_Address记录当前LCD地址
;使用堆栈:1BYTE
;********************************************************************
St7920_BUSY:	NOP     		           ;TEST  WRITE BUSY
		CLR	EN_ST7920		
St7920_BUSY1:	NOP
		NOP                                ;RS_ST7920=0, R/W=1, EN_ST7920为高电平,读忙标志和AC值 
		MOV	ST7920_PORT,  #0FFH	   ;写入0FFH,读入方式
		NOP
		NOP 
		CLR	RS_ST7920         
		SETB	RW_ST7920
		NOP
		SETB	EN_ST7920
		NOP
		NOP
		MOV	A,ST7920_PORT
		CLR	EN_ST7920
		NOP
		CLR	RW_ST7920
		SETB	RS_ST7920
		JB	ACC.7,St7920_BUSY1
		ORL     A,#80H
		MOV     DDRAM_Address,A
		NOP
		RET
;********************************************************************
;模块名称:LCDHasNextPage (还有下一页)
;入口参数:ST7920_COM(待写命令字)
;出口参数:DDRAM_Address="9FH"                
;堆栈使用:1BYTE
;********************************************************************            
            
LCDHasNextPage:NOP
               NOP
               MOV     ST7920_COM, #0DH              ; 设定显示状态,屏幕整体显示,游标显示关,游标位置反白开  
               LCALL   WLCD_Command                  ; D="1"  C="0"  B="1"
               NOP
               NOP 
               MOV     ST7920_COM, #9FH               
               LCALL   WLCD_Command                
               NOP
               NOP
               MOV     ST7920_DataH, #20H
               MOV     ST7920_DataL, #10H              
               LCALL   WLCD_DDRAM              
               NOP
               NOP
               MOV     ST7920_COM, #9FH                
               LCALL   WLCD_Command                          
               NOP
               NOP
               RET
;********************************************************************
;模块名称:LCDNoNextPage (无下一页)
;入口参数:ST7920_COM(待写命令字)
;出口参数:DDRAM_Address="9FH"                
;堆栈使用:1BYTE
;********************************************************************            
            
LCDNoNextPage: NOP
               NOP
               MOV     ST7920_COM, #0DH              ; 设定显示状态,屏幕整体显示,游标显示关,游标位置反白开  
               LCALL   WLCD_Command                  ; D="1"  C="0"  B="1"
               NOP     
               NOP  
               MOV     ST7920_COM, #9FH               
               LCALL   WLCD_Command                
               NOP
               NOP
               MOV     ST7920_DataH, #20H
               MOV     ST7920_DataL, #08H              
               LCALL   WLCD_DDRAM              
               NOP
               NOP
               MOV     ST7920_COM, #9FH                
               LCALL   WLCD_Command                          
               NOP
               NOP
               RET	
;********************************************************************
;模块名称:ClearLCD (清除本屏显示)
;入口参数:ST7920_COM(待写命令字)
;出口参数:DDRAM_Address="80H" 地址计数器AC=“00H”               
;堆栈使用:1BYTE
;********************************************************************            
            
Clear_LCD:  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
            NOP
            NOP
            RET							
;********************************************************************
;模块名称:WLCD_Command (原始命令定写入程序)
;入口参数:ST7920_COM(待写命令字)
;出口参数:结束后将当前LCD地址保存在DDRAM_Address中,不修改其它资源
;堆栈使用:1BYTE
;********************************************************************
WLCD_Command:   NOP
                NOP
                LCALL	St7920_BUSY			
		CLR	EN_ST7920             ;RS=0, R/W=0, EN下降沿 
		MOV	A, ST7920_COM         ;向ST7920写入命令字
       		CLR	RS_ST7920
		CLR	RW_ST7920
	 	NOP
		SETB	EN_ST7920
		MOV	ST7920_PORT,A
		CLR	EN_ST7920
		SETB	RS_ST7920
                NOP
                NOP
		RET		
;********************************************************************
;模块名称:WLCD_DDRAM (显示数据区位码写入程序)
;入口参数:DAT(待显示字符区位码)
;出口参数:该程序结束后DDRAM_ADD保存着刚写入字符的地址,非当前地址
;堆栈使用:1BYTE
;如果显示地址超出了第一行范围,地址自动调整为第下一行第一字
;********************************************************************

WLCD_DDRAM:	  NOP
                  NOP
                  LCALL	 St7920_BUSY                  ;TEST  WRITE BUSY
		  MOV    A,ST7920_DataH               ;向DDRAM写入第一字节
		  SETB	 RS_ST7920
		  CLR	 RW_ST7920
		  NOP
		  SETB	 EN_ST7920
		  MOV	 ST7920_PORT,A
		  NOP
		  CLR	 EN_ST7920
		  NOP
		  SETB	 RW_ST7920
		  CLR	 RS_ST7920
		  
		  LCALL	 St7920_BUSY                  ;TEST  WRITE BUSY
		  MOV    A,ST7920_DataL               ;向DDRAM写入第二字节
		  SETB	 RS_ST7920
		  CLR	 RW_ST7920
		  NOP
		  SETB	 EN_ST7920
		  MOV	 ST7920_PORT,A
		  NOP
		  CLR	 EN_ST7920
		  NOP
		  SETB	 RW_ST7920
		  CLR	 RS_ST7920
		  
                  MOV    A, DDRAM_Address
                  CJNE   A, #87H,WLCD_DDRAM1          ;判断第一行是否写满,若是将DDRAM地址转到第二行
                  MOV    ST7920_COM, #90H
                  LCALL  WLCD_Command
                  AJMP   WLCD_DDRAM0    
  WLCD_DDRAM1:    NOP
                  NOP
                  CJNE   A, #97H,WLCD_DDRAM2          ;判断第二行是否写满,若是将DDRAM地址转到第三行
                  MOV    ST7920_COM, #88H
                  LCALL  WLCD_Command                  
                  AJMP   WLCD_DDRAM0    
  WLCD_DDRAM2:    NOP
                  NOP
                  CJNE   A, #8FH,WLCD_DDRAM3          ;判断第三行是否写满,若是将DDRAM地址转到第四行
                  MOV    ST7920_COM, #98H
                  LCALL  WLCD_Command                  
                  AJMP   WLCD_DDRAM0     
  WLCD_DDRAM3:    NOP
                  NOP
                  CJNE   A, #9EH,WLCD_DDRAM0          ;判断第四行是否写满,若是将DDRAM地址转到第一行
                  MOV    ST7920_COM, #80H
                  LCALL  WLCD_Command                                    
                  
  WLCD_DDRAM0:    NOP
                  NOP				
		  RET
		        
        END   
;******************************************************************************
;
;                   ST7920控制器与MPU 接口程序结束
;
;******************************************************************************   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -