📄 touch8x10d(int).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 + -