1. 触摸屏简单的讲,其实就是在LCD屏上加了一层触摸膜,如果是电阻屏,
感知的是电压的不同,如果是电容屏,感知的是电流的不同。
2. 然后通过一个AD转换芯片通知ARM芯片,LCD有分辨率,以320X240的分辨率和电阻屏为例,
对应这么多个点,触摸到哪个点,返回的电压也是不同的,但是由于接触的物体一般接触点较大,
3. 触摸屏使用的时候一般都是做个框,在框内的坐标所有点都认为触发的是同一个功能。
触摸屏一般是用中断,注意按下和抬起分别会进入一次中断,也就是按下一次进入两次中断,
下面看程序。
/******************************
*文件名:touch.c *
*功能: 主显示界面 *
*创建者: 潘星宇 *
*最后修改:2013.03.21 *
*备注: *
* *
*******************************/
#include "touch.h"
volatile int xdata, ydata; //转换前的X,Y坐标值
int xLcd,yLcd; //转换后的X,Y坐标值
int TSOK; //校正完成
int aba[7];
/**************************************************************************
***** 函数名:check_touch
***** 功 能:判断触摸坐标
***** 参 数:无
***** 返回值:无
***** 创建者: 潘星宇
***** 创建时间:2013-03-10
***** 最后更新:2013-03-10
****************************************************************************/
void check_touch(void)
{
if (function_flag == 1) //如果是在主显示界面
{
if ((xLcd>=COLLATE_SQURE_START_X)&&(xLcd<=COLLATE_SQURE_START_X+60)&&(yLcd>=COLLATE_SQURE_START_Y)&&(yLcd<=COLLATE_SQURE_START_Y+60)) //如果触摸的是校准
{
function_flag = 20; //改变状态准备进入校准
}
// else if ((xLcd>=MODULE_START_X)&&(xLcd<=MODULE_START_X+16*6)&&(yLcd>=MODULE_START_Y+32)&&(yLcd<=MODULE_START_Y+32+16)) //如果触摸的是样例2
// {
// function_flag = 2; //改变状态准备进入电子钟样例
// }
else if ((xLcd>=CIRCLE_SQURE_START_X)&&(xLcd<=CIRCLE_SQURE_START_X+60)&&(yLcd>=CIRCLE_SQURE_START_Y)&&(yLcd<=CIRCLE_SQURE_START_Y+60)) //如果触摸的是样例3
{
function_flag = 3; //改变状态准备进入气泡样例
}
else if ((xLcd>=SNAKE_SQURE_START_X)&&(xLcd<=SNAKE_SQURE_START_X+60)&&(yLcd>=SNAKE_SQURE_START_Y)&&(yLcd<=SNAKE_SQURE_START_Y+60)) //如果触摸的是样例4
{
function_flag = 4; //改变状态准备进入贪吃蛇样例
}
else if ((xLcd>=DOOR_SQURE_START_X)&&(xLcd<=DOOR_SQURE_START_X+60)&&(yLcd>=DOOR_SQURE_START_Y)&&(yLcd<=DOOR_SQURE_START_Y+60)) //如果触摸的是样例5
{
function_flag = 5; //改变状态准备进入门禁样例
}
// else if ((xLcd>=200)&&(xLcd<=216)&&(yLcd>=150)&&(yLcd<=166))//如果触摸的是校准
// {
// function_flag = 20; //改变状态准备校准
// }
}
// else if (function_flag == 1) //如果是在跑马灯显示界面
// {
// if ((xLcd>=296)&&(xLcd<=328)&&(yLcd>=100)&&(yLcd<=116)) //如果触摸的是返回
// {
// draw_return(200+16*6, 100, COLOR_BLACK, COLOR_DARK_GREEN); //背景变为深绿色
// delay(16000000);
// function_flag = 0; //退出本样例
// }
// }
// else if (function_flag == 2) //如果是在电子钟显示界面
// {
// if ((xLcd>=400)&&(xLcd<=432)&&(yLcd>=130)&&(yLcd<=146)) //如果触摸的是返回
// {
// draw_return(400, 130, COLOR_BLACK, COLOR_DARK_GREEN); //背景变为深绿色
// delay(16000000);
// function_flag = 0; //退出本样例
//