📄 gui_touch_driveranalog.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 + -