电阻触屏在使用时需要校准,一般情况下会在第一次校准的时候保存下校准数据,下次开机时直接读取数据,就不用再次校准了。
原子的触屏参数分别为:float xfac,float yfac,short xoff,short yoff,校准后保存数据时,先将参数乘以10000,再强行转成int型数据,然后保存到FLASH上,以这种方式保存数据会损失一定精度,但看效果,完成不影响使用。
但对于有强迫症的人,肯定想保存原始数据,因此就有了触屏数据的保存优化了,具体优化如下:
首先,在touch.h文件定义数据结构:
[mw_shl_code=applescript,true]//′¥ÃtÆá¿ØÖÆÆ÷
typedef struct
{
float xfac;
float yfac;
short xoff;
short yoff;
u8 Flag; //3õê¼»ˉ′¥ÃtÆá¿ØÖÆÆ÷
u8 touchtype;
}tp_val;
typedef union{
u32 databuf[4];
tp_val Touch_Val;
}TOUCH_VAL;
[/mw_shl_code]
在touch.c文件定义变量 :TOUCH_VAL touchval;
数据保存函数,一次性保存,不再一个一个参数保存:
[mw_shl_code=applescript,true]//±£′æD£×¼2Îêy
void TP_Save_Adjdata(void)
{
//±£′æD£Õy½á1û!
touchval.Touch_Val.xfac = tp_dev.xfac;
touchval.Touch_Val.yfac = tp_dev.yfac;
touchval.Touch_Val.xoff = tp_dev.xoff;
touchval.Touch_Val.yoff = tp_dev.yoff;
touchval.Touch_Val.touchtype = tp_dev.touchtype;
touchval.Touch_Val.Flag = ADJFlag;
STMFLASH_Write(TOUCH_ADD,touchval.databuf,sizeof(touchval)/4);
}
[/mw_shl_code]
关于STMFLASH_Write的说明:由于LZ在F429I-DIS开发板上测试,所以没有外挂EEPROM,将数据保存在stm自身flash上,TOUCH_ADD为数据的首地址,文件前面定义:
#define TOUCH_ADD 0x800C000
使用EEPROM的可以视情况修改。
下面是读取参数函数
[mw_shl_code=applescript,true]u8 TP_Get_Adjdata(void)
{
STMFLASH_Read(TOUCH_ADD,touchval.databuf,sizeof(touchval)/4);
if(ADJFlag == touchval.Touch_Val.Flag) //′¥ÃtÆáòѾ-D£×¼1yáË
{
tp_dev.xfac = touchval.Touch_Val.xfac;;//μÃμ½xD£×¼2Îêy
tp_dev.yfac = touchval.Touch_Val.yfac;;//μÃμ½yD£×¼2Îêy
tp_dev.xoff = touchval.Touch_Val.xoff; //μÃμ½xÆ«òÆá¿
tp_dev.yoff = touchval.Touch_Val.yoff; //μÃμ½yÆ«òÆá¿
tp_dev.touchtype = touchval.Touch_Val.touchtype;//¶áè¡′¥ÆáààDí±ê¼Ç
if(tp_dev.touchtype)//X,Y·½ÏòóëÆáÄ»Ïà·′
{
CMD_RDX=0X90;
CMD_RDY=0XD0;
}else //X,Y·½ÏòóëÆáÄ»Ïàí¬
{
CMD_RDX=0XD0;
CMD_RDY=0X90;
}
return 1;
}
return 0;
} [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>