亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gui_touch_driveranalog.c

?? UC_GUI開發(fā)源代碼,里面含有范例,源文件
?? C
字號:
/*
*********************************************************************************************************
*                                             uC/GUI V3.98
*                        Universal graphic software for embedded applications
*
*                       (c) Copyright 2002, Micrium Inc., Weston, FL
*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
*              礐/GUI is protected by international copyright laws. Knowledge of the
*              source code may not be used to write a similar product. This file may
*              only be used in accordance with a license and should not be redistributed
*              in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File        : GUITOUCH.C
Purpose     : Touch screen manager
----------------------------------------------------------------------
This module handles the touch screen. It is configured in the file
GUITouch.conf.h (Should be located in the Config\ directory).
----------------------------------------------------------------------
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "LCD_Private.h"      /* private modul definitions & config */
#include "GUI_Protected.h"

/* Generate code only if configuration says so ! */
#if GUI_SUPPORT_TOUCH

#include "GUITouchConf.h"    /* Located in GUIx, will include GUITouchConf.h */

/*********************************************************************
*
*       Defines, config defaults
*
**********************************************************************
*/

#ifndef GUI_TOUCH_AD_LEFT         /* max value returned by AD-converter */
  #define GUI_TOUCH_AD_LEFT 30   
#endif

#ifndef GUI_TOUCH_AD_RIGHT        /* min value returned by AD-converter */
  #define GUI_TOUCH_AD_RIGHT 220    
#endif

#ifndef GUI_TOUCH_AD_TOP          /* max value returned by AD-converter */
  #define GUI_TOUCH_AD_TOP 30
#endif

#ifndef GUI_TOUCH_AD_BOTTOM       /* min value returned by AD-converter */
  #define GUI_TOUCH_AD_BOTTOM 220
#endif

#ifndef GUI_TOUCH_SWAP_XY         /* Is XY of touch swapped ? */
  #define GUI_TOUCH_SWAP_XY 0
#endif

#ifndef GUI_TOUCH_MIRROR_X
  #define GUI_TOUCH_MIRROR_X 0
#endif

#ifndef GUI_TOUCH_MIRROR_Y
  #define GUI_TOUCH_MIRROR_Y 0
#endif

#ifndef GUI_TOUCH_YSIZE
  #define GUI_TOUCH_YSIZE LCD_YSIZE
#endif

#ifndef GUI_TOUCH_XSIZE
  #define GUI_TOUCH_XSIZE LCD_XSIZE
#endif

/*********************************************************************
*
*       Types
*
**********************************************************************
*/

typedef struct {int Min; int Max; } tMinMax;

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

static int xPhys, yPhys;

static tMinMax xyMinMax[2] = {
#if ((GUI_TOUCH_SWAP_XY==0) && (GUI_TOUCH_MIRROR_X==0)) || ((GUI_TOUCH_SWAP_XY) && (GUI_TOUCH_MIRROR_Y==0))
  { GUI_TOUCH_AD_LEFT, GUI_TOUCH_AD_RIGHT },
#else
  { GUI_TOUCH_AD_RIGHT, GUI_TOUCH_AD_LEFT },
#endif
#if ((GUI_TOUCH_SWAP_XY==0) && (GUI_TOUCH_MIRROR_Y==0)) || ((GUI_TOUCH_SWAP_XY) && (GUI_TOUCH_MIRROR_X==0))
  { GUI_TOUCH_AD_TOP,  GUI_TOUCH_AD_BOTTOM }
#else
  { GUI_TOUCH_AD_BOTTOM,  GUI_TOUCH_AD_TOP }
#endif
};

#ifndef WIN32
static int xMin;
static int xMax;
static int yMin;
static int yMax;
#endif

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _AD2X
*
* Purpose:
*   Convert physical value into (logical) coordinates.
*/
#ifndef WIN32
static int _AD2X(int adx) {
  I32 r = adx - xyMinMax[GUI_COORD_X].Min;
  r *= GUI_TOUCH_XSIZE - 1;
  return r / (xyMinMax[GUI_COORD_X].Max - xyMinMax[GUI_COORD_X].Min);    
}

/*********************************************************************
*
*       _AD2Y
*
* Purpose:
*   Convert physical value into (logical) coordinates.
*/
static int _AD2Y(int ady) {
  I32 r = ady - xyMinMax[GUI_COORD_Y].Min;
  r *= GUI_TOUCH_YSIZE - 1;
  return r/(xyMinMax[GUI_COORD_Y].Max - xyMinMax[GUI_COORD_Y].Min);    
}
#endif

/*********************************************************************
*
*       _Log2Phys
*/
static int _Log2Phys(int l, I32 l0, I32 l1, I32 p0, I32 p1) {
  return p0+ ((p1 - p0) * (l - l0)) / (l1 - l0);
}

/*********************************************************************
*
*       _StoreUnstable
*/
static void _StoreUnstable(int x, int y) {
  static int _xLast = -1;
  static int _yLast = -1;
  int xOut, yOut;

  if ((x != -1) && (y != -1) && (_xLast != -1) && (_yLast != -1)) {
    xOut = _xLast;    
    yOut = _yLast;    
  } else {
    xOut = -1;
    yOut = -1;    
  }
  _xLast = x;
  _yLast = y;
  GUI_TOUCH_StoreUnstable(xOut, yOut);
}
/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       GUI_TOUCH_GetxPhys
*/
int  GUI_TOUCH_GetxPhys(void) {
  return xPhys;
}

/*********************************************************************
*
*       GUI_TOUCH_GetyPhys
*/
int  GUI_TOUCH_GetyPhys(void) {
  return yPhys;
}

/*********************************************************************
*
*       GUI_TOUCH_SetDefaultCalibration
*/
void GUI_TOUCH_SetDefaultCalibration(void) {
  xyMinMax[0].Min = GUI_TOUCH_AD_LEFT;
  xyMinMax[0].Max = GUI_TOUCH_AD_RIGHT;
  xyMinMax[1].Min = GUI_TOUCH_AD_TOP;
  xyMinMax[1].Max = GUI_TOUCH_AD_BOTTOM;
}

/*********************************************************************
*
*       GUI_TOUCH_Calibrate
*/
int GUI_TOUCH_Calibrate(int Coord, int Log0, int Log1, int Phys0, int Phys1) {
  int l0 = 0;
  int l1 = (Coord == GUI_COORD_X) ? LCD_XSIZE - 1 : LCD_YSIZE - 1;
  if (labs(Phys0 - Phys1) < 20) {
    return 1;
  }
  if (labs(Log0 - Log1) < 20) {
    return 1;
  }
  xyMinMax[Coord].Min = _Log2Phys(l0, Log0, Log1, Phys0, Phys1);  
  xyMinMax[Coord].Max = _Log2Phys(l1, Log0, Log1, Phys0, Phys1);
  return 0;
}

/*********************************************************************
*
*       GUI_TOUCH_GetCalData
*/
void GUI_TOUCH_GetCalData(int Coord, int* pMin,int* pMax) {
  *pMin = xyMinMax[Coord].Min;
  *pMax = xyMinMax[Coord].Max; 
}
  
/*********************************************************************
*
*       GUI_TOUCH_Exec
*/
void GUI_TOUCH_Exec(void) {
  #ifndef WIN32
  static U8 ReadState;
  int x,y;
  /* calculate Min / Max values */
  if (xyMinMax[GUI_COORD_X].Min < xyMinMax[GUI_COORD_X].Max) {
    xMin = xyMinMax[GUI_COORD_X].Min;
    xMax = xyMinMax[GUI_COORD_X].Max;
  } else {
    xMax = xyMinMax[GUI_COORD_X].Min;
    xMin = xyMinMax[GUI_COORD_X].Max;
  }
  if (xyMinMax[GUI_COORD_Y].Min < xyMinMax[GUI_COORD_Y].Max) {
    yMin = xyMinMax[GUI_COORD_Y].Min;
    yMax = xyMinMax[GUI_COORD_Y].Max;
  } else {
    yMax = xyMinMax[GUI_COORD_Y].Min;
    yMin = xyMinMax[GUI_COORD_Y].Max;
  }
  /* Execute the state machine which reads the touch */
  switch (ReadState) {
  case 0:
    yPhys = TOUCH_X_MeasureY();
    TOUCH_X_ActivateY();  /* Prepare X- measurement */
    ReadState++;
    break;
  default:
    xPhys = TOUCH_X_MeasureX();
    TOUCH_X_ActivateX();  /* Prepare Y- measurement */
    /* Convert values into logical values */
    #if !GUI_TOUCH_SWAP_XY   /* Is X/Y swapped ? */
      x = xPhys;
      y = yPhys;
    #else
      x = yPhys;
      y = xPhys;
    #endif
    if ((x < xMin) || (x > xMax)  || (y < yMin) || (y > yMax)) {
      _StoreUnstable(-1, -1);
    } else {
      x = _AD2X(x);
      y = _AD2Y(y);
      _StoreUnstable(x, y);
    }
    /* Reset state machine */
    ReadState = 0;
    break;
  }
  #endif /* WIN32 */
}

#else

void GUI_TOUCH_DriverAnalog_C(void);  /* Avoid "no prototype" warnings */
void GUI_TOUCH_DriverAnalog_C(void) {}

#endif    /* defined(GUI_SUPPORT_TOUCH) && GUI_SUPPORT_TOUCH */

/*************************** End of file ****************************/
	 	 			 		    	 				 	  			   	 	 	 	 	 	  	  	      	   		 	 	 		  		  	 		 	  	  			     			       	   	 			  		    	 	     	 				  	 					 	 			   	  	  			 				 		 	 	 			     			 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线一二三| 激情欧美一区二区| 久国产精品韩国三级视频| 成人av电影在线观看| 欧美三区在线观看| 国产欧美一二三区| 丝袜亚洲另类欧美| 91色婷婷久久久久合中文| 91精品婷婷国产综合久久竹菊| 亚洲国产高清在线| 老司机精品视频一区二区三区| 一本久道久久综合中文字幕| 国产蜜臀av在线一区二区三区| 午夜婷婷国产麻豆精品| 色综合天天综合网国产成人综合天| 精品久久久久久久久久久久久久久久久| 日韩毛片在线免费观看| 懂色av一区二区在线播放| 日韩一区二区三区免费看 | 日韩欧美亚洲另类制服综合在线| 一区免费观看视频| 国产91精品入口| 久久这里只有精品首页| 久久99精品一区二区三区三区| 在线观看免费亚洲| 亚洲人成亚洲人成在线观看图片| 国产一区二区导航在线播放| 日韩色在线观看| 日本在线不卡视频| 欧美日韩国产综合久久| 亚洲国产精品欧美一二99| 91丝袜美腿高跟国产极品老师| 中文字幕第一区综合| 高清不卡在线观看| 中文字幕精品一区二区精品绿巨人| 国产永久精品大片wwwapp| 亚洲精品一区二区三区99| 91成人在线精品| 中文字幕日本不卡| 色先锋aa成人| 亚洲午夜羞羞片| 欧洲一区二区三区在线| 午夜av电影一区| 日韩欧美中文字幕公布| 久久成人免费电影| 日本一区二区免费在线| 99久久精品免费精品国产| 亚洲欧美自拍偷拍| 欧美日韩国产综合一区二区 | 国产精品一区二区免费不卡| 久久久99精品久久| 96av麻豆蜜桃一区二区| 亚洲国产精品久久久久秋霞影院 | 免费亚洲电影在线| 26uuu亚洲婷婷狠狠天堂| 精品一区中文字幕| 中文字幕的久久| 91一区二区三区在线观看| 亚洲一区二区三区四区五区黄| 欧美日韩国产美| 精品一区二区三区免费观看| 中文字幕av不卡| 欧美人与禽zozo性伦| 青青草国产精品97视觉盛宴| 久久久精品国产免费观看同学| aaa欧美大片| 日韩成人伦理电影在线观看| 久久亚洲精品国产精品紫薇| 91原创在线视频| 日本中文字幕一区二区有限公司| 久久综合久久综合久久| 91社区在线播放| 国内精品免费**视频| 中文字幕五月欧美| 国产欧美一区二区精品久导航| 99在线热播精品免费| 日韩高清电影一区| 中文字幕免费在线观看视频一区| 欧美中文字幕不卡| 风间由美性色一区二区三区| 亚洲影院久久精品| 亚洲国产成人私人影院tom | 天堂久久久久va久久久久| 国产精品区一区二区三区| 欧美色手机在线观看| 福利91精品一区二区三区| 免费人成黄页网站在线一区二区 | 午夜免费久久看| 国产精品乱码人人做人人爱| 91精品国产麻豆| 欧美综合视频在线观看| 成人深夜在线观看| 久久99国内精品| 国产在线精品一区二区三区不卡| 成人免费观看av| 亚洲丰满少妇videoshd| 粉嫩aⅴ一区二区三区四区| 亚洲午夜久久久久久久久电影网 | 欧美日韩在线播放三区四区| 成人免费av在线| 国产精品一区在线| 久久99精品久久久久婷婷| 亚洲成人av一区二区三区| 亚洲色图另类专区| 国产精品免费看片| 91捆绑美女网站| 韩国一区二区三区| 久久国产免费看| 毛片不卡一区二区| 青青草97国产精品免费观看无弹窗版| 亚洲黄色在线视频| 怡红院av一区二区三区| 最新中文字幕一区二区三区 | 不卡av免费在线观看| 春色校园综合激情亚洲| 国产精品一区二区三区99| 国产美女精品人人做人人爽| 久久精品国产亚洲aⅴ| 另类调教123区| 欧美伊人久久大香线蕉综合69| 成人午夜大片免费观看| 风流少妇一区二区| 色综合久久中文综合久久牛| 91亚洲永久精品| 欧美亚洲日本国产| 欧美色爱综合网| 日韩欧美一二区| 日本一区二区免费在线观看视频| 中文字幕第一区| 最新日韩av在线| 午夜精品久久久久久久99樱桃| 人禽交欧美网站| 激情综合网av| 岛国一区二区在线观看| 色综合天天综合| 欧美三级日韩三级| 日韩视频国产视频| 中文字幕免费在线观看视频一区| 一区二区三区在线视频免费| 亚洲精品国产一区二区精华液 | 成人精品一区二区三区四区 | 欧美一区二区三区视频在线观看| 日韩欧美在线123| 欧美高清一级片在线观看| 一区二区三区四区不卡视频 | 午夜精品一区二区三区电影天堂| 亚洲成a人片在线观看中文| 久久国产麻豆精品| 91社区在线播放| 日韩视频在线观看一区二区| 亚洲国产岛国毛片在线| 亚洲香蕉伊在人在线观| 国产盗摄视频一区二区三区| 91成人免费网站| 精品久久久久99| 又紧又大又爽精品一区二区| 国产aⅴ精品一区二区三区色成熟| 色综合咪咪久久| 26uuu色噜噜精品一区| 亚洲精品国产精华液| 久久se这里有精品| 99热在这里有精品免费| 日韩一区二区三区电影| 亚洲欧美在线aaa| 激情综合色丁香一区二区| 色94色欧美sute亚洲线路一ni| 91精品国产综合久久精品图片| 成人免费一区二区三区在线观看| 奇米影视7777精品一区二区| 色综合天天在线| 国产午夜精品在线观看| 青青青伊人色综合久久| 色综合久久天天综合网| 欧美不卡激情三级在线观看| 亚洲综合偷拍欧美一区色| 丁香桃色午夜亚洲一区二区三区| 日韩一区和二区| 亚洲一区二区三区免费视频| 成人开心网精品视频| 久久一区二区视频| 麻豆国产欧美日韩综合精品二区| 91国偷自产一区二区开放时间| 国产精品私房写真福利视频| 精品一区二区三区在线播放| 欧美肥妇bbw| 一区二区三区中文在线| 不卡一区二区三区四区| 国产亚洲美州欧州综合国| 日韩电影在线一区二区三区| 欧美性视频一区二区三区| 综合欧美一区二区三区| 成人动漫视频在线| 欧美激情中文不卡| 久久精品国产在热久久| 7777精品伊人久久久大香线蕉 | 亚洲欧洲性图库| 国产精品一区二区不卡| 久久你懂得1024| 国产乱码精品一区二区三区av| 欧美不卡一区二区三区四区|