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

📄 lcd.asm

📁 T6963C的控制及初始化指令
💻 ASM
字号:
DAT1    EQU     30H             ;第一参数单元
DAT2    EQU     31H             ;第二参数/数据单元
COM     EQU     32H             ;指令代码单元
C_ADD   EQU     8100H           ;指令通道地址
D_ADD   EQU     8000H           ;数据通道地址
;直接访问方式驱动子程序
;读状态字子程序
LCDRDST:MOV     DPTR,#C_ADD     ;设置指令通道地址
        MOVX    A,@DPTR
        RET
;判状态位STA1,STA0子程序
LCDST01:LCALL   LCDRDST
        JNB     ACC.0,LCDST01
        JNB     ACC.1,LCDST01
        RET
;判状态位STA2子程序
LCDSTA2:LCALL   LCDRDST
        JNB     ACC.2,LCDSTA2
        RET
;判状态位STA3子程序
LCDSTA3:LCALL   LCDRDST
        JNB     ACC.3,LCDSTA3
        RET
;判状态位STA6子程序
LCDSTA6:LCALL   LCDRDST
        JB      ACC.6,LCDSERR
        RET
LCDSERR:LJMP    LCDSTA6         ;出错处理程序
;写指令和写数据子程序
LCDPRL1:LCALL   LCDST01         ;双字节参数指令写入入口
        MOV     A,DAT1          ;取第一参数单元数据
        LCALL   LCDPR13         ;写入参数
LCDPR11:LCALL   LCDST01         ;单字节 参数指令写入入口
        MOV     A,DAT2          ;取第二参数单元数据
        LCALL   LCDPR13         ;写入参数
LCDPR12:LCALL   LCDST01         ;无参数指令写入入口
        MOV     A,COM           ;取指令代码单元数据
        LJMP    LCDPR14         ;写入指令代码
LCDPR13:MOV     DPTR,#D_ADD     ;设置数据通道地址/数据写入入口
LCDPR14:MOVX    @DPTR,A         ;写入操作
        RET
;读数据子程序
LCDPRL2:LCALL   LCDST01         ;判状态位
        MOV     DPTR,#D_ADD     ;设置数据通道地址
        MOVX    A,@DPTR         ;读数据操作
        MOV     DAT2,A          ;数据存入第二参数/数据单元
        RET
;子程序
;读状态字子程序
LCDRDST:MOV 	P1,#0FFH 	;P1口置1
	SETB 	CD 		;CD=1
	CLR 	RD 		;RD=0
	MOV 	A,P1 		;读操作
	SETB 	RD 		;RD=1
	RET
;写指令和写数据子程序
LCDPRL1:LCALL 	LCDST01		;双字节 参数指令写入入口
	MOV 	A,DAT1		;取第一参数单元数据
	LCALL 	LCDPR13		;写入参数
LCDPR11:LCALL 	LCDST01		;单字节 参数指令写入入口
	MOV 	A,DAT2		;取第二参数单元数据
	LCALL 	LCDPR13		;写入参数
LCDPR12:LCALL 	LCDST01		;无参数指令写入入口
	MOV 	A,COM		;取指令代码单元数据
	LJMP 	LCDPR14		;写入指令代码
LCDPR13:CLR 	CD 		;数据写入入口
LCDPR14:MOV 	P1,A 		;设置数据
	CLR 	WR 		;WR=0
	SETB 	WR 		;WR=1
	RET
;读数据子程序
LCDPRL2:LCALL 	LCDST01 		;判状态位
	CLR 	CD 		;C/D=0
	MOV 	P1,#0FFH 	;P1 口置1
	CLR 	RD 		;RD=0
	MOV 	A,P1 		;读取数据
	SETB 	RD 		; RD=1
	MOV 	DAT2,A 		;数据存入第二参数/数据单元
	RET
;初始化设置主要是对显示区域和显示方式的设置.
LCDLINT:MOV     DAT1,#00H       ;设置文本显示区域首地址
        MOV     DAT2,#00H
        MOV     COM,#40H
        LCALL   LCDPRL1
        MOV     DAT1,#20H       ;设置文本显示区域宽度
        MOV     DAT2,#00H       ;即一行显示所占字节数
        MOV     COM,#41H
        LCALL   LCDPRL1
        MOV     DAT1,#00H       ;设置图形显示区域首地址
        MOV     DAT2,#08H       ;或为文本属性区域首地址
        MOV     COM,#42H
        LCALL   LCDPRL1
        MOV     DAT1,#20H       ;设置图形显示区域宽度
        MOV     DAT2,00H        ;或为文本属性区域宽度
        MOV     COM,#43H        ;即一行显示所占字节数
        LCALL   LCDPRL1
        MOV     COM,#0A7H       ;光标形状设置
        LCALL   LCDPR12
        MOV     COM,#80H        ;显示方式设置逻辑或合成
        LCALL   LCDPR12
        MOV     COM,#9CH        ;显示开关设置开文本和图形显示
        LCALL   LCDPR12
        RET
;对显示存储器完全清零,不分显示区域性质
LCDCLER:MOV     DAT1,#00H       ;设置显示存储器首地址
        MOV     DAT2,#00H
        MOV     COM,#24H
        LCALL   LCDPRL1
        MOV     R3,#00H         ;设置循环量
        MOV     R4,#20H
        MOV     COM,#0B0H
        LCALL   LCDPR12
LCDCLR1:LCALL   LCDSTA3         ;判状态位 STA2
        MOV     A,#00H          ;置数据0
        LCALL   LCDPR13         ;写入数据
        DJNZ    R3,LCDCLR1      ;循环
        DJNZ    R4,LCDCLR1
        MOV     COM,#0B2H       ;设置自动写结束指令
        LCALL   LCDPR12
        RET
;建立CGRAM子程序(地址设定在代码位80H起处)
COUNT   EQU     34H             ;西文字符个数
LCDGRAM:MOV     DAT1,#03H       ;设置CGRAM 偏置地址
        MOV     DAT2,#00H
        MOV     COM,#22H
        LCALL   LCDPRL1
        MOV     DAT1,#00H       ;设置存储器地址指针
        MOV     DAT2,#1CH
        MOV     COM,#24H
        LCALL   LCDPRL1
        MOV     COM,#0B0H       ;设置自动写方式
        LCALL   LCDPR12
        MOV     A,COUNT         ;计算写入的字节数
        MOV     B,#08H
        MUL     AB
        MOV     COUNT,A         ;计算器低8 位数据
        INC     B               ;计算器高8 位数据
        MOV     DPTR,#LCDCTAB     ;取字符库首地址
        PUSH    DPH             ;存字符库指针
        PUSH    DPL
LCDRAM1:LCALL   LCDSTA3         ;判自动写状态位
        POP     DPL             ;取字符库指针
        POP     DPH
        CLR     A
        MOVC    A,@A+DPTR       ;取数据
        INC     DPTR            ;字符库指针加一
        PUSH    DPH             ;存字符库指针
        PUSH    DPL
        LCALL   LCDPR13         ;写入数据
        DJNZ    COUNT,LCDRAM1   ;计数循环
        DJNZ    B,LCDRAM1
        MOV     COM,#0B2H       ;写入结束自动写指令
        LCALL   LCDPR12
        POP     ACC             ;修正栈指针
        POP     ACC
        RET
;建立CGRAM 的步骤
;1. 在程序区内建立汉字字模表CGTAB
;2. 汉字代码定义(以液=80H为例)
;3. 写入一个汉字的字模数据,设置COUNT值位4
;4. 调用CGRAM 子程序
        MOV     COUNT,#08H
        LCALL   LCDGRAM
        SJMP    $
LCDCTAB:DB 000H,040H,037H,010H,081H,061H,022H,00AH; 液=80H
        DB 016H,02BH,0E2H,022H,022H,022H,023H,022H
        DB 080H,044H,0FEH,020H,020H,03CH,044H,064H
        DB 098H,048H,050H,020H,050H,08EH,004H,000H
;汉字字模排列格式为1~16 字节为汉字作半部分自上而下排列的字模数据,第
;17~32字节为汉字右半部分自上而下排列的字模数据。
;示例四:汉字写入子程序(文本方式)
;在文本方式下显示汉字,首先要建立汉字CGRAM,要定义汉字代码。一个汉字
;需4 个代码。
        CODE    EQU     33H     ;汉字字符代码
        O_Y     EQU     35H     ;Y坐标(0_15)
        O_X     EQU     36H     ;X坐标(0-29)
LCDLWRI:MOV     A,O_Y           ;计算显示RAM 地址
        MOV     B,#20H
        MUL     AB
        ADD     A,O_X
        MOV     O_X,A
        MOV     DAT1,A
        MOV     A,B
        ADDC    A,#00H          ;文本显示区首地址为0000H
        MOV     O_Y,A
        MOV     DAT2,A          ;设置显示RAM 地址
        MOV     COM,#24H
        LCALL   LCDPRL1
        MOV     A,CODE          ;取汉字代码
        MOV     DAT2,A          ;写入左上半部汉字代码
        MOV     COM,#0C0H
        LCALL   LCDPR11
        MOV     A,CODE
        ADD     A,#02H
        MOV     DAT2,A          ;写入右上半部汉字代码
        LCALL   LCDPR11
        MOV     A,#20H          ;显示RAM 地址修正
        ADD     A,O_X
        MOV     DAT1,A
        CLR     A
        ADDC    A,O_Y
        MOV     DAT2,A
        MOV     COM,#24H        ;设置显示RAM 地址
        LCALL   LCDPRL1
        MOV     A,CODE
        INC     A
        MOV     DAT2,A          ;写入左下半部汉字代码
        MOV     COM,#0C0H
        LCALL   LCDPR11
        MOV     A, CODE
        ADD     A,#03H
        MOV     DAT2,A          ;写入右下半部汉字代码
        LCALL   LCDPR11
        RET
;文本方式下汉字显示演示程序:
        MOV     CODE,#80H
        MOV     O_X,#03H
        MOV     O_Y,#02H
        LCALL   LCDLWRI
        MOV     CODE,#84H
        MOV     O_X,#07H
        MOV     O_Y,#02H
        LCALL   LCDLWRI

⌨️ 快捷键说明

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