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

📄 touch.c

📁 金鹏OCMJ8*10D的触摸屏驱动程序
💻 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 + -