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

📄 20-0 lcd12864.asm

📁 用Keil3编写的LCD12864的转换控制!!非常有用!
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***************************************************************************
;连线图: *LCM---8031* *LCM---8031* *LCM------------8031* *LCM----------8031*
;        *DB0---P0.0* *DB4---P0.4* *D/I------------P1.0* *CS1----------P1.3*
;        *DB1---P0.1* *DB5---P0.5* *R/W------------P1.1* *CS2----------P1.4*
;        *DB2---P0.2* *DB6---P0.6* *E--------------P1.2
;        *DB3---P0.3* *DB7---P0.7* */RST-----------VDD       (详见说明书)
;注:8031的晶振频率为12MHz
;**************************************************************************
XPOS    EQU     20H             ;列方向地址指针(用于LCDPOS子程序)
YPOS    EQU     21H             ;行方向地址指针(用于LCDPOS子程序)
ww      EQU     22H             ;数据个数 原来的 CODE 改成了WW  2005.11.07
RSPIN   EQU     P1.0            ;
RWPIN   EQU     P1.1            ;
EPIN    EQU     P1.2            ;
CS1PIN  EQU     P1.3            ;
CS2PIN  EQU     P1.4
        ORG     0000H
        LJMP    MAIN
MAIN:   MOV     SP,#60H
        LCALL   LCDRESET        ;控制器复位!
LOOP:   MOV     A,#00H
        LCALL   LCDFILL         ;控制器清屏!
        MOV     DPTR,#TU_TAB    ;128*64的图片数据
        LCALL   DIS_TU          ;显示
         LCALL   DELAY1S         ;延时7S
         LCALL   DELAY1S
         LCALL   DELAY1S
         LCALL   DELAY1S
         LCALL   DELAY1S
         LCALL   DELAY1S
        LCALL   DELAY1S
        LCALL   DELAY1S
        MOV     A,#00H
        LCALL   LCDFILL         ;清屏
        LCALL   DSPLAYS         ;显示浙江天煌
        LCALL   DELAY1S         ;延时8S
        LCALL   DELAY1S
        LCALL   DELAY1S
        LCALL   DELAY1S
        LCALL   DELAY1S
        LCALL   DELAY1S
        LCALL   DELAY1S
        LCALL   DELAY1S
        LJMP    LOOP               ;大循环
;========================================================================
DELAY1S:
        MOV     R0,#20            ;延时子程序(400MS)
DL4_PA: MOV     R1,#100
DL4_PB: MOV     R2,#100
        DJNZ    R2,$
        DJNZ    R1,DL4_PB
        DJNZ    R0,DL4_PA
        RET
;=========================================================================
DSPLAYS:  MOV  DPTR,#HZKDOT       ;汉字库首地址
          MOV   XPOS,#0
          MOV   YPOS,#2
          MOV   ww,#0
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS         ;第2个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS1        ;第3个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS2        ;第4个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS3        ;第5个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS4        ;第6个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS5        ;第7个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS6        ;第8个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS7        ;第9个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS8        ;第10个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS9        ;第11个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;
          MOV   DPTR,#BBS10       ;第12个汉字
          LCALL PUTCHARDOT        ;显示一个汉字
          LCALL PUTCHARDOT        ;

          RET




PUTCHARDOT:
	MOV	R7,#8
PAC_PA:
	MOV  	A,#0
	MOVC	A,@A+DPTR
	CALL	LCDWRITE
	INC	YPOS
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	CALL	LCDWRITE
	DEC	YPOS
	INC	DPTR
	CALL	CUSORNEXT
	MOV	A,XPOS
	JNZ	PAC_LAX
	INC	YPOS
PAC_LAX:
	DJNZ	R7,PAC_PA
	RET
;=========================================================================
LCDFILL:                        ;LCD整屏显示A的内容
        MOV     R7,A
        MOV     YPOS,#0
LFL_PB: MOV     XPOS,#0
LFL_PA: MOV     A,R7
        LCALL   LCDWRITE        ;定位并写数据
        LCALL   CUSORNEXT       ;加行或者列
        MOV     A,XPOS;列
        JNZ     LFL_PA          ;XPOS<128则循环(128列)
        MOV     A,YPOS
        JNZ     LFL_PB;行         ;YPOS<8则循环(8页)
        RET
DIS_TU:  MOV     YPOS,#0        ;从0行开始
LFL_PB1: MOV     XPOS,#0        ;从0列开始
LFL_PA1: MOV     A,#00h
        movc    a,@a+dptr
        LCALL    LCDWRITE        ;定位并写数据
        LCALL    CUSORNEXT       ;行或者列加一
        INC      DPTR
        MOV      A,XPOS           ;
        JNZ     LFL_PA1          ;XPOS<128则循环(128列)
        MOV     A,YPOS
        JNZ     LFL_PB1          ;YPOS<8则循环(8页)
        RET
;======================================================================
LCDWRITE:                    ;定位并写数据子程序
        CALL    LCDPOS       ;内部写数指针定位
        CALL    LCDWD        ;写数据/分左右屏
        RET
;======================================================================
CUSORNEXT:
	ANL	YPOS,#7        ;页码
	INC	XPOS           ;列码
	MOV	A,XPOS
	JNB	ACC.7,CNT_LAX  ;小于128
	MOV	XPOS,#0        ;清列码
	INC	YPOS           ;加一行
	MOV	A,YPOS
	ANL	A,#0F8H        ;大于8则结束
	JZ	CNT_LAX
	MOV	YPOS,#0
CNT_LAX:
	RET
;======================================================================
LCDPOS:                        ;内部写数指针定位子程序
        PUSH    ACC            ;保存要写的数据
        MOV     A,XPOS         ;列数据
        JB      ACC.6,LPS_LAY  ;列大于64则跳转
        MOV     A,YPOS         ;XPOS列方向小于64则对CS1操作
        ANL     A,#07H         ;页码
        ADD     A,#0B8H        ;固定码,芯片要求的
        LCALL    LCDWC1       ;设页码,在第几行?
        MOV     A,XPOS
        ANL     A,#3FH        ;小于63
        ORL     A,#40H        ;固定码,见说明书
        CALL    LCDWC1        ;设列码
        JMP     LPS_LAX
LPS_LAY:MOV     A,YPOS        ;XPOS列方向大于等于64则对CS2操作
        ANL     A,#07H
        ADD     A,#0B8H
        CALL    LCDWC2        ;设页码
        MOV     A,XPOS
        ANL     A,#3FH
        ORL     A,#40H
        CALL    LCDWC2        ;设列码
LPS_LAX:POP     ACC
        RET
;========================================================================
LCDWD:                          ;送数据子程序
        MOV     B,A
        MOV     A,XPOS
        JB      ACC.6,LWD_LAY
        MOV     A,B             ;XPOS列方向小于64则对CS1操作
        CALL    LCDWD1
        JMP     LWD_LAX
LWD_LAY:MOV     A,B             ;XPOS列方向大于等于64则对CS2操作
        CALL    LCDWD2
LWD_LAX:
        RET
;==========================================
LCDRESET:                       ;LCD控制器复位
        MOV     A,#3FH          ;打开LCD显示
        CALL    LCDWC1
        CALL    LCDWC2
        MOV     A,#0C0H         ;设显示起始行
        CALL    LCDWC1
        CALL    LCDWC2
        RET
LCDWC1:                         ;送片1控制字子程序
        CALL    WAITIDLE1       ;判断液晶是否忙?
        MOV     P0,A
        CLR     RSPIN           ;RS=0 RW=0 CS1=1 E=高脉冲
        CLR     RWPIN
        SETB    CS1PIN
        SETB    EPIN
        NOP
        CLR     EPIN
        CLR     CS1PIN
        RET
LCDWC2:                         ;送片2控制字子程序
        CALL    WAITIDLE2
        MOV     P0,A

⌨️ 快捷键说明

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