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

📄 8x15d触摸屏中断.asm

📁 触摸屏的中断控制程序
💻 ASM
字号:
;中断方式
;=============================================================================================
;本触摸屏程序只适用于金鹏公司D型液晶模块,显示点数按OCMJ8X15D液晶模块显示,即240X128点阵显示。
;本程序利用液晶模块的触摸屏中断信号输出到LCM_int脚由MCU的INT0接收。
;=============================================================================================
LCM_RS		EQU	P3.0					;L:存取缓存器,H:存取DDRAM
LCM_WR		EQU	P3.1					;L有效
LCM_RD		EQU	P3.6					;L有效
LCM_CS1		EQU	P3.3					;L有效
;LCM_CS2	EQU	P3.4					;H有效(不用接也可以)
LCM_BUSY	EQU	P3.5
LCM_INT		EQU	P3.2					;接MCU的INT0
;LCM_RST	EQU	P3.7					;L有效(不用接也可以)

REGNAME		EQU	30H
REGDATA		EQU	31H
REGDATA1	EQU	32H

LCM_X		EQU	33H					;液晶模块显示地址X
LCM_Y		EQU	34H					;液晶模块显示地址Y

COUNT1		EQU	35H
COUNT2		EQU	36H

X_8H		EQU	37H
X_2L		EQU	38H
Touch_X_H	EQU	39H					;触摸屏地址X
Touch_X_L	EQU	3AH					;触摸屏地址X

Y_8H		EQU	3BH
Y_2L		EQU	3CH
Touch_Y_H	EQU	3DH					;触摸屏地址Y
Touch_Y_L	EQU	3EH					;触摸屏地址Y

HEX_L		EQU	3FH
HEX_H		EQU	40H

;****************************************************
		ORG	0000H
		AJMP	MAIN
		ORG	0003H
		LJMP	INT_0
		ORG	0100H
MAIN:		NOP
		MOV	SP,#5FH
		LCALL	DELAY2			;延时120MS等待上电复位
		MOV	P3,#0FFH
		LCALL	LCM_INIT
		LCALL	LCM_CLR
		
		LCALL	LCM_TOUCH_INIT
		
		MOV	REGDATA,#6BH
		MOV	REGNAME,#10H
		LCALL	REG_WRITE
		
		MOV	REGDATA,#0CDH
		MOV	REGNAME,#00H
		LCALL	REG_WRITE
		
		MOV	LCM_X,#0
		MOV	LCM_Y,#0
		LCALL	WR_ZB
		
		MOV	DPTR,#TAB1
		MOV	COUNT1,#149
MAIN1:		CLR	A
		MOVC	A,@A+DPTR
		LCALL	DDR_WRITE
		INC	DPTR
		DJNZ	COUNT1,MAIN1
		
		SETB	IT0
		SETB	EA
		SETB	EX0
		
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		SJMP	$
;****************************************************
INT_0:	
		CLR	EA
		PUSH	ACC
		MOV	REGNAME,#0A0H
		LCALL	REG_READ
		
		MOV	21H,REGDATA1
		ANL	21H,#40H
		
		JNB	21H.6,INT_0_END
		LCALL	Get_Touch_XY
		
INT_0_END:	POP	ACC
		SETB	EA
		
		RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;入口:HEX_H\HEX_L
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PRINT_HEX:	
		;PUSH	ACC
		;PUSH	B
		ORL	HEX_H,#30H
		MOV	A,HEX_H
		LCALL	DDR_WRITE
		
		MOV	A,HEX_L
		SWAP	A
		ANL	A,#0FH
		MOV	B,A	
		
		CLR	C
		SUBB	A,#0AH
		MOV	A,B
		
		JC	PRINT_HEX1
		
		ADD	A,#37H
		SJMP	PRINT_HEX2
PRINT_HEX1:	ORL	A,#30H
PRINT_HEX2:	LCALL	DDR_WRITE
		
		MOV	A,HEX_L
		ANL	A,#0FH
		MOV	B,A
		
		CLR	C
		SUBB	A,#0AH
		MOV	A,B
		
		JC	PRINT_HEX3
		ADD	A,#37H
		SJMP	PRINT_HEX4
PRINT_HEX3:	ORL	A,#30H
PRINT_HEX4:	LCALL	DDR_WRITE
		
		;POP	B
		;POP	ACC
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;LCM_Bold
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCM_BOLD:	
		MOV	REGNAME,#010H
		LCALL	REG_READ
		
		ORL	REGDATA1,#10H
		
		MOV	REGDATA,REGDATA1
		MOV	REGNAME,#010H
		LCALL	REG_WRITE
		
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;LCM_NoBold
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCM_NOBOLD:	
		MOV	REGNAME,#010H
		LCALL	REG_READ
		
		ANL	REGDATA1,#0EFH
		
		MOV	REGDATA,REGDATA1
		MOV	REGNAME,#010H
		LCALL	REG_WRITE
		
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;LCM_touch_init
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCM_TOUCH_INIT:	
		MOV	REGNAME,#0A0H
		LCALL	REG_READ
		
		ORL	REGDATA1,#04H
		
		MOV	REGDATA,REGDATA1
		MOV	REGNAME,#0A0H
		LCALL	REG_WRITE
		
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Get_Touch_XY
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Get_Touch_XY:	
		MOV	REGNAME,#0C0H
		MOV	REGDATA,#0C0H		;//touch on
		LCALL	REG_WRITE
		
		LCALL	TOUCH_Y
		LCALL	TOUCH_X
		
		MOV	R6,#10			;Delay1ms(2).................
		LCALL	DELAY1MS
		
		LCALL	TEST_TOUCH
		
		JNB	20H.6,Get_Touch2
		
		LCALL	TOUCH_Y
		LCALL	TOUCH_X
		
		MOV	LCM_X,#10
		MOV	LCM_Y,#32
		LCALL	WR_ZB
		
		LCALL	LCM_BOLD
		
		MOV	DPTR,#TAB3
		MOV	COUNT1,#10
Get_Touch1:	CLR	A
		MOVC	A,@A+DPTR
		LCALL	DDR_WRITE
		INC	DPTR
		DJNZ	COUNT1,Get_Touch1
		
		MOV	LCM_X,#14
		MOV	LCM_Y,#48
		LCALL	WR_ZB
		
		MOV	HEX_H,Touch_X_H
		MOV	HEX_L,Touch_X_L
		LCALL	PRINT_HEX
		
		MOV	LCM_X,#14
		MOV	LCM_Y,#64
		LCALL	WR_ZB
		
		MOV	HEX_H,Touch_Y_H
		MOV	HEX_L,Touch_Y_L
		LCALL	PRINT_HEX
		
		LCALL	LCM_NOBOLD
		
		MOV	R6,#255		;Delay1(100).................
		LCALL	DELAY1MS
		
Get_Touch2:	MOV	REGNAME,#0C0H
		MOV	REGDATA,#000H		;//touch oFF
		LCALL	REG_WRITE	
		
		MOV	LCM_X,#10
		MOV	LCM_Y,#32
		LCALL	WR_ZB
		
		MOV	DPTR,#TAB2
		MOV	COUNT1,#10
Get_Touch3:	CLR	A
		MOVC	A,@A+DPTR
		LCALL	DDR_WRITE
		INC	DPTR
		DJNZ	COUNT1,Get_Touch3
		
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;ACC出口bit   ACC.6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TEST_TOUCH:	clr	EA	;..........................
		MOV	REGNAME,#0C0H
		LCALL	REG_READ
		ANL	REGDATA1,#0FEH
		ANL	REGDATA1,#0FDH
		ANL	REGDATA1,#0FBH
		ORL	REGDATA1,#008H
		
		MOV	REGNAME,#0C0H
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE
		
		MOV	R6,#10		;Delay1ms(2).................
		LCALL	DELAY1MS
		
		MOV	REGNAME,#0C1H
		LCALL	REG_READ
		
		ANL	REGDATA,#0F7H
		MOV	REGNAME,#0C0H
		LCALL	REG_WRITE
		
		ANL	REGDATA1,#040H
		
		MOV	20H,REGDATA1
		setb	EA	;..........................
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;出口Touch_Y_H\Touch_Y_L
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TOUCH_Y:	clr	EA	;..........................
		PUSH	ACC
		
		MOV	REGNAME,#0C0H
		LCALL	REG_READ
		
		ANL	REGDATA1,#0FEH
		
		MOV	REGNAME,#0C0H
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE
		
		ANL	REGDATA,#0FDH
		
		MOV	REGNAME,#0C0H
		LCALL	REG_WRITE
		
		ORL	REGDATA,#004H
		
		MOV	REGNAME,#0C0H
		LCALL	REG_WRITE
		
		ORL	REGDATA,#08H
		
		MOV	REGNAME,#0C0H
		LCALL	REG_WRITE
		
		MOV	R6,#10		;Delay1ms(1);.................
		LCALL	DELAY1MS
		
		MOV	REGNAME,#0C9H	;TPYR
		LCALL	REG_READ
		
		MOV	Y_8H,REGDATA1
		
		MOV	REGNAME,#0CAH	;TPZR
		LCALL	REG_READ
		
		MOV	Y_2L,REGDATA1
		
		MOV	A,Y_2L
		SWAP	A
		MOV	Y_2L,A
		ANL	Y_2L,#03H
		
		
		MOV	A,Y_8H
		CLR	C
		RLC	A
		MOV	Touch_Y_L,A
		CLR	A
		RLC	A
		MOV	Touch_Y_H,A
		MOV	A,Touch_Y_L
		CLR	C
		RLC	A
		MOV	Touch_Y_L,A
		MOV	A,Touch_Y_H
		RLC	A
		MOV	Touch_Y_H,A
		
		MOV	A,Touch_Y_L
		ORL	A,Y_2L
		MOV	Touch_Y_L,A
		
		POP	ACC
		setb	EA	;..........................
		
		RET	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;出口Touch_X_H\Touch_X_L
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TOUCH_X:	clr	EA	;..........................
		PUSH	ACC
		
		MOV	REGNAME,#0C0H
		LCALL	REG_READ
		
		ANL	REGDATA1,#0FBH
		
		MOV	REGNAME,#0C0H
		MOV	REGDATA,REGDATA1
		LCALL	REG_WRITE
		
		ANL	REGDATA,#0F7H
		
		MOV	REGNAME,#0C0H
		LCALL	REG_WRITE
		
		ORL	REGDATA,#001H
		
		MOV	REGNAME,#0C0H
		LCALL	REG_WRITE
		
		ORL	REGDATA,#02H
		
		MOV	REGNAME,#0C0H
		LCALL	REG_WRITE
		
		MOV	R6,#10		;Delay1ms(1);.................
		LCALL	DELAY1MS
		
		MOV	REGNAME,#0C8H	;TPXR
		LCALL	REG_READ
		
		MOV	X_8H,REGDATA1
		
		MOV	REGNAME,#0CAH	;TPZR
		LCALL	REG_READ
		
		MOV	X_2L,REGDATA1
		ANL	X_2L,#03H
		
		MOV	A,X_8H
		CLR	C
		RLC	A
		MOV	Touch_X_L,A
		CLR	A
		RLC	A
		MOV	Touch_X_H,A
		MOV	A,Touch_X_L
		CLR	C
		RLC	A
		MOV	Touch_X_L,A
		MOV	A,Touch_X_H
		RLC	A
		MOV	Touch_X_H,A
		
		MOV	A,Touch_X_L
		ORL	A,X_2L
		MOV	Touch_X_L,A
				
		POP	ACC
		setb	EA	;..........................
		
		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
;****************************************************
WR_ZB:		MOV	REGNAME,#60H		;定坐标
		ANL	LCM_X,#3FH
		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:		clr	EA	;..........................
		MOV	P1,A
		CLR	LCM_CS1
		SETB	LCM_RD
		CLR	LCM_RS
		CLR	LCM_WR
		NOP
		NOP
		SETB	LCM_WR
		SETB	LCM_RS
		SETB	LCM_CS1
		setb	EA	;..........................
		RET

DDR_WRITE:	clr	EA	;.......................;写资料到DDRAM
		;JB	LCM_BUSY,$			;BUSY可选择高还是低
		JNB	LCM_BUSY,$	
		MOV	P1,A
		CLR	LCM_CS1
		SETB	LCM_RD
		SETB	LCM_RS
		CLR	LCM_WR
		NOP
		NOP
		SETB	LCM_WR
		SETB	LCM_RS
		SETB	LCM_CS1
		setb	EA	;..........................
		RET

REG_READ:	MOV	A,REGNAME			;读缓存器
		LCALL	REG_WR
		clr	EA	;..........................
		MOV	P1,#0FFH
		CLR	LCM_CS1
		SETB	LCM_WR
		CLR	LCM_RS
		CLR	LCM_RD
		NOP
		MOV	A,P1
		SETB	LCM_RD
		SETB	LCM_RS
		SETB	LCM_CS1
		MOV	REGDATA1,A
		setb	EA	;..........................
		RET
;****************************************************
DELAY1MS:	MOV	R7,#0ffH
DELAY1MS1:	DJNZ	R7,DELAY1MS1
		DJNZ	R6,DELAY1MS
		RET

DELAY2:		MOV	R6,#0EAH
DEL21:		MOV	R7,#0FFH
DEL22:		DJNZ	R7,DEL22
		DJNZ	R6,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,06BH,000H,091H,29,127,000H,000H,29,127,000H,000H,000H
DB 000H,000H,000H,07FH,0AAH,004H,000H,02DH,011H,000H,000H,000H,013H,07FH,000H,035H
DB 080H,080H,000H,080H,000H,0A0H,00FH

TAB1:
DB '金鹏电子有限公司D系列液晶模块'
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 + -