OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3835|回复: 5

触摸屏函数求解惑

[复制链接]

72

主题

251

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2012-3-29
在线时间
7 小时
发表于 2013-6-6 15:34:23 | 显示全部楼层 |阅读模式

//触摸按键扫描
//tp:0,屏幕坐标;1,物理坐标(校准等特殊场合用)
//返回值:当前触屏状态.
//0,触屏无触摸;1,触屏有触摸
u8 TP_Scan(u8 tp)
{     
 if(PEN==0)//有按键按下
 {
  if(tp)TP_Read_XY2(&tp_dev.x,&tp_dev.y);//读取物理坐标
  else if(TP_Read_XY2(&tp_dev.x,&tp_dev.y))//读取屏幕坐标
  {
    tp_dev.x=tp_dev.xfac*tp_dev.x+tp_dev.xoff;//将结果转换为屏幕坐标
   tp_dev.y=tp_dev.yfac*tp_dev.y+tp_dev.yoff; 
   }
  if((tp_dev.sta&TP_PRES_DOWN)==0)//在此次按下之前没有被按下
  {  
   tp_dev.sta=TP_PRES_DOWN|TP_CATH_PRES;//此次按键按下 
   tp_dev.x0=tp_dev.x;//记录第一次按下时的坐标
   tp_dev.y0=tp_dev.y;         
  }     
 }else
 {
  if(tp_dev.sta&TP_PRES_DOWN)//之前是被按下过的,标志位没有复位的
  {
   tp_dev.sta&=~(1<<7);//标记按键松开 
  }else//之前就没有被按下
  {
   tp_dev.x0=0;
   tp_dev.y0=0;
   tp_dev.x=0xffff;                              赋值为什么是这个数?
   tp_dev.y=0xffff;
  }    
 }
 return tp_dev.sta&TP_PRES_DOWN;//返回当前的触屏状态
}  


 

////////////////////////////////////////////////////////////////////////// 
//保存在EEPROM里面的地址区间基址,占用13个字节(RANGE:SAVE_ADDR_BASE~SAVE_ADDR_BASE+12)
#define SAVE_ADDR_BASE 40
//保存校准参数             
void TP_Save_Adjdata(void)
{
 s32 temp;    为什么要定义为S32? typedef int32_t  s32;  校正因子应该小于1?是正还是负?  校正因子定义为float类型,范围是多少?
 //保存校正结果!             
 temp=tp_dev.xfac*100000000;//保存x校正因素   因为tp_dev.xfac 是float   4个字节     为什么要乘以100000000
    AT24CXX_WriteLenByte(SAVE_ADDR_BASE,temp,4);  
 temp=tp_dev.yfac*100000000;//保存y校正因素    因为tp_dev.yfac是float 4个字节
    AT24CXX_WriteLenByte(SAVE_ADDR_BASE+4,temp,4);
 //保存x偏移量   2个字节
    AT24CXX_WriteLenByte(SAVE_ADDR_BASE+8,tp_dev.xoff,2);     
 //保存y偏移量   2个字节
 AT24CXX_WriteLenByte(SAVE_ADDR_BASE+10,tp_dev.yoff,2); 
 //保存触屏类型    1个字节
 AT24CXX_WriteOneByte(SAVE_ADDR_BASE+12,tp_dev.touchtype); 
 temp=0X0A;//标记校准过了
 AT24CXX_WriteOneByte(SAVE_ADDR_BASE+13,temp);
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-6-6 16:47:30 | 显示全部楼层
回复【楼主位】grant:
---------------------------------
第一段代码,在特殊场合下有用.貌似我记得是在综合实验的时候,滑屏操作,会用到.其他实验,这里用处不大.
第二段代码xfac和yfac一般都是小于1的,有可能是负值,这个具体看你的触摸屏计算得出的结果了,喜欢研究就多买几个触摸屏测试下.
乘以一个大数,是为了将浮点数转换为整数存储.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2011-3-10
在线时间
4 小时
发表于 2013-6-16 21:00:27 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
请问原子哥,我依你写的程序.xoff和yoff校准后,是个数负数,而你的用屏显示出来是2700多,我的得不到像素坐标啊,有指教的地方没呢
yfac比例因子因该正常,在0.132左右
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-6-16 21:31:06 | 显示全部楼层
回复【3楼】心首尚路:
---------------------------------
有可能负数的哦
你用我的屏,然后用我的代码校准,肯定OK的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-10-31
在线时间
3 小时
发表于 2019-11-10 02:02:31 | 显示全部楼层
要是比例因子是负数的话存储该怎么处理呢?小白求教!谢谢了
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-10-31
在线时间
3 小时
发表于 2019-11-10 02:04:42 | 显示全部楼层
要是比列因子是负数的话存储要怎么处理呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 10:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表