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

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

?? gui_touch_driveranalog.c

?? Keil C下通過的UCGUI,UCGUI的移植源代碼
?? C
字號:
/*
*********************************************************************************************************
*                                                uC/GUI
*                        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 "gui\Core\LCD_Private.h"      /* private modul definitions & config */
#include "gui\Core\GUI_Protected.h"

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

#include "Config\GUITouchconf.h"    /* Located in GUIx, will include GUITouch.conf.h */

/*
**********************************************************************
*
*          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

/*********************************************************************
*
*          Config check
*
**********************************************************************
*/


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

typedef struct {int Min; int Max; } tMinMax;
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



/*********************************************************************
*
*       Convert physical value into (logical) coordinates
*/
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);    
}

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);    
}

/*********************************************************************
*
*        Diagnostic routines
*/
int  GUI_TOUCH_GetxPhys(void) {
  return xPhys;
}

int  GUI_TOUCH_GetyPhys(void) {
  return yPhys;
}



/*********************************************************************
*
*              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;
}

/*********************************************************************
*
*              Calibration
*/


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

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;
}

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)) {
      GUI_TOUCH_StoreUnstable(-1,-1);
    } else {
      x = AD2X(x);
      y = AD2Y(y);
      GUI_TOUCH_StoreUnstable(x,y);
    }
    /* Reset state machine */
    ReadState=0;
    break;
  }
  #endif /* WIN32 */
}


#else
void GUI_TOUCH_DriverAnalog_C(void) {}

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


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久这里只有精品6| 丝袜亚洲另类欧美综合| 久久精品欧美日韩精品| 欧美成人一区二区三区| 日韩精品一区在线观看| 日韩精品在线一区二区| 精品国产乱码久久久久久图片| 欧美一区二区视频网站| 337p亚洲精品色噜噜| 91精品国产91久久久久久一区二区 | 麻豆极品一区二区三区| 亚洲大片在线观看| 亚洲成av人在线观看| 亚洲成a人片在线不卡一二三区| 亚洲成人精品在线观看| 三级不卡在线观看| 美女免费视频一区| 久久av资源网| 国产99精品国产| zzijzzij亚洲日本少妇熟睡| 91麻豆国产福利在线观看| 色婷婷综合久久久中文一区二区| 欧洲另类一二三四区| 欧美群妇大交群中文字幕| 日韩一级片网站| 久久久久久黄色| 最新欧美精品一区二区三区| 国产一区二区中文字幕| 国产成人综合亚洲91猫咪| jlzzjlzz国产精品久久| 欧美色爱综合网| 精品国产乱码久久久久久夜甘婷婷 | 国产成人精品影视| hitomi一区二区三区精品| 91黄色免费看| 精品欧美久久久| 国产精品私人影院| 亚洲一线二线三线久久久| 日韩电影一区二区三区四区| 国产精品中文欧美| 色av一区二区| 久久综合丝袜日本网| 亚洲人成精品久久久久| 视频在线观看一区| 国产精品1区2区| 在线观看av一区| 精品99一区二区三区| 亚洲嫩草精品久久| 久久国产三级精品| 91蜜桃在线观看| 欧美成人精品高清在线播放| 亚洲欧美怡红院| 麻豆精品视频在线观看免费 | 中文字幕精品综合| 天天操天天综合网| 国产91对白在线观看九色| 欧美色倩网站大全免费| 国产日本一区二区| 日韩国产精品久久| av高清久久久| 精品国一区二区三区| 一区二区三区小说| 国产精品一区二区在线看| 欧美日韩在线三级| 中文字幕日韩精品一区| 日本特黄久久久高潮| 97国产一区二区| 亚洲精品一区二区三区99| 亚洲高清视频在线| 一本久久综合亚洲鲁鲁五月天| 精品国产一区二区亚洲人成毛片 | 久久久久久久电影| 日韩精品亚洲一区| 色婷婷综合中文久久一本| 国产性天天综合网| 日本欧美加勒比视频| 国产精品成人在线观看| 久久国产精品第一页| 欧美日韩综合色| 亚洲欧美日韩一区| 高清av一区二区| 欧美精品一区二区久久婷婷| 欧美bbbbb| 欧美老女人第四色| 亚洲视频一区二区免费在线观看| 国产白丝精品91爽爽久久| www日韩大片| 理论片日本一区| 91精品国产综合久久精品| 亚洲一级二级在线| 99精品热视频| 国产精品电影一区二区| 国产成人综合视频| 久久久久免费观看| 国产一区不卡在线| 精品国产一区二区三区不卡| 免费欧美日韩国产三级电影| 91精品国产免费| 欧美a一区二区| 日韩欧美一区二区不卡| 免费成人在线视频观看| 日韩欧美专区在线| 老司机免费视频一区二区| 日韩三级电影网址| 久久 天天综合| 久久欧美一区二区| 国产经典欧美精品| 欧美激情一区二区三区四区| 国产激情一区二区三区四区| 国产欧美日本一区视频| 成人精品高清在线| 国产精品久久久久久久午夜片| 99精品视频中文字幕| 亚洲男人的天堂在线aⅴ视频| 91浏览器入口在线观看| 一区二区三区在线免费观看| 欧美日韩情趣电影| 日本特黄久久久高潮| wwwwww.欧美系列| 国产宾馆实践打屁股91| 亚洲天堂精品视频| 欧美性猛交一区二区三区精品| 亚洲国产精品久久久男人的天堂| 欧美日韩中文精品| 日本怡春院一区二区| 欧美精品一区二区精品网| 国产传媒一区在线| 一区二区三区丝袜| 国产成人av资源| 亚洲精品自拍动漫在线| 欧美乱熟臀69xxxxxx| 九色综合狠狠综合久久| 国产欧美精品一区二区色综合朱莉| www.爱久久.com| 亚洲国产aⅴ天堂久久| 91精选在线观看| 国产丶欧美丶日本不卡视频| 亚洲免费观看高清在线观看| 在线电影一区二区三区| 韩国精品久久久| 综合精品久久久| 欧美狂野另类xxxxoooo| 国产一区二区三区免费在线观看 | 成人免费av资源| 一区二区三区不卡在线观看| 日韩视频永久免费| 成人aa视频在线观看| 午夜视频在线观看一区| 国产午夜精品理论片a级大结局| av不卡在线播放| 日本不卡123| 国产精品激情偷乱一区二区∴| 欧美精品久久99| 国产.精品.日韩.另类.中文.在线.播放| 亚洲天堂网中文字| 精品国产成人在线影院| 在线亚洲人成电影网站色www| 久久99深爱久久99精品| 亚洲女人小视频在线观看| 日韩欧美久久久| 91国产免费观看| 国产精品小仙女| 日韩av电影天堂| 亚洲色图视频网| 久久午夜老司机| 在线不卡的av| 色综合中文字幕国产 | 自拍偷拍欧美精品| 日韩午夜电影av| 色999日韩国产欧美一区二区| 国产在线视频一区二区| 亚洲超碰精品一区二区| 亚洲视频免费在线观看| 久久久影视传媒| 7777精品伊人久久久大香线蕉的| 成人动漫一区二区在线| 国内精品写真在线观看| 午夜精品一区二区三区三上悠亚| 中文字幕乱码亚洲精品一区| 日韩欧美在线综合网| 欧美色中文字幕| 91色综合久久久久婷婷| 国产成人免费网站| 麻豆一区二区在线| 亚洲成av人片在线观看无码| 亚洲欧美激情插 | 狠狠色狠狠色综合日日91app| 午夜精品久久久久久| 亚洲综合色在线| 成人欧美一区二区三区白人| 国产日韩欧美电影| 26uuu精品一区二区在线观看| 制服丝袜av成人在线看| 欧美日韩视频在线观看一区二区三区 | 伦理电影国产精品| 日韩国产高清在线| 亚洲成人动漫在线免费观看| 一片黄亚洲嫩模| 成人欧美一区二区三区视频网页| 国产精品久久久久天堂|