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

📄 12864zk串.asm

📁 SMG1601ALCD显示器的资料和汇编接口程序源码-SMG1601ALCD display information source and interface programme
💻 ASM
字号:
;                    SMG12864ZK串行接口程序

;***************************************************************************
;连线图:*LCM---8031* *LCM---8031* *LCM------------8031* *LCM----------8031 *
;       *CS----P3.1* *STD---P3.3* *SCLK-----------P3.0* *PSB----------P3.4 *
;       *RESET----------P3.5       (详见说明书)                           *
;注:8031的晶振频率为12MHz                                                  *
;***************************************************************************
;MODUL	SMG112864ZK
;RS=CS=CS
;R/W=STD=STD
;E=SCLK=SCLK

PSB     BIT  P3.4
RES     BIT  P3.5
CS      BIT  P3.1
STD     BIT  P3.3             ;串行数据线
SCLK    BIT  P3.0             ;串行时钟线
START   EQU  30H              ;起始字节
COM     EQU  31H              ;命令/数据
HDATA   EQU  32H              ;命令/数据字节高位
LDATA   EQU  33H              ;命令/数据字节低位
ASC     EQU  34H              ;ASCII数据单元
XPOS    EQU  35H
YPOS    EQU  36H
        ORG    0000H
MAIN:
        MOV    SP,#60H
        CLR    RES
        SETB   RES             ;  可以直接接电源VDD
        SETB   CS              ;  可以直接接电源VDD
        CLR    PSB             ;  可以直接接地VSS
        CALL   LCDRESET        ;  模块系统初始化
        CALL   HZKDIS          ;  显示汉字子程序
        MOV    START,#0F8H     ;  写入命令(11111000)
        MOV    COM,#80H        ;  设定显示位置
        CALL   LCDWRITE
        MOV    START,#0FAH     ;写数据    (11111010)
        MOV    COM,#10H        ;显示字符
        CALL   LCDWRITE
        MOV    COM,#11H        ;显示字符
        CALL   LCDWRITE
        MOV    COM,#1EH        ;显示字符
        CALL   LCDWRITE
        MOV    COM,#1FH        ;显示字符
        CALL   LCDWRITE
        MOV    START,#0F8H     ; 写入命令(11111000)
        MOV    COM,#34H        ;扩充功能设定
        CALL   LCDWRITE
        MOV    COM,#05H        ;反白选择
        CALL   LCDWRITE
        CALL   DL40MS          ;延时
        CALL   DL40MS
        CALL   DL40MS
        MOV    A,#055H         ;绘图方式下写55数据
        CALL   LCDFILL
        CALL   CLEAR           ;清屏
        JMP    MAIN
CLEAR:                         ;清屏子程序
        MOV     A,#00H
        CALL    LCDFILL
        RET
LCDRESET:
        LCALL  DL1MS           ;延时等待内部复位
        MOV    START,#0F8H     ; 写入命令(11111000)
	MOV    COM,#30H        ;使用基本指令集
	LCALL  LCDWRITE
	MOV    COM,#0CH
	LCALL  LCDWRITE        ;整体显示ON
	MOV    COM,#01H        ;清屏
	LCALL  LCDWRITE
	LCALL  DL1MS
	MOV    COM,#06H        ;显示右移
	LCALL  LCDWRITE
	LCALL  DL1MS
	RET
LCDWRITE:                      ;模块写入子程序
	MOV    A,COM           ;送待发数据命令A
	ANL    A,#0F0H         ;屏蔽低4位
	MOV    HDATA,A         ;将高4位送HDATA单元
	MOV    A,COM           ;取低4位
	SWAP   A               ;高低4位互换
	ANL    A,#0F0H
	MOV    LDATA,A         ;将低4位送LDATA单元
	MOV    A,START         ;取起始字节
	LCALL  SENDBIT         ;发送
	LCALL  DL1MS           ;延时1ms
	MOV    A,HDATA
	LCALL  SENDBIT
	LCALL  DL1MS
	MOV    A,LDATA
	LCALL  SENDBIT
	LCALL  DL1MS
	RET
HZKDIS:                        ;显示汉字子程序
        MOV    R5,#2
        MOV    START,#0F8H     ;写入命令(11111000)
	MOV    COM,#80H        ;设定显示位置
 	LCALL  LCDWRITE
	MOV    DPTR,#TAB       ;指向文字型代码表
	MOV    A,#00H          ;取汉字代码低位
DIS_1:  MOV    R6,#8           ;每行八个汉字
DIS_2:  MOV    START,#0FAH     ;写数据    (11111010)
        CLR    A
        MOVC   A,@A+DPTR
        MOV    COM,A
        CALL   LCDWRITE        ;写入显示模块
        INC    DPTR            ;取汉字代码高位
        CLR    A
        MOVC   A,@A+DPTR
        MOV    COM,A
        CALL   LCDWRITE        ;写入显示模块
        INC    DPTR
        CALL   DL40MS
        DJNZ   R6,DIS_2        ;未显示完则继续
        MOV    START,#0F8H     ; 写入命令(11111000)
        MOV    COM,#90H        ;第二行地址
        CALL   LCDWRITE
        DJNZ   R5,DIS_1
        MOV    R5,#2
        MOV    START,#0F8H     ;写入命令(11111000)
        MOV    COM,#88H        ;第三行地址
        CALL   LCDWRITE
DIS_4:  MOV    R6,#08H
DIS_3:
        MOV    START,#0FAH     ;写数据    (11111010)
        CLR    A
        MOVC   A,@A+DPTR
        MOV    COM,A
        CALL   LCDWRITE        ;写入显示模块
        INC    DPTR            ;取汉字代码高位
        CLR    A
        MOVC   A,@A+DPTR
        MOV    COM,A
        CALL   LCDWRITE        ;写入显示模块
        INC    DPTR
        CALL   DL40MS
        DJNZ   R6,DIS_3        ;未显示完则继续
        MOV    START,#0F8H     ; 写入命令(11111000)
        MOV    COM,#98H        ;第四行地址
        CALL   LCDWRITE
        DJNZ   R5,DIS_4        ;遇“0”结束显示
        RET                    ;写完两行则结束
LCDFILL:                       ;绘图
       MOV    R4,A
       MOV    XPOS,#0
       MOV    YPOS,#0
       MOV    START,#0F8H
       MOV    COM,#30H         ;重新选择基本指令?
       CALL   LCDWRITE
       MOV    COM,#01H         ;清屏
       CALL   LCDWRITE
       MOV    COM,#36H         ;扩充功能设定
       CALL   LCDWRITE

LCD_A1:
       MOV    YPOS,#0
LCD_A2:
       MOV    START,#0F8H
       MOV    A,XPOS           ;设定绘图首地址
       ADD    A,#80H           ; X坐标
       MOV    COM,A
       CALL   LCDWRITE
       MOV    A,YPOS           ;Y坐标
       ADD    A,#80H
       MOV    B,A
       MOV    COM,A
       CALL   LCDWRITE

       MOV    START,#0FAH
       MOV    COM,R4
       CALL   LCDWRITE
       CALL   LCDWRITE
       INC    YPOS
       MOV    A,B
       CJNE   A,#87H,LCD_A2    ;最后一列地址为87H
       INC    XPOS
       MOV    A,XPOS
       CJNE   A,#20H,LCD_A1    ;最后行地址为80H+20H=0A0H
       MOV    XPOS,#0
LCD_A3:MOV    YPOS,#0
LCD_A4:
       MOV    START,#0F8H
       MOV    A,XPOS           ;设定绘图首地址
       ADD    A,#80H           ; X坐标
       MOV    COM,A
       CALL   LCDWRITE
       MOV    A,YPOS           ;Y坐标
       ADD    A,#80H
       MOV    B,A
       MOV    COM,A
       CALL   LCDWRITE

       MOV    START,#0FAH
       MOV    COM,R4
       CALL   LCDWRITE
       CALL   LCDWRITE
       INC    YPOS
       MOV    A,B
       CJNE   A,#8FH,LCD_A4    ;最后一列地址为8FH
       INC    XPOS
       MOV    A,XPOS
       CJNE   A,#20H,LCD_A3    ;最后行地址为80H+20H=0A0H
       RET
SENDBIT:                       ;串行字节数据发送子程序
	MOV     R7,#08H        ;发送8位
SEND_1: RLC     A
        MOV     STD,C          ;数据送数据线
	CLR     SCLK           ;产生同步时钟
	SETB    SCLK
	DJNZ    R7,SEND_1      ;未发送完8位继续
	RET
DL1MS:                         ;延时子程序
        PUSH    00H            ;0.1MS
        PUSH    01H
        PUSH    02H
        MOV     R2,#01H
WA_PA:  MOV     R0,#0FH
WA_PB:  MOV     R1,#0FH
        DJNZ    R1,$
        DJNZ    R0,WA_PB
        DJNZ    R2,WA_PA
        POP     02H
        POP     01H
        POP     00H
        RET
        NOP
        RET
DL40MS:                        ;延时子程序
        PUSH    00H            ;40MS
        PUSH    01H
        PUSH    02H
        MOV     R2,#01H
DL_PA:  MOV     R0,#0FFH
DL_PB:  MOV     R1,#0FFH
        DJNZ    R1,$
        DJNZ    R0,DL_PB
        DJNZ    R2,DL_PA
        POP     02H
        POP     01H
        POP     00H
        RET
        NOP
        NOP
        NOP
        RET
TAB:
        DB     "中文图形    "
        DB     "----太阳人电子--"
        DB     "--液晶显示模块--"
        DB     "电话0731-4167808"
        DB     00H
	END


⌨️ 快捷键说明

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