📄 touch.c
字号:
//金鹏OCMJ4*8D液晶模块触摸屏程序
#include "reg52.h"
#include "INTRINS.H"
#include "ABSACC.H"
sbit LCD_BUSY=P3^3; //Connect LCD PIN BUSY
sbit LCD_RST=P1^1; //RST
sbit LCD_RS=P3^4; //RS
sbit LCD_WR=P1^4; //WR
sbit LCD_RD=P1^5; //RD
unsigned char idata REGDATA=0; //Display trasport Data
unsigned char Counter;
unsigned char code Inittable1[]={0x00,0x01,0x02,0x03,0x10,0x11,0x12,0x21, //Wirte the REG DATA
0x31,0x41,0x51,0x20,0x30,0x40,0x50,0x60,
0x61,0x70,0x71,0x72,0x80,0x81,0x91,0x90,
0xa0,0xa1,0xa2,0xa3,0xb0,0xb1,0xc0,0xc1,
0xc8,0xc9,0xca,0xd0,0xe0,0xf0,0xf1};
unsigned char code Inittable2[]= {0xc9,0xf2,0x10,0x80,0x6b,0x00,0x91,0x13,
0x7f,0x00,0x00,0x13,0x7f,0x00,0x00,0x00,
0x00,0x00,0x00,0x7f,0xaa,0x04,0x00,0x2d,
0x11,0x00,0x00,0x00,0x13,0x7f,0x00,0x0a,
0x80,0x80,0x00,0x80,0x00,0xa0,0x0f};
void REG_WRITE(unsigned char REGNAMR,unsigned char REGDATA);
void DDR_WRITE(unsigned char DDR);
void LCM_INIT(void);
void Delay200ms(void);
void REG_READ(unsigned char REGNAME);
void LCM_CLR(void);
/*Ex=按钮的左上角x坐标,Ey=按钮的左上角Y坐标,Fx=按钮的宽度,FY=按钮的高度*/
unsigned char TouchKEYPress(unsigned char Ex,unsigned char Ey,unsigned char Fx,unsigned char Fy); //触摸屏子程序
void main(void){
/*调用的方法*/
while(1){
if(TouchKEYPress(63,169,67,23)){ //按下去
while(TouchKEYPress(63,169,67,23)){} //等待按键抬起为止,模仿windows的MouseUP
//下面添加要执行的功能
}
}
}
/*********************触摸按键分析子程序***********************************/
unsigned char TouchKEYPress(unsigned char Ex,unsigned char Ey,unsigned char Fx,unsigned char Fy){
unsigned char X=0,Y=0;
REG_WRITE(0xc0,0xC0);
Delay200ms();
REG_READ(0xc0);
REG_WRITE(0xc0,REGDATA&0xF8|0x08);
REG_READ(0xc1);
REG_WRITE(0xc1,REGDATA|0x30);
REG_READ(0xC0);
if((REGDATA & 0x40)==0x40){
REG_READ(0xc0);
REG_WRITE(0xC0,REGDATA&0xFC|0x0C);
REG_READ(0xc9);
Y=REGDATA;
REG_READ(0xc0);
REG_WRITE(0xc0,REGDATA&0xF3|0x03);
REG_READ(0xc8);
X=REGDATA;
REG_WRITE(0xc0,0xC0);
Delay200ms();
REG_READ(0xc0);
REG_WRITE(0xc0,REGDATA&0xF8|0x08);
REG_READ(0xc1);
REG_WRITE(0xc1,REGDATA|0x30);
};
if((X>=Ex) && (X<(Ex+Fx)) && (Y>=Ey) && (Y<(Ey+Fy))){
Counter++;
if(Counter>5){return(1);}
}
else{
Counter=0;
return(0);
}
}
void Delay200ms(void){
unsigned char j,k;
for(j=10;j>0;j--)
for(k=248;k>0;k--);
}
void REG_READ(unsigned char REGNAME)
{
unsigned char Buf_s;
P0=REGNAME;
P2=0xbf;
LCD_RD=1;
LCD_RS=0;
LCD_WR=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_WR=1;
LCD_RS=1;
P2=0x1f;
P0=0xff;
P2=0xbf;
LCD_WR=1;
LCD_RS=0;
LCD_RD=0;
Buf_s=P0;
LCD_RD=1;
LCD_RS=1;
P2=0x1f;
REGDATA=Buf_s;
}
void LCM_CLR(void){ //Clear LED Screen
unsigned char t;
REG_WRITE(0xe0,0x00);
REG_READ(0xf0);
t=REGDATA|0x08;
REG_WRITE(0xf0,t);
REG_WRITE(0x00,0xc5);
REG_WRITE(0x70,0x00);
REG_WRITE(0x60,0x00);
DDR_WRITE(0x00);
}
void LCM_INIT(void){
unsigned char Count1,Count2;
LCD_RST=0;
Delay200ms();
LCD_RST=1;
Delay200ms();
P3=0xff;
for(Count1=0,Count2=0x27;Count2>0;Count1++,Count2--)
REG_WRITE(Inittable1[Count1],Inittable2[Count1]);
}
void REG_WRITE(unsigned char REGNAME,unsigned char REGDATA)
{
P0=REGNAME;
P2=0xbf;
LCD_RD=1;
LCD_RS=0;
LCD_WR=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_WR=1;
LCD_RS=1;
P2=0x1f;
P0=REGDATA;
P2=0xbf;
LCD_RD=1;
LCD_RS=0;
LCD_WR=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_WR=1;
LCD_RS=1;
P2=0x1f;
}
void DDR_WRITE(unsigned char DDR)
{
while(LCD_BUSY==1);
P0=DDR;
P2=0xbf;
LCD_RD=1;
LCD_RS=1;
LCD_WR=0;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_WR=1;
LCD_RS=1;
P2=0x1f;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -