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

📄 12864.asm

📁 这是一个液晶12864的显示程序,经过调试后很好用,只需要修改相应参数即可.
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;OCM12864模块测试程序
RS	EQU	P1.2		;寄存器选择,H:写数据,L:写指令
RW	EQU	P1.3		;读写信号线,H:读,L:写
E	EQU	P1.4		;读写使能端
CS1	EQU	P1.5		;CS1=H,选择左半屏
CS2	EQU	P1.6		;CS2=H,选择右半屏
RESET	EQU	P1.7		;复位,低有效
DB0_7   EQU     P0

DISP_X	EQU	30H
DISP_Y	EQU	31H
DISP_Z	EQU	32H
LONG	EQU	33H
WIDE	EQU	34H
DATA1_WR	EQU	35H
DATA2_WR	EQU	36H
COUNTER1	EQU	37H
COUNTER2	EQU	38H
COUNTER3	EQU	39H
;**********************************************
		ORG	0000H
		AJMP	MAIN
		ORG	0100H
MAIN:		MOV	SP,#5FH
		CLR	RESET               ;复位
		NOP
		NOP
		NOP
		SETB	RESET
		MOV	DISP_Z,#0C0H       ;置0起始行
;****************4行32字显示*********************
;先显示左半屏第一,左半屏第二行, 左半屏第三行,左半屏第四行;
;再显示右半屏第一,右半屏第二行, 右半屏第三行,右半屏第四行;
LGS1:		SETB	CS1                ;左半屏显示
		CLR	CS2                ;右半屏不显示
		MOV	DISP_X,#0B8H       ;置页地址为0页
		MOV	DISP_Y,#40H        ;置列地址为0列
		MOV	LONG,#40H          ;长64点阵
		MOV	WIDE,#02H          ;宽2行,16点阵
		MOV	DPTR,#HZ11         ;查表
		LCALL	CHN_DISP           ;调显示子程序,显示第一行左半
		MOV	DISP_X,#0BAH       ;置页地址为2页
		MOV	DPTR,#HZ21         ;查表
		LCALL	CHN_DISP           ;调显示子程序,显示第二行左半
		MOV	DISP_X,#0BCH       ;置页地址为4页
		MOV	DPTR,#HZ31         ;查表
		LCALL	CHN_DISP           ;调显示子程序,显示第三行左半
		MOV	DISP_X,#0BEH       ;置页地址为6页
		MOV	DPTR,#HZ41         ;查表
		LCALL	CHN_DISP           ;调显示子程序,显示第四行左半

		CLR	CS1                ;左半屏不显示
		SETB	CS2                ;右半屏显示
		MOV	DISP_X,#0B8H       ;置页地址为0页
		MOV	DISP_Y,#40H        ;置列地址为0列
		MOV	LONG,#40H          ;长64点阵
		MOV	WIDE,#02H          ;宽2行,16点阵
		MOV	DPTR,#HZ12         ;查表
		LCALL	CHN_DISP           ;调显示子程序,显示第一行右半
		MOV	DISP_X,#0BAH       ;置页地址为2页
		MOV	DPTR,#HZ22         ;查表
		LCALL	CHN_DISP           ;调显示子程序,显示第二行右半
		MOV	DISP_X,#0BCH       ;置页地址为4页
		MOV	DPTR,#HZ32         ;查表
		LCALL	CHN_DISP           ;调显示子程序,显示第三行右半
		MOV	DISP_X,#0BEH       ;置页地址为6页
		MOV	DPTR,#HZ42         ;查表
		LCALL	CHN_DISP           ;调显示子程序,显示第四行右半

		LCALL	DELAY1             ;2S延时
;----------------------------------------------
;显示整幅图片,先显示左半屏第0页64列,再显示右半屏第0页64列
;循环显示完8页
LGS2:		MOV	DPTR,#PIC1       ;查表
		LCALL	PHO_DISP         ;调图片显示程序
		LCALL	DELAY1
;----------------------------------------------
;----------------------------------------------
;显示整幅图片,先显示左半屏第0页64列,再显示右半屏第0页64列
;循环显示完8页
LGS3:		MOV	DPTR,#PIC2       ;查表
		LCALL	PHO_DISP         ;调图片显示程序
		LCALL	DELAY1
;----------------------------------------------
;显示整幅图片,先显示左半屏第0页64列,再显示右半屏第0页64列
;循环显示完8页
LGS4:		MOV	DPTR,#PIC0       ;查表
		LCALL	PHO_DISP         ;调图片显示程序
		LCALL	DELAY1
;----------------------------------------------
;显示整幅图片,先显示左半屏第0页64列,再显示右半屏第0页64列
;循环显示完8页
LGS5:		MOV	DPTR,#COCK       ;查表
		LCALL	PHO_DISP         ;调图片显示程序
		LCALL	DELAY1
;----------------------------------------------
;显示整幅图片,先显示左半屏第0页64列,再显示右半屏第0页64列
;循环显示完8页
LGS7:		MOV	DPTR,#CAR       ;查表
		LCALL	PHO_DISP         ;调图片显示程序
		LCALL	DELAY1
;----------------------------------------------
;显示整幅图片,先显示左半屏第0页64列,再显示右半屏第0页64列
;循环显示完8页
LGS8:		MOV	DPTR,#PIC3       ;查表
		LCALL	PHO_DISP         ;调图片显示程序
		LCALL	DELAY1
;----------------------------------------------
;----------------------------------------------
		LJMP	LGS1
;**********************************************
WRLATTICE:	MOV	COUNTER1,#08H		;写点阵,共8页
		MOV	DISP_X,#0B8H            ;置页地址为0页
		MOV	DISP_Z,#0C0H            ;置0起始行
		MOV	DISP_Y,#40H             ;置列地址为0列
		LCALL	DISP                    ;调开显示
LATTICE1:	LCALL	WR_ZB                   ;调确定显示位置
		MOV	COUNTER2,#20H           ;写点阵,共32列
LATTICE2:	MOV	A,DATA1_WR              ;送数据
		LCALL	WR_DATA                 ;调写数据子程序,列自动加1
		MOV	A,DATA2_WR              ;送数据
		LCALL	WR_DATA                 ;调写数据子程序,写下一列
		DJNZ	COUNTER2,LATTICE2       ;循环写列
		INC	DISP_X                  ;显示下一行
		DJNZ	COUNTER1,LATTICE1       ;循环写页
		RET
;----------------------------------------------
PHO_DISP:	MOV	COUNTER1,#08H		;显示高度8页
		MOV	DISP_X,#0B8H            ;置页地址为0页
		MOV	DISP_Z,#0C0H            ;置0起始行
		MOV	DISP_Y,#40H             ;置列地址为0列
PHO_DISP1:	SETB	CS1                     ;左半屏显示
		CLR	CS2                     ;右半屏不显示
		LCALL	DISP                    ;调开显示
		LCALL	WR_ZB                   ;调确定显示位置
		MOV	COUNTER2,#40H           ;显示宽度64点距
PHO_DISP11:	CLR	A
		MOVC	A,@A+DPTR
		LCALL	WR_DATA
		INC	DPTR
		DJNZ	COUNTER2,PHO_DISP11     ;显示64列
PHO_DISP2:	CLR	CS1                     ;左半屏不显示
		SETB	CS2                     ;右半屏显示
		LCALL	DISP                    ;调开显示
		LCALL	WR_ZB                   ;调确定显示位置
		MOV	COUNTER2,#40H           ;显示宽度64点距
PHO_DISP21:	CLR	A
		MOVC	A,@A+DPTR
		LCALL	WR_DATA
		INC	DPTR
		DJNZ	COUNTER2,PHO_DISP21     ;显示64列
		INC	DISP_X                  ;显示下一页
		DJNZ	COUNTER1,PHO_DISP1      ;显示8页
		RET
;----------------------------------------------
CHN_DISP:	LCALL	DISP			;显示LONGxWIDE大小的图形
		MOV	COUNTER1,WIDE
CHN_DISP1:	LCALL	WR_ZB
		MOV	COUNTER2,LONG
CHN_DISP2:	CLR	A
		MOVC	A,@A+DPTR
		LCALL	WR_DATA
		INC	DPTR
		DJNZ	COUNTER2,CHN_DISP2      ;显示长度
		INC	DISP_X                  ;显示下一页
		DJNZ	COUNTER1,CHN_DISP1      ;显示宽度
		RET
;----------------------------------------------
WR_ZB:		MOV	A,DISP_X               ;确定显示位置
		LCALL	WR_INT
		MOV	A,DISP_Z
		LCALL	WR_INT
		MOV	A,DISP_Y
		LCALL	WR_INT
		RET
;----------------------------------------------
DISP:		MOV	A,#3EH                  ;关显示
		LCALL	WR_INT                  ;调写入命令子程序

⌨️ 快捷键说明

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