/*方案:
之前没有使用触摸屏,现在添加之
编 者:张永辉 2012年12月28日
*/
/****************************************************************************************************
GUI触摸屏示例
文 件:GuiTouchTest.h
****************************************************************************************************/
#ifndef __GUITOUCHTEST_H
#define __GUITOUCHTEST_H
void GuiThouchTest(void);
//***************************************************************************************************
#endif
/****************************************************************************************************
GUI的触摸屏测试
1 在 GUI--移植1--VS2008_模拟1788_opengl_最小配置 的基础上 做如下操作
2 在 GUIConf.h 添加定义
#define GUI_SUPPORT_TOUCH (1)
#undef WIN32
3 在 GUITouchConf.h 添加定义
#define GUI_TOUCH_SWAP_XY 0 //=0 xy轴不交换,=1交换
#define GUI_TOUCH_MIRROR_X 0 //x轴镜像
#define GUI_TOUCH_MIRROR_Y 0 //Y轴镜像
#define GUI_TOUCH_AD_LEFT 0 //AD转换的X最小值,需要根据实际情况确定
#define GUI_TOUCH_AD_RIGHT 480 //AD转换的X最大值
#define GUI_TOUCH_AD_TOP 0 //AD转换的Y最小值
#define GUI_TOUCH_AD_BOTTPM 272 //AD转换的Y最大值
#define GUI_TOUCH_XSIZE LCD_XSIZE
#define GUI_TOUCH_YSIZE LCD_YSIZE
4 在 GUI_X_1788.c 添加底层函数
//测量激活
void GUI_TOUCH_X_ActivateX(void)
{}
void GUI_TOUCH_X_ActivateY(void)
{}
//返回AD转换的X轴结果
int GUI_TOUCH_X_MeasureX(void)
{ return GlTouchGetAdX();
}
//返回AD转换的Y轴结果
int GUI_TOUCH_X_MeasureY(void)
{ return GlTouchGetAdY();
}
5 可以像如下示例使用触摸屏了
GUI.H的定义:
typedef struct
{ int x,y; //坐标
unsigned char Pressed; //=1 表示触摸按下 =0未按下
}GUI_PID_STATE;
6 矫正函数 GUI_TOUCH_Calibrate(xy,xy1,adc1,xy2,adc2)
xy=0 矫正X轴 =1矫正Y轴
xy1 第一个像素点
adc1 第一个像素点对应的ADC转换的值。
xy1 第二个像素点
adc1 第二个像素点对应的ADC转换的值。
7 测试结果:
还可以,位置结果矫正后很准确
编 者:张永辉 2012年12月28日
****************************************************************************************************/
#include "GUI.h"
#include "jpeglib.h"
#include "GuiTouchTest.h"
#include "OpenglLcd.h"
/***************************************************************************************************/
//测试函数,main调用此函数即可
void GuiThouchTest(void)
{
char flg = 0;
GUI_PID_STATE th;
GUI_Init(); //初始化
GUI_TOUCH_Calibrate(0,0,100,0,100); //矫正X
GUI_TOUCH_Calibrate(1,0,100,0,100); //矫正Y
while(1)
{
GUI_TOUCH_Exec(); //需要每10ms调用一次
GlTimeDelayMs(10);
GUI_TOUCH_GetState(&th);
GUI_DrawPixel(th.x,th.y); //在屏幕画出触摸的点
//按下的时候打印GUI计算出来的位置
if(th.Pressed == 1 && flg == 0)
{
flg = 1;
printf("guix=%d guiy=%d s=%d \n",th.x,th.y,th.Pressed);
}
if(th.Pressed == 0)
{
flg = 0;
}
}
}