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

📄 ts_low.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
字号:
/**********************************************************************************	ADS7846 Analog device driver routine									   **********************************************************************************/#include	"ecrsys.h"#include	"ads7846.h"#include	"ftype.h"#include    "ts_low.h"#include    <stdio.h>#include    <stdlib.h>#include    <string.h>extern	char	bellcnt;void GUI_TOUCH_StoreState(int x, int y);void GUI_TOUCH_SetDefaultCalibration(void);int TOUCH_X_MeasureX(void);int TOUCH_X_MeasureY(void);void TOUCH_X_ActivateX(void);void TOUCH_X_ActivateY(void);/*************************************************************************          Config defaults************************************************************************/#ifndef GUI_TOUCH_AD_LEFT      /* max value returned by AD-converter */  #define GUI_TOUCH_AD_LEFT 0x60   #endif#ifndef GUI_TOUCH_AD_RIGHT      /* min value returned by AD-converter */  #define GUI_TOUCH_AD_RIGHT 0xf20    #endif#ifndef GUI_TOUCH_AD_TOP       /* max value returned by AD-converter */  #define GUI_TOUCH_AD_TOP 0xd0#endif#ifndef GUI_TOUCH_AD_BOTTOM      /* min value returned by AD-converter */  #define GUI_TOUCH_AD_BOTTOM 0xd00#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/******************************************************************       Static data*******************************************************************/typedef struct {int Min; int Max; } tMinMax;static tMinMax xyMinMax[2] = {  { GUI_TOUCH_AD_LEFT, GUI_TOUCH_AD_RIGHT },    { GUI_TOUCH_AD_TOP,  GUI_TOUCH_AD_BOTTOM }};static int xMin;static int xMax;static int yMin;static int yMax;/***********************************************************************   Convert physical value into (logical) coordinates*	adx -- the ADS7846 input value (X direction)*	**********************************************************************/int AD2X(int adx) {  signed long r;    r = adx - xyMinMax[GUI_COORD_X].Min;  r *= GUI_TOUCH_XSIZE - 1;    return ( r / (xyMinMax[GUI_COORD_X].Max - xyMinMax[GUI_COORD_X].Min));    }/***********************************************************************   Convert physical value into (logical) coordinates*	adx -- the ADS7846 input value (Y direction)*	**********************************************************************/int AD2Y(int ady) {  signed long	r;  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 0; //GUI_TOUCH_xPhys;}int  GUI_TOUCH_GetyPhys(void) {  return 0; //GUI_TOUCH_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 ll, I32 ll0, I32 ll1, I32 pp0, I32 pp1) {  return (pp0 + ((pp1-pp0) * (ll-ll0)) / (ll1-ll0));}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_Exec*	总共测试两次,第一次测试Y方向,值保存起来,*	             第二次测试X方向,值也保存起来,如果合法,则保存到缓冲区,*					 否则给缓冲区放置错误标志数据即可***********************************************************************/void GUI_TOUCH_Exec(void) {	static U8 ReadState = 0;	static int xPhys, yPhys;	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 Y- measurement */			ReadState++;//			break;//		default:			xPhys = TOUCH_X_MeasureX();			TOUCH_X_ActivateX();  /* Prepare X- measurement */			/* Convert values into logical values */			x = xPhys;			y = yPhys;			//			if ((x < xMin) | ( x > xMax)  | (y < yMin) | (y > yMax)) //			{//				GUI_TOUCH_StoreState(-1,-1);//			} //			else 			if ( (x != -1) && (y != -1))			{//				x = AD2X(x);//				y = AD2Y(y);				GUI_TOUCH_StoreState(x,y);			}//			else//				bellcnt = 0x10;			/* Reset state machine */			ReadState=0;//			break;	}}void TOUCH_X_ActivateX(void){}void TOUCH_X_ActivateY(void){}

⌨️ 快捷键说明

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