📄 8x15d触摸屏中断.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 + -