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

📄 touch8x10d(int).asm

📁 OCMJ的代码 具体是关于金鹏电子的液晶屏的使用方法和介绍。
💻 ASM
字号:
;=============================================================
;OCMJ8X10D触摸屏中断程序
;当触摸事件发生时模块产生中断经INT脚输出信号触发MCU的外部中断0
;=============================================================
BUSY	EQU	P3.0
INT	EQU	P3.2					;接MCU的INT0
CS1	EQU	P3.1					;L有效
CS2	EQU	P3.3					;H有效(可直接上拉)
RS	EQU	P3.4					;L:存取缓存器,H:存取DDRAM
WRB	EQU	P3.5					;L有效
RDB	EQU	P3.6					;L有效
RST	EQU	P3.7					;L有效(可悬空)

REGNAME		EQU	30H
REGDATA		EQU	31H
REGDATA1	EQU	32H
LCM_X		EQU	33H
LCM_Y		EQU	34H
COUNT1		EQU	35H
COUNT2		EQU	36H

TOUCH_XH	EQU	40H				;触摸屏地址X高2位
TOUCH_XL	EQU	41H				;触摸屏地址X低8位
TOUCH_XH1	EQU	42H				;触摸屏地址X高8位
TOUCH_XL1	EQU	43H				;触摸屏地址X低2位
TOUCH_YH	EQU	44H				;触摸屏地址Y高2位
TOUCH_YL	EQU	45H				;触摸屏地址Y低8位
TOUCH_YH1	EQU	46H				;触摸屏地址Y高8位
TOUCH_YL1	EQU	47H				;触摸屏地址Y低2位

HEX_H		EQU	48H
HEX_L		EQU	49H
;****************************************************
		ORG	0000H
		AJMP	MAIN
		ORG	0003H
		AJMP	INT_0
		ORG	0100H
MAIN:		NOP
		MOV	SP,#5FH
		LCALL	DELAY2				;延时240MS等待上电复位
		MOV	P3,#0FFH
		LCALL	LCM_INIT
		LCALL	LCM_CLR

		MOV	REGNAME,#00H
		MOV	REGDATA,#0CDH
		LCALL	REG_WRITE
		MOV	LCM_X,#00H
		MOV	LCM_Y,#00H
		MOV	DPTR,#TAB1
		MOV	COUNT1,#90
		LCALL	CHRT_DISP
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		MOV	REGNAME,#0A0H
		LCALL	REG_READ
		ORL	REGDATA1,#04H			;致能触摸中断
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE
		SETB	IT0
		SETB	EA
		SETB	EX0
		SJMP	$
;****************************************************
INT_0:		PUSH	ACC

		MOV	REGNAME,#0A0H
		LCALL	REG_READ
		JNB	ACC.6,INT_0_END

		MOV	REGNAME,#0A0H
		LCALL	REG_READ
		ANL	REGDATA1,#0FBH			;禁能触摸中断
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE

		LCALL	GET_TOUCH

INT_0_END:	MOV	REGNAME,#0A0H
		LCALL	REG_READ
		ORL	REGDATA1,#04H			;致能触摸中断
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE

		POP	ACC
		RETI
;****************************************************
GET_TOUCH:	MOV	REGNAME,#0C0H
		MOV	REGDATA,#0C0H			;TOUCH ON
		LCALL	REG_WRITE

		LCALL	DELAY1

		LCALL	TOUCH_TEST
		JNB	ACC.6,GET_TOUCH2

		MOV	REGNAME,#0C1H
GET_TOUCH1:	LCALL	REG_READ
		JNB	ACC.7,GET_TOUCH1

		LCALL	TOUCH_Y
		LCALL	TOUCH_X

		MOV	REGNAME,#10H
		LCALL	REG_READ
		ORL	REGDATA1,#10H
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE

		MOV	LCM_X,#05H
		MOV	LCM_Y,#20H
		MOV	DPTR,#TAB3
		MOV	COUNT1,#10
		LCALL	CHRT_DISP

		MOV	LCM_X,#09H
		MOV	LCM_Y,#30H
		MOV	HEX_H,TOUCH_XH
		MOV	HEX_L,TOUCH_XL
		LCALL	TOUCH_DISP

		MOV	LCM_X,#09H
		MOV	LCM_Y,#40H
		MOV	HEX_H,TOUCH_YH
		MOV	HEX_L,TOUCH_YL
		LCALL	TOUCH_DISP

		MOV	REGNAME,#10H
		LCALL	REG_READ
		ANL	REGDATA1,#0EFH
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE

		LCALL	DELAY2

GET_TOUCH2:	MOV	REGNAME,#0C0H
		MOV	REGDATA,#00H			;TOUCH OFF
		LCALL	REG_WRITE

		MOV	LCM_X,#05H
		MOV	LCM_Y,#20H
		MOV	DPTR,#TAB2
		MOV	COUNT1,#10
		LCALL	CHRT_DISP
		RET
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
TOUCH_Y:	MOV	REGNAME,#0C0H
		LCALL	REG_READ

		ANL	REGDATA1,#0FCH
		ORL	REGDATA1,#0CH
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE

		LCALL	DELAY1

		MOV	REGNAME,#0C9H			;TPYR
		LCALL	REG_READ
		MOV	TOUCH_YH1,REGDATA1

		MOV	REGNAME,#0CAH			;TPZR
		LCALL	REG_READ
		RR	A
		RR	A
		ANL	A,#03H
		MOV	TOUCH_YL1,A

		MOV	A,TOUCH_YH1
		RL	A
		RL	A
		MOV	TOUCH_YH,A
		ANL	TOUCH_YH,#03H
		ANL	A,#0FCH
		ORL	A,TOUCH_YL1
		MOV	TOUCH_YL,A
		RET
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
TOUCH_X:	MOV	REGNAME,#0C0H
		LCALL	REG_READ

		ANL	REGDATA1,#0F3H
		ORL	REGDATA1,#03H
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE

		LCALL	DELAY1

		MOV	REGNAME,#0C8H			;TPXR
		LCALL	REG_READ
		MOV	TOUCH_XH1,REGDATA1

		MOV	REGNAME,#0CAH			;TPZR
		LCALL	REG_READ
		RL	A
		RL	A
		ANL	A,#03H
		MOV	TOUCH_XL1,A

		MOV	A,TOUCH_XH1
		RL	A
		RL	A
		MOV	TOUCH_XH,A
		ANL	TOUCH_XH,#03H
		ANL	A,#0FCH
		ORL	A,TOUCH_XL1
		MOV	TOUCH_XL,A
		RET
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
TOUCH_TEST:	MOV	REGNAME,#0C0H
		LCALL	REG_READ
		ANL	REGDATA1,#0F8H
		ORL	REGDATA1,#08H
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE

		LCALL	DELAY1

		MOV	REGNAME,#0C1H
		LCALL	REG_READ

		MOV	REGNAME,#0C0H
		ANL	REGDATA,#0F7H
		LCALL	REG_WRITE

		MOV	A,REGDATA1
		RET
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
TOUCH_DISP:	LCALL	WR_ZB
		ORL	HEX_H,#30H
		MOV	A,HEX_H
		LCALL	DDR_WRITE

		MOV	A,HEX_L
		SWAP	A
		LCALL	TOUCH_DISP1

		MOV	A,HEX_L
		LCALL	TOUCH_DISP1
		RET

TOUCH_DISP1:	ANL	A,#0FH
		MOV	B,A
		CLR	C
		SUBB	A,#0AH
		MOV	A,B
		JC	TOUCH_DISP11

		ADD	A,#37H
		AJMP	TOUCH_DISP12
TOUCH_DISP11:	ADD	A,#30H
TOUCH_DISP12:	LCALL	DDR_WRITE
		RET
;****************************************************
LCM_INIT:	MOV	COUNT1,#00H			;初始化
		MOV	COUNT2,#27H
LCM_INIT1:	MOV	DPTR,#INITTAB1
		MOV	A,COUNT1
		MOVC	A,@A+DPTR
		MOV	REGNAME,A
		MOV	DPTR,#INITTAB2
		MOV	A,COUNT1
		MOVC	A,@A+DPTR
		MOV	REGDATA,A
		LCALL	REG_WRITE
		INC	COUNT1
		DJNZ	COUNT2,LCM_INIT1
		RET
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
LCM_CLR:	MOV	REGNAME,#0E0H			;清屏
		MOV	REGDATA,#00H
		LCALL	REG_WRITE
		MOV	REGNAME,#0F0H
		LCALL	REG_READ
		MOV	A,REGDATA1
		ORL	A,#08H
		MOV	REGDATA,A
		MOV	REGNAME,#0F0H
		LCALL	REG_WRITE

		MOV	REGNAME,#00H
		MOV	REGDATA,#0C5H
		LCALL	REG_WRITE
		MOV	LCM_X,#00H
		MOV	LCM_Y,#00H
		LCALL	WR_ZB
		MOV	A,#00H
		LCALL	DDR_WRITE
		RET
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CHRT_DISP:	LCALL	WR_ZB				;传送COUNT1个数据到DDRAM
CHRT_DISP1:	CLR	A
		MOVC	A,@A+DPTR
		LCALL	DDR_WRITE
		INC	DPTR
		DJNZ	COUNT1,CHRT_DISP1
		RET
;****************************************************
WR_ZB:		MOV	REGNAME,#60H			;定坐标
		MOV	REGDATA,LCM_X
		LCALL	REG_WRITE
		MOV	REGNAME,#70H
		MOV	REGDATA,LCM_Y
		LCALL	REG_WRITE
		RET
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
REG_WRITE:	MOV	A,REGNAME			;写资料到缓存器
		LCALL	REG_WR
		MOV	A,REGDATA
		LCALL	REG_WR
		RET

REG_WR:		MOV	P1,A
		CLR	CS1
		SETB	RDB
		CLR	RS
		CLR	WRB
		NOP
		NOP
		SETB	WRB
		SETB	RS
		SETB	CS1
		RET

DDR_WRITE:	JNB	BUSY,$				;写资料到DDRAM
		MOV	P1,A
		CLR	CS1
		SETB	RDB
		SETB	RS
		CLR	WRB
		NOP
		NOP
		SETB	WRB
		SETB	RS
		SETB	CS1
		RET

REG_READ:	MOV	A,REGNAME			;读缓存器
		LCALL	REG_WR
		MOV	P1,#0FFH
		CLR	CS1
		SETB	WRB
		CLR	RS
		CLR	RDB
		NOP
		MOV	A,P1
		SETB	RDB
		SETB	RS
		SETB	CS1
		MOV	REGDATA1,A
		RET
;****************************************************
DELAY1:		MOV	R6,#0CH				;延时6毫秒
DEL11:		MOV	R7,#0FCH
DEL12:		DJNZ	R7,DEL12
		DJNZ	R6,DEL11
		RET

DELAY2:		MOV	R5,#02H				;延时240毫秒
DEL21:		MOV	R6,#0EAH
DEL22:		MOV	R7,#0FFH
DEL23:		DJNZ	R7,DEL23
		DJNZ	R6,DEL22
		DJNZ	R5,DEL21
		RET
;****************************************************
INITTAB1:
DB 000H,001H,002H,003H,010H,011H,012H,021H,031H,041H,051H,020H,030H,040H,050H,060H
DB 061H,070H,071H,072H,080H,081H,091H,090H,0A0H,0A1H,0A2H,0A3H,0B0H,0B1H,0C0H,0C1H
DB 0C8H,0C9H,0CAH,0D0H,0E0H,0F0H,0F1H
INITTAB2:
DB 0C9H,0E2H,010H,080H,02BH,000H,091H,013H,07FH,000H,000H,013H,07FH,000H,000H,000H
DB 000H,000H,000H,07FH,0AAH,004H,000H,02DH,011H,000H,000H,000H,013H,07FH,000H,036H
DB 080H,080H,000H,080H,000H,0A0H,00FH
;注:理论上缓存器[81H]=00H,[90H]=16H,但实际应用上要改为:缓存器[81H]=04H,[90H]=2DH

TAB1:
DB '金鹏D系列液'
DB 0BEH,0A7H	;晶
DB '模块  '
DB '   触摸屏演示程序   '
DB '     No-Touch!!     '
DB '       X=           '
DB '       Y=           '

TAB2:
DB 'No-Touch!!'

TAB3:
DB 'Touch-Now!'

		END
		

⌨️ 快捷键说明

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