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

📄 12864zk并.asm

📁 SMG1601ALCD显示器的资料和汇编接口程序源码-SMG1601ALCD display information source and interface programme
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;                     SMG12864ZK 并口(8位)接口程序

;****************************************************************************
;连线图: *LCM---8031* *LCM---8031* *LCM------------8031* *LCM----------8031 *
;        *DB0---P1.0* *DB4---P1.4* *RS-------------P3.1* *PSB----------P3.4 *
;        *DB1---P1.1* *DB5---P1.5* *RW-------------P3.3*                    *
;        *DB2---P1.2* *DB6---P1.6* *E--------------P3.0                     *
;        *DB3---P1.3* *DB7---P1.7* *RESET----------P3.5?       (详见说明书)*
;注:8031的晶振频率为12MHz                                                   *
;****************************************************************************
RS     equ   P3.1                       ;定义数据与指令线
RW     equ   P3.3                       ;定义读写线
E      equ   P3.0                       ;定义使能控制线
PSB    equ   P3.4                       ;定义串并口选择线
RESET  equ   P3.5                       ;定义复位线
XPOS   EQU   20H                       	;定义列地址
YPOS   EQU   21H                        ;定义行地址
FIRST_COL    EQU	30H		;定义字符/汉字显示起始行
FIRST_ROW    EQU	31H		;定义字符/汉字显示起始列
HZK_WID	     EQU	32H		;定义字符/汉字显示长度
HZK_LIN	     EQU	33H		;定义字符/汉字显示行数
FIRST_ADD	EQU	34H 		;定义字符/汉字显示起始位置
START_ADD	EQU	35H       	;起始位置缓存单元
FIRST_LIN	EQU	36H		;起始行位置缓存单元
G_COLUMN	EQU	37H		;定义图形显示起始行
G_ROW		EQU	38H		;定义图形显示起始列
G_WID		EQU	39H		;定义图形显示宽度
        ORG     0000H
START:	mov	SP,#60h
        CLR     RESET
        NOP
	SETB	RESET
	SETB	PSB                     ;PSB=1  并口
	CLR	RW
LCD:
        LCALL   LCDRESET		;调用系统初始化程序
        CALL    HZKLIB                  ;汉字显示
        CALL    DELAY                   ;延时
        CALL    DELAY
        CALL     DELAY  
        MOV     A,#01H                  ;指令#01H为:清除屏幕文字,把地址指针指向00H单元
        CALL    LCDWC
        MOV     DPTR,#BITMAP            ;显示图形 BITMAP
        CALL    LCDDIS
        CALL    DELAY
        CALL    DELAY
   ;     MOV     A,#55H
   ;     CALL    LCDFILL                 ;全屏显示隔列相间的线条
        CALL    DELAY
        CALL    DELAY
        CALL    CLEAR                   ;清屏
        JMP     0000H


HZKLIB:  ;显示汉字子程序
     	MOV   FIRST_ADD,#00H  		;设定字符/汉字显示起始位置为第一个显示单元
        MOV   FIRST_LIN,#01H		;设定字符/汉字显示起始位置为第一行
        MOV   DPTR, #TAB 		;需要显示汉字机内码数据表
        MOV   HZK_WID,#08H		;每行显示汉字个数
        MOV   HZK_LIN,#04H		;显示行数
        MOV   START_ADD,#00H       	;清首个显示地址缓存单元
        LCALL	HZK_DISP             	;调用汉字显示子程序
        RET


LCDDIS:  ;图形显示子程序,该子程序可简化为一个函数调用
       MOV    XPOS,#0                    ;设定图形显示起始行单元
       MOV    YPOS,#0
DIS_A1:MOV    XPOS,#0
DIS_A2:
       MOV    A,#36H                     ;选择扩充指令集关闭图形显示
        		                 ; 该指令在扩充指令集
       CALL   LCDWC
       MOV    A,YPOS
       ADD    A,#80H                     ;输入图形显示起始地址
       CALL   LCDWC
       MOV    A,XPOS
       ADD    A,#80H
       CALL   LCDWC
       MOV    B,A
       MOV    A,#30H                     ;重新选择基本指令集
       CALL   LCDWC
       CLR    A
       MOVC   A,@A+DPTR                  ;输入显示数据(横向高8位数据)
       CALL   LCDWD
       INC    DPTR
       CLR    A
       MOVC   A,@A+DPTR                  ;输入显示数据(横向低8位数据)
       CALL   LCDWD
       INC    XPOS                       ;列地址加一
       INC    DPTR
       MOV    A,B
       CJNE   A,#87H,DIS_A2              ;最后一列地址为87H
       INC    YPOS                       ;行地址加一
       MOV    A,YPOS
       CJNE   A,#20H,DIS_A1              ;最后行地址为80H+20H=0A0H
       MOV    YPOS,#0
DIS_A3:MOV    XPOS,#0                    ;下半部分的显示
DIS_A4:
       MOV    A,#36H                     ;选择扩充指令集关闭图形显示
       CALL   LCDWC
       MOV    A,YPOS
       ADD    A,#80H
       CALL   LCDWC
       MOV    A,XPOS
       ADD    A,#88H                     ;下部分 列地址首址
       CALL   LCDWC
       MOV    B,A
       MOV    A,#30H                     ;重新选择基本指令集
       CALL   LCDWC
       CLR    A
       MOVC   A,@A+DPTR                  ;输入显示数据(横向高8位数据)
       CALL   LCDWD
       INC    DPTR
       CLR    A
       MOVC   A,@A+DPTR                  ;输入显示数据(横向低8位数据)
       CALL   LCDWD
       INC    DPTR
       INC    XPOS                       ;列地址加一
       MOV    A,B
       CJNE   A,#8FH,DIS_A4              ;最后一列地址为8FH
       INC    YPOS                       ;行地址加一
       MOV    A,YPOS
       CJNE   A,#20H,DIS_A3              ;最后行地址为80H+20H=0A0H
       RET


CLEAR:    ;清除图形显示CGRAM
       MOV   A,#00
       CALL  LCDFILL
       RET

LCDFILL:
       MOV    R4,A
       MOV    XPOS,#0
       MOV    YPOS,#0
LCD_A1:MOV    YPOS,#0
LCD_A2:
       MOV    A,#36H                   ;选择扩充指令集关闭图形显示
       CALL   LCDWC
       ;CALL   LCDPOS
       MOV    A,XPOS
       ADD    A,#80H
       CALL   LCDWC
       MOV    A,YPOS
       ADD    A,#80H
       CALL   LCDWC
       MOV    B,A
       MOV    A,#30H                   ;重新选择基本指令集
       CALL   LCDWC
       MOV    A,R4
       CALL   LCDWD
       CALL   LCDWD
       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    A,#36H
       CALL   LCDWC
       MOV    A,XPOS
       ADD    A,#80H
       CALL   LCDWC
       MOV    A,YPOS
       ADD    A,#88H
       CALL   LCDWC
       MOV    B,A
       MOV    A,#30H                    ;重新选择基本指令集
       CALL   LCDWC
       MOV    A,R4
       CALL   LCDWD
       CALL   LCDWD
       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


HZK_DISP:   ;汉字显示子程序
	  MOV R1,HZK_WID
HZK10:	  LCALL	  LCDPOS		 ;调用调整地址单元子程序
	  MOV A, START_ADD		 ;设定DDRAM地址,显示位置地址
          LCALL LCDWC
HZK11:   CLR A				 ;因为要连续输入机内码高位(区码)、低位(位码)
          MOVC A, @A+DPTR		 ;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书
          LCALL LCDWD			 ;DATA	LCDWC
          INC DPTR			 ;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替
          CLR A
          MOVC A, @A+DPTR
          LCALL LCDWD
          LCALL DELAY03
          INC DPTR
          DJNZ	R1,HZK11
          MOV	R1,HZK_WID		;调整显示长度
          INC	FIRST_LIN          	;跳到下一行
          DJNZ	HZK_LIN,HZK10
          RET
LCDRESET:

⌨️ 快捷键说明

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