11-29para.asm

来自「详细介绍了C语言开发DSP嵌入式系统」· 汇编 代码 · 共 144 行

ASM
144
字号
;OCM12864模块测试程序**************************
;完成时间2008.11.28
;制作人:hdzhangx
;**********************************************
D_I	EQU	P2.0				;Data or Instrument Select,H:写数据,L:写指令
R_W	EQU	P2.1				;Write or Read,H:read,L:write
E	EQU	P2.7				;读写使能
CS1	EQU	P2.2				;CS1=H,选择左半屏
CS2	EQU	P2.3
				                ;CS2=H,选择右半屏
RESET	EQU	P3.5				;Lcm reset,低有效

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
                SETB	CS1
		setb	CS2
		MOV	DISP_X,#0B8H
		MOV	DISP_Y,#40H
		MOV	LONG,#0fH
		MOV	WIDE,#02H
                lcall   cusor_DISP               
                ljmp main

;*************************光标大小********************
cusor_DISP:	LCALL	DISP			;显示LONGxWIDE大小的图形,本例为汉字
		MOV	COUNTER1,WIDE
cusor_DISP1:	LCALL	WR_ZB
		MOV	COUNTER2,LONG
cusor_DISP2:	CLR	A
		MOV	A,#0ffh
		LCALL	WR_DATA
                mov     disp_y,#40h
		INC	DPTR
		DJNZ	COUNTER2,cusor_DISP2
		INC	DISP_X
		DJNZ	COUNTER1,cusor_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
		MOV	A,#3FH
		LCALL	WR_INT
		RET
;**********************************************
WR_INT:		LCALL	CHE_BUSY		;WRITE	INSTRUCTION
		CLR	D_I
		CLR	R_W
		MOV	P0,A
		NOP
		SETB	E
		NOP
		NOP
		CLR	E
		RET
;----------------------------------------------
WR_DATA:	LCALL	CHE_BUSY		;WRITE	DATA
		SETB	D_I
		CLR	R_W
		MOV	P0,A
		NOP
		SETB	E
		NOP
		NOP
		CLR	E
		RET
;----------------------------------------------
CHE_BUSY:	CLR	D_I			;CHECK	STATIU
		SETB	R_W
		ANL	p0,#0B0H
		ORL	p0,#80H
		NOP
		SETB	E
		JB	p0.7,$
		JB	p0.4,$
		CLR	E
		RET

;**********************************************
DELAY1:		MOV	COUNTER1,#0FH
DEL11:		MOV	COUNTER2,#0FFH
DEL12:		MOV	COUNTER3,#0FFH
DEL13:		DJNZ	COUNTER3,DEL13
		DJNZ	COUNTER2,DEL12
		DJNZ	COUNTER1,DEL11
		RET
DELAY2:		MOV	COUNTER1,#04H
DEL21:		MOV	COUNTER2,#23H
DEL22:		DJNZ	COUNTER2,DEL22
		DJNZ	COUNTER1,DEL21
		RET

;******************************************************
;cusor1:         SETB	CS1
		;SETB	CS2
		;MOV	DATA1_WR,#00H
		;MOV	DATA2_WR,#00H
		;LCALL	cusor_DISP
		;LCALL	DELAY1

                ;RET

;cusor0:         SETB	CS1
		;SETB	CS2
		;MOV	DATA1_WR,#0ffH
		;MOV	DATA2_WR,#0ffH
		;LCALL	cusor_DISP
		;LCALL	DELAY1

                ;RET

⌨️ 快捷键说明

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