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

📄 hm128641llll.asm

📁 smg12864液晶屏基于51单片机显示程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;                    SMG12864接口程序(MCS51模拟口线方式)

;连线图: *LCM---8031* *LCM---8031* *LCM------------8031* *LCM----------8031*
;        *DB0---P1.0* *DB4---P1.4* *RS-------------P3.0* *CS1----------P3.3*
;        *DB1---P1.1* *DB5---P1.5* *RW-------------P3.1* *CS2----------P3.4*
;        *DB2---P1.2* *DB6---P1.6* *E--------------P3.2
;        *DB3---P1.3* *DB7---P1.7* */RST-----------VDD       (详见说明书)
;注:8031的晶振频率为12MHz
;**************************************************************************
XPOS    EQU     20H             ;列方向地址指针(用于LCDPOS子程序)
YPOS    EQU     21H             ;行方向地址指针(用于LCDPOS子程序)
RSPIN   EQU     P0.2            ;这几句应该改为P3.0-P3.4吧???
RWPIN   EQU     P0.3            ;
EPIN    EQU     P0.4            ;
CS1PIN  EQU     P0.0            ;
CS2PIN  EQU     P0.1            ;
res     bit     p3.4            ;这句不知道什么意思?(res是什么)
        ORG     0000H
        JMP     START
START:  MOV     SP,#60H
;        clr     res
MAIN:
        CALL    LCDRESET
        MOV	A,#00H
        CALL	LCDFILL
        MOV	DPTR,#STRING1
        CALL	PUTSTR
        CALL	PUTSTR
        lcall   delay400ms
        lcall   delay400ms
        lcall   delay400ms
        lcall   delay400ms
        lcall   delay400ms
        JMP	MAIN
DELAY400MS:
        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
DELAY:
	MOV	R6,#2
DLY_PA:	MOV	R5,#0
DLY_PB:	MOV	R4,#0
	DJNZ	R4,$
	DJNZ	R5,DLY_PB
	DJNZ	R6,DLY_PA
	RET
GETSTRCHAR:
GSC_PA:
	CLR	A
	MOVC	A,@A+DPTR
	INC	DPTR
	MOV	B,A
	INC	A
	CLR	C
	JZ	GSC_LAX
	CLR	A
	MOVC	A,@A+DPTR
	INC	DPTR
	SETB	C
GSC_LAX:
	RET
PUTSTR:
	CALL	DELAY400ms
	CALL	GETSTRCHAR
	PUSH	DPL
	PUSH	DPH
	JNC	PSR_LAX
;	JNB	B.7,PSR_LBY
;CHINESE:
	CALL	HZKPOS
        push    xpos                 
        push    ypos
	CALL	PUTCHARDOT
        pop     ypos
        pop     xpos
        inc     ypos
	CALL	PUTCHARDOT
        dec     ypos
	JMP	PSR_LBX
PSR_LBY:
;ENGLISH:
	CALL	HZKPOS
        inc     ypos
	CALL	PUTCHARDOT
        dec     ypos
PSR_LBX:
	POP	DPH
	POP	DPL
	JMP	PUTSTR
PSR_LAX:POP	DPH
	POP	DPL
	RET
PUTCHARDOT:
	MOV	R7,#8
PAC_PA:
	CLR	A
	MOVC	A,@A+DPTR
	CALL	LCDWRITE
;	INC	YPOS
	INC	DPTR
        inc     xpos
	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
HZKPOS:
	MOV	R2,#5
HTP_PA:
	CLR	C
	RLC	A
	XCH	A,B
	RLC	A
	XCH	A,B
	DJNZ	R2,HTP_PA

	MOV	DPTR,#HZKDOT
	ADD	A,DPL
	MOV	DPL,A
	MOV	A,B
	ADDC	A,DPH
	MOV	DPH,A
	RET
LCDFILL:                        ;LCD整屏显示A的内容
        MOV     R7,A
        MOV     YPOS,#0
LFL_PB: MOV     XPOS,#0
LFL_PA: MOV     A,R7
        CALL    LCDWRITE        ;定位并写数据
        CALL    CUSORNEXT
        MOV     A,XPOS
        JNZ     LFL_PA          ;XPOS<128则循环(128列)
        MOV     A,YPOS
        JNZ     LFL_PB          ;YPOS<8则循环(8页)
        RET
LCDWRITE:                    ;定位并写数据子程序
        CALL    LCDPOS       ;内部写数指针定位
        CALL    LCDWD        ;写数据
        RET
CUSORNEXT:
	ANL	YPOS,#7
	INC	XPOS
	MOV	A,XPOS
	JNB	ACC.7,CNT_LAX
	MOV	XPOS,#0
	INC	YPOS
	MOV	A,YPOS
	ANL	A,#0F8H
	JZ	CNT_LAX
	MOV	YPOS,#0
CNT_LAX:
	RET
LCDPOS:                      ;内部写数指针定位子程序
        PUSH    ACC
        MOV     A,XPOS
        JB      ACC.6,LPS_LAY
        MOV     A,YPOS       ;XPOS列方向小于64则对CS1操作
        ANL     A,#07H
        ADD     A,#0B8H
        CALL    LCDWC1       ;设页码
        MOV     A,XPOS
        ANL     A,#3FH
        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     P1,A
        CLR     RSPIN           ;RS=0 RW=0 CS1=1 E=高脉冲
        CLR     RWPIN
        clr     cs1pin
        SETB    CS2PIN
        SETB    EPIN
        NOP
        CLR     EPIN
        CLR     CS2PIN
        RET
LCDWC2:                         ;送片2控制字子程序
        CALL    WAITIDLE2
        MOV     P1,A
        CLR     RSPIN           ;RS=0 RW=0 CS2=1 E=高脉冲
        CLR     RWPIN
        clr     cs2pin
        SETB    CS1PIN
        SETB    EPIN
        NOP
        CLR     EPIN
        CLR     CS1PIN
        RET
LCDWD1:                         ;片1写数据子程序
        CALL    WAITIDLE1
        MOV     P1,A

⌨️ 快捷键说明

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