原创 51单片机驱动LCM1602

2007-8-18 15:55 3874 6 6 分类: MCU/ 嵌入式

;作者:eleclike


;功能;驱动LCM1602,LCM1602为深圳誉信公司的16*2液晶字符型显示模块,程序使用读写方式控制LCM1602,地址分别为:写指令口:80H; 读忙检查口:81H; 写数据口:82H; 读数据口:83H;
;子程序1:写控制指令子程序
;子程序2:写CGRAM数据子程序
;子程序3:写DDRAM子程序
;子程序4:写数据子程序
;子程序5:读忙子程序


 


RG_DLY EQU 2H


    ORG 0000H               
     AJMP MAI                
     ORG 0030H


MAI: MOV SP,#60H


LP_MAI: NOP
 LCALL SB_WRIN;调用写控制指令子程序


 LCALL SB_WRCG;调用写CGRAM
     
LP2_MAI:NOP
 LCALL SB_WRDR;调用写DDRAM


RT_MAI: AJMP LP2_MAI



;---------------------------------------------------------
;---------子程序---开始------------------------------------
  
;-1------写控制指令子程序----------
SB_WRIN:PUSH ACC
 MOV R0,#80H              ;写指令口


 MOV A,#01H              ;(INSTR.1)
     LCALL SB_WAT  ;清屏
     MOVX @R0,A 


 MOV A,#02H              ;(INSTR.2)
     LCALL SB_WAT  ;A光标归位
     MOVX @R0,A


 MOV A,#06H              ;(INSTR.3)
     LCALL SB_WAT  ;AC自动加一,画面不动;
     MOVX @R0,A
   
     MOV A,#0CH        ;(INSTR.4)0FH:显示开,关标 开,闪烁开  
        LCALL SB_WAT  ;0CH 显示开,关标、闪烁关
     MOVX @R0,A     


 ;MOV A,#18H        ;(INSTR.5)
        ;LCALL SB_WAT  ;光标 或画面平移指令
     ;MOVX @R0,A 
 
     MOV A,#38H              ;(INSTR.6)
     LCALL SB_WAT     ;8位数据,2行显示,5-7点阵
     MOVX @R0,A   
     
     POP ACC
 RET
;-2----写CGRAM数据子程序------
SB_WRCG:PUSH ACC
     MOV  DPTR,#CGR          
     MOV  R1,#40H;=CGRAM的首地址            
 MOV  R2,#4;=4个字符               
LP_WG0: MOV  R3,#8;=每个字符有8位数据即8行      
LP_WG1: MOV  R0,#80H            
     MOV  A,R1
     LCALL  SB_WAT
     MOVX  @R0,A
     CLR  A
     MOVC  A,@A+DPTR
     LCALL  SB_WRTD               
     INC  R1
     INC  DPTR
     DJNZ  R3,LP_WG1
     DJNZ  R2,LP_WG0
     NOP     
 POP ACC
     RET
;-3-----写DDRAM子程序--------
SB_WRDR:PUSH ACC
 MOV  R0,#80H  
     MOV  A,#80H  ; 写第一行DDRAM数据
     LCALL  SB_WAT
     MOVX  @R0,A


     MOV A,#49H               ; I
     LCALL SB_WRTD
  MOV A,#20H               ; SPACE
     LCALL SB_WRTD
 MOV A,#4CH               ; L
     LCALL SB_WRTD
     MOV A,#4FH               ; O
     LCALL SB_WRTD
     MOV A,#56H               ; V
     LCALL SB_WRTD
     MOV A,#45H               ; E
     LCALL SB_WRTD
 MOV A,#20H               ; SPACE
     LCALL SB_WRTD
     MOV A,#4DH               ; M
     LCALL SB_WRTD
     MOV A,#59H               ; Y
     LCALL SB_WRTD
     MOV A,#20H               ; SPACE
     LCALL SB_WRTD
     MOV A,#42H               ; B
     LCALL SB_WRTD
     MOV A,#41H               ; A
     LCALL SB_WRTD
     MOV A,#42H               ; B
     LCALL SB_WRTD
     MOV A,#59H               ; Y
     LCALL SB_WRTD
     MOV A,#20H               ; EMPTY
     LCALL SB_WRTD
 MOV A,#20H               ; EMPTY
     LCALL SB_WRTD


  MOV R0,#80H             
     MOV A,#0C0H              ;写第二行DDRAM
     LCALL SB_WAT
     MOVX @R0,A


 MOV A,#49H               ; I
     LCALL SB_WRTD
  MOV A,#20H               ; SPACE
     LCALL SB_WRTD
 MOV A,#41H               ; A
     LCALL SB_WRTD
 MOV A,#4CH               ; L
     LCALL SB_WRTD
 MOV A,#53H               ; S
     LCALL SB_WRTD
 MOV A,#4FH               ; O
     LCALL SB_WRTD
  MOV A,#20H               ; SPACE
 LCALL SB_WRTD
 MOV A,#4DH               ; M
     LCALL SB_WRTD
 MOV A,#49H               ; I
     LCALL SB_WRTD
 MOV A,#53H               ; S
     LCALL SB_WRTD
 MOV A,#53H               ; S
 LCALL SB_WRTD
 MOV A,#20H               ; SPACE
     LCALL SB_WRTD
 MOV A,#59H               ; Y
     LCALL SB_WRTD
 MOV A,#4FH               ; O
     LCALL SB_WRTD
     MOV A,#55H               ; U
     LCALL SB_WRTD


     MOV  R2,#50               ;延时229ms
     ACALL  SB_DLY
 POP ACC
 RET
;-4---写数据子程序---------
SB_WRTD:MOV  R0,#82H              ; 
     LCALL  SB_WAT
     MOVX  @R0,A               ; 
     RET


;-5---读忙子程序-----------
SB_WAT: PUSH  ACC                
     PUSH  00H
     MOV  R0,#81H              
LP_WAT: MOVX  A,@R0               
     RLC  A
     JC  LP_WAT
     POP  00H
     POP  ACC
     RET
;---------子程序----结束-----------------------------------
;---------------------------------------------------------



;------延时子程序-----------
SB_DLY: PUSH    RG_DLY  ;
LP1_DLY:PUSH    RG_DLY
LP2_DLY:PUSH    RG_DLY
 DJNZ R2,$
        POP     RG_DLY
        DJNZ    R2,LP2_DLY
        POP     RG_DLY
        DJNZ    R2,LP1_DLY
 POP     RG_DLY
        DJNZ    R2,SB_DLY 
 RET
;----------CGRAM区----------
CGR:...................;(用户自编码字符区)
    END

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条