S3C2440之触摸屏(一)

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;		 //退出本样例
//		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值