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

📄 gui_touch_driveranalog.c

📁 基于S3C44B0与UCGUI的简单温控仪界面
💻 C
字号:
/****************************************************************************
****************************************************************************/
#include "config.h"               /* uC/OS interface */
#include "24LCXX.H"
#include "LCDConf.h"
#include "GUI.H"
#include "44b.h"
#include "I2C.h"
//#include "Def.h" 

INT32U CHX_DAT,CHY_DAT;
INT32U  CHX_BUF,CHY_BUF;
INT8U  KEY_EN=0;

INT8U   xMin;
INT8U   xMax;
INT8U   yMin;
INT8U   yMax;

#define  xMin_c  7
#define  xMax_c  196  
#define  yMin_c  34
#define  yMax_c  213

#define  touch_test

INT8U ad_run(INT8U AD_CH);
/*********************************************************************
*    AD值转换为像素坐标值。
*/
int AD2X(int adx) {
  INT32U r = adx - xMin;    //   触摸屏左小时    
  r *= LCD_XSIZE - 1;
  return r / (xMax - xMin); 
}

int AD2Y(int ady) {
  INT32U r =yMax - ady;   //   触摸屏下小时    
  r *= LCD_YSIZE - 1;
  return r/(yMax - yMin);    
}
void GUI_TOUCH_Exec(void) 
{
   static	INT32U  i;
   static int x,y;
   INT16U xMaxMin,yMaxMin;
   //pdata = pdata;
   
I2C_Init();
   //Iic_Init();
I2C_Read16(0,&xMaxMin);
I2C_Read16(2,&yMaxMin);
xMin=xMaxMin&0x00ff;
xMax=xMaxMin>>8;
yMin=yMaxMin&0x00ff;
yMax=yMaxMin>>8;
//xMax =Rd24LCxx(0xa0,1);
//  yMin =Rd24LCxx(0xa0,2);
  // yMax =Rd24LCxx(0xa0,3);
   if(xMin >(xMin_c+10) || yMin >(yMin_c +10) || xMax < (xMax - 10) || yMax < (yMax-10))
   {
	   xMin = xMin_c;
	   xMax = xMax_c;
	   yMin = yMin_c;
	   yMax = yMax_c;
   }

      	   
   CHX_BUF = ad_run(0x0dC);
   CHX_BUF = ad_run(0x0dC);
   for(;;)
   {
   
	 if((rPDATC & 0x2)==0 && KEY_EN == 0)
	 {
	   for (i=0; i<100; i++){}            //延时,即按住按键的时间 
       if((rPDATC & 0x2)==0)
	   {
         CHX_BUF = ad_run(0x0dC);
         CHY_BUF = ad_run(0x09C);
	     //for (i=0; i<200; i++){}
         CHX_DAT = ad_run(0x0dC);
         CHY_DAT = ad_run(0x09C);

        if(((CHX_BUF>>3) == (CHX_DAT>>3)) && ((CHY_BUF>>3) == (CHY_DAT>>3)) \
			   && CHX_DAT >xMin && CHX_DAT<xMax && CHY_DAT > yMin && CHY_DAT<yMax)
        	{
		      KEY_EN = 1;

              x = AD2X(CHX_DAT);
              y = AD2Y(CHY_DAT);
              GUI_TOUCH_StoreState(x,y);    //存储像素坐标值存到全局变量_State里
        	}
	   }
	 }
	else
	 {
	   for (i=0; i<1000; i++){}       
       if((rPDATC & 0x2)==0x2)
	   {
	     OSTimeDly(10);                 //延时,即按完一个按键后松开手的时间
          if((rPDATC & 0x2)==0x2 && KEY_EN ==1)
		  {
             GUI_TOUCH_StoreState(-1,-1);
			 KEY_EN = 0;
		  }
	   }
	 }
	   OSTimeDly(2);  
      }
   }

INT8U ad_run(INT8U AD_CH)
{
static   INT32U  AD_DAT;
static   INT32U  k,i,TM;
     rPDATC = ~( (~rPDATC) | 1<<3 );             //  CLK =0
     for(i=0; i<8; i++)
	 {
         if(AD_CH>>7 == 1)
		 {rPDATC = rPDATC | 1<<2;}               // DIN =1 
		 else{rPDATC = ~( (~rPDATC) | 1<<2 );}   // DIN =0 

       rPDATC = ~( (~rPDATC) | 1<<3 );           //  CLK =0
       for (k=0; k<8; k++){}
       rPDATC = rPDATC | 1<<3;                   // CLK =1   
	   AD_CH = AD_CH <<1;
	 }
     rPDATC = ~( (~rPDATC) | 1<<2 );            // DIN =0 
     for (k=0; k<500; k++){}
	 AD_DAT = 0;
     rPDATC = ~( (~rPDATC) | 1<<3 );           //  CLK =0
     for(i=0; i<16; i++)
	 {
       rPDATC = rPDATC | 1<<3;                   // CLK =1  
       for (k=0; k<8; k++){}
       rPDATC = ~( (~rPDATC) | 1<<3 );          //  CLK =0
	   TM = rPDATC;
	   TM = TM & 0x01;
	   AD_DAT = AD_DAT | TM;
	   AD_DAT = AD_DAT <<1;
	 }
	 return  (INT8U)(AD_DAT>>9);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -