S3C2440之触摸屏(二)

33 篇文章 1 订阅

接上节https://blog.csdn.net/pxy198831/article/details/86434989

S3C2440之触摸屏(一)

触摸屏校正之后,可以存储在EEPROM中,校准主要是为了获取差错计算参数,通过在EEPROM中某一地址中数据

来判断是否进行了初始化校准。

校准程序如下:

/**************************************************************************
***** 函数名:touchpanelRevise()
***** 功  能:触摸屏校正程序
***** 参  数:TS_again: 1 从新校正  
						0 判断EEPROM对应的地址选择是否需要校正
***** 返回值:无
***** 创建者: 
***** 创建时间:2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
void touchpanelRevise(U8 TS_again)
{
	char h_8 = 0;		 //参数最高8位
	U8 mh_8 = 0;		 //参数次高8位
	U8 ml_8 = 0;		 //参数次低8位
	U8 l_8 = 0; 		 //参数最低8位
	U16 address = 0;
    U8 i;
	U8 IIC_data;         //判断是否已经校准过的数据
	int k;
	for (k=0; k<7; k++)
	{
		aba[k]=	calibration_number[k];
//		if(aba[k]==0);
	}
	if (TS_again == 1)   //表示用户主动申请校准,不进行IIC判断直接校准,并保持校准结果
	{
		TSOK = 0;

		ts_main();

		for (i=0; i<7; i++)
		{
			switch(i)
			{
				case 0: 
				{
					address = 0x00;
					break;
				}
				case 1: 
				{
					address = 0x10;
					break;
				}
				case 2: 
				{
					address = 0x20;
					break;
				}
				case 3: 
				{
					address = 0x30;
					break;
				}
				case 4: 
				{
					address = 0x40;
					break;
				}
				case 5: 
				{
					address = 0x50;
					break;
				}
				case 6: 
				{
					address = 0x60;
					break;
				}
				default:
				{
					break;
				}
		   	}

			h_8 = ((calibration_number[i]&0xff000000)>>24);
			mh_8 = ((calibration_number[i]&0x00ff0000)>>16);
			ml_8 = ((calibration_number[i]&0x0000ff00)>>8);
			l_8 = (calibration_number[i]&0x000000ff);

			Wr24C080(EEPROM_ADDRESS,address,h_8);	  //保存校验参数0~6 最高8位
			delay(16000000);
			Wr24C080(EEPROM_ADDRESS,address+1,mh_8);  //保存校验参数0~6 次高8位
			delay(16000000);
			Wr24C080(EEPROM_ADDRESS,address+2,ml_8);  //保存校验参数0~6 次低8位
			delay(16000000);
			Wr24C080(EEPROM_ADDRESS,address+3,l_8);	  //保存校验参数0~6 最低8位
			delay(16000000);
		}
	}
	else
	{
		IIC_data = Rd24C080(EEPROM_ADDRESS,IIC_DATA_ADDRESS);
		delay(16000000);
		if (IIC_data != IIC_DATA)	//如果没有进行过校准
		{
			ts_main();
	
			for (i=0; i<7; i++)
			{
				switch(i)
				{
					case 0: 
					{
						address = 0x00;
						break;
					}
					case 1: 
					{
						address = 0x10;
						break;
					}
					case 2: 
					{
						address = 0x20;
						break;
					}
					case 3: 
					{
						address = 0x30;
						break;
					}
					case 4: 
					{
						address = 0x40;
						break;
					}
					case 5: 
					{
						address = 0x50;
						break;
					}
					case 6: 
					{
						address = 0x60;
						break;
					}
					default:
					{
						break;
					}
			   	}

				h_8 = ((calibration_number[i]&0xff000000)>>24);
				mh_8 = ((calibration_number[i]&0x00ff0000)>>16);
				ml_8 = ((calibration_number[i]&0x0000ff00)>>8);
				l_8 = (calibration_number[i]&0x000000ff);
	
				Wr24C080(EEPROM_ADDRESS,address,h_8);	  //保存校验参数0~6 最高8位
				delay(16000000);
				Wr24C080(EEPROM_ADDRESS,address+1,mh_8);  //保存校验参数0~6 次高8位
				delay(16000000);
				Wr24C080(EEPROM_ADDRESS,address+2,ml_8);  //保存校验参数0~6 次低8位
				delay(16000000);
				Wr24C080(EEPROM_ADDRESS,address+3,l_8);	  //保存校验参数0~6 最低8位
				delay(16000000);
			}
		}
		else	   //已经校准过
		{
			for(i=0; i<7; i++)
			{
				switch(i)
				{
					case 0: 
					{
						address = 0x00;
						break;
					}
					case 1: 
					{
						address = 0x10;
						break;
					}
					case 2: 
					{
						address = 0x20;
						break;
					}
					case 3: 
					{
						address = 0x30;
						break;
					}
					case 4: 
					{
						address = 0x40;
						break;
					}
					case 5: 
					{
						address = 0x50;
						break;
					}
					case 6: 
					{
						address = 0x60;
						break;
					}
					default:
					{
						break;
					}
				}
				h_8 = Rd24C080(EEPROM_ADDRESS,address);	   //读取校验参数0~6 最高8位
				delay(4000);
				mh_8 = Rd24C080(EEPROM_ADDRESS,address+1);     //读取校验参数0~6 次高8位
				delay(4000);
				ml_8 = Rd24C080(EEPROM_ADDRESS,address+2);     //读取校验参数0~6 次低8位
				delay(4000);
				l_8 = Rd24C080(EEPROM_ADDRESS,address+3);	   //读取校验参数0~6 最低8位
				delay(4000);
 
 				calibration_number[i] = ((h_8<<24)|(mh_8<<16)|(ml_8<<8)|(l_8));
 			}
			TSOK = 1; //触摸屏已校正	
		}	
	}
}

校准使用的是

已上传到我的资源下载“S3C2440触摸屏程序包含校准库”

这是校准库的头文件



#ifndef __TSLIB_H__
#define __TSLIB_H__


struct ts_sample {
	int		x;
	int		y;
	unsigned int	pressure;
//	struct timeval	tv;
};

struct tsdev{
int ts_x;
int ts_y;
}  ;

extern int tsflag;
extern int calibration_number[7];
extern struct tsdev ts;

#endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值