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

📄 ocmc(并).asm

📁 常用的液晶屏LCM12864的演示程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;MODUL	OCM2X8C-2
;RS=P3.1
;RW=P3.3
;E=P3.0
;PSB=P3.4
;RESET=P3.5
;DATA/IO=P1
;显示汉字或图形方法步骤请参照说明书
;E	EQU	P3.0			;选择I/O口定义,E为使能端
;RS	EQU	P3.1			;选择I/O口定义,RS为指令/数据选择端
;RW	EQU	P3.3
;PSB	EQU	P3.5
;RESET	EQU	P3.4

RS	EQU	P0.0
RW	EQU	P0.1
E	EQU	P0.2
PSB	EQU	P0.3
RESET	EQU	P0.4

FIRST_COL 	EQU	30H		;定义字符/汉字显示起始行
FIRST_ROW	EQU	31H		;定义字符/汉字显示起始列
WORD_WID	EQU	32H		;定义字符/汉字显示长度
WORD_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
        LJMP  START


	org 	0100h
START:	mov	sp,#60h
	MOV	G_WID,#00H
	MOV	G_ROW,#00H
	setb	RESET			
	setb	PSB
	CLR	RW
QIU1:	LCALL INITIL			;调用系统初始化程序
        MOV A, #0CH			;开显示,关游标
        LCALL INPUT
        LCALL DELAY01
  	MOV A, #01H			;DDRAM清零,DDRAM地址计数器到00H
        LCALL INPUT
        LCALL DELAY01
;-----------
;WORD DISPLAY,显示汉字子程序
;----------
  
	MOV FIRST_ADD,#00H  		;设定字符/汉字显示起始位置为第一个显示单元                        
        MOV FIRST_LIN,#01H		;设定字符/汉字显示起始位置为第一行
        MOV DPTR, #TAB			;需要显示汉字机内码数据表
        MOV word_WID,#08H		;每行显示汉字个数
        MOV word_LIN,#02H		;显示行数
	MOV START_ADD,#00H		;清首个显示地址缓存单元
	LCALL	WORD_DISP		;调用汉字显示子程序
	LCALL DELAY
        LCALL DELAY
        LCALL DELAY
        MOV A, #01H
        LCALL INPUT
        LCALL DELAY01
 
	MOV FIRST_ADD,#00H                          
        MOV FIRST_LIN,#01H
        MOV DPTR, #TAB1
        MOV	word_WID,#08H
	MOV	word_LIN,#02H
	MOV	START_ADD,#00H
	LCALL	WORD_DISP
	LCALL DELAY
        LCALL DELAY
        LCALL DELAY
        MOV A, #01H
        LCALL INPUT
        LCALL DELAY01

	MOV FIRST_ADD,#00H                          
        MOV FIRST_LIN,#01H
        MOV DPTR, #TAB2
        MOV	word_WID,#08H
	MOV	word_LIN,#02H
	MOV	START_ADD,#00H
	LCALL	WORD_DISP
	LCALL DELAY
        LCALL DELAY
        LCALL DELAY
        MOV A, #01H
        LCALL INPUT
        LCALL DELAY01
        LCALL DELAY 

;---------------------------
;GRAPHIC DISPLAY
;图形显示
;---------------------------
GRAPHIC_A:
        MOV G_ROW, #80H			;定义列
        MOV G_COLUMN, #80H		;定义行
        MOV DPTR, #GRAPHICTAB		;设定图形显示数据区地址
        LCALL	GRAPHIC_DISP		;调用图形显示子程序
	LCALL DELAY
        LCALL DELAY
        LCALL DELAY

        MOV G_ROW, #80H
        MOV G_COLUMN, #80H
        MOV DPTR, #GRAPHICTAB2
        LCALL	GRAPHIC_DISP
	LCALL DELAY
        LCALL DELAY
        LCALL DELAY
;-----------------**************        
QIU:	LJMP	QIU1 
;----------------- 
;汉字显示子程序
;---------------       
WORD_DISP:
	MOV R1,WORD_WID
WORD10:	LCALL	DEADD				;调用调整地址单元子程序
	MOV A, START_ADD			;设定DDRAM地址,显示位置地址
        LCALL INPUT
WORD11: CLR A				;因为要连续输入机内码高位(区码)、低位(位码)
        MOVC A, @A+DPTR			;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书
        LCALL DISPL			;DATA	INPUT
        INC DPTR			;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替
        CLR A
        MOVC A, @A+DPTR
        LCALL DISPL			;DATA	INPUT
;        LCALL DELAY01
        INC DPTR
        DJNZ	R1,WORD11
        MOV	R1,WORD_WID		;调整显示长度
        INC	FIRST_LIN		;跳到下一行
        DJNZ	WORD_LIN,WORD10	
        RET
;-------------------
;图形显示子程序
;该子程序可简化为一个函数调用
;-----------------
GRAPHIC_DISP:
	LCALL CLEAR_GRAPHIC		;清除图形显示RAM单元(GDRAM)
	MOV G_ROW, #80H			;设定图形显示起始行单元
        MOV G_COLUMN, #80H		;设定图形显示起始列单元
GRA_DISP:
        MOV A, #34H			;选择扩充指令集关闭图形显示
        				;该指令在扩充指令集
        LCALL INPUT
        LCALL DELAY01

        MOV A, G_COLUMN			;输入图形显示起始地址
        LCALL INPUT
        MOV A, G_ROW
        LCALL INPUT
        MOV A, #30H			;重新选择基本指令集
        LCALL INPUT

        CLR A				;输入显示数据(横向高8位数据)
        MOVC A, @A+DPTR
        LCALL DISPL
        INC DPTR
        CLR A				;输入显示数据(横向低8位数据)
        MOVC A, @A+DPTR
        LCALL DISPL
        INC DPTR
        INC G_ROW			;列地址加一
        MOV A, G_ROW
        CJNE A, #88H, GRA_DISP		;最后一列地址为88H
        MOV G_ROW, #80H
        INC G_COLUMN			;行地址加一
        MOV A, G_COLUMN
        CJNE A, #0A0H, GRA_DISP		;最后行地址为0A0H
         MOV A, #36H			;打开图形显示
         LCALL INPUT			;
         LCALL DELAY01			
         RET
        
        
INITIL: LCALL DELAY			;延时
					;首先选择基本指令集
        MOV A, #30H			;30---基本指令操作
        LCALL  INPUT			
        LCALL  DELAY01


        MOV A, #01H			;指令#01H为:清除屏幕文字,把地址指针指向00H单元
        LCALL  INPUT			;
        LCALL  DELAY01

        MOV A, #06H			;指定在资料写入或读取时,设定游标的移动方向及指定显示的移位
        LCALL  INPUT
        LCALL  DELAY01
        RET
;-----------------
;SEARCH ADDRESS
;目的是为了转换地址单元为DDRAM地址单元,以方便
;定义显示位置
;汉字显示DDRAM位置为:第一行:80H----87H
;		 	第二行:90H----97H	
;-----------------        
DEADD:  PUSH	DPH			;地址转换子程序
	PUSH	DPL
	PUSH	A
	MOV	DPTR,#LINE_ADD		;LINE-ADD为地址表指针
	MOV	A,FIRST_LIN
	MOVC	A,@A+DPTR

⌨️ 快捷键说明

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