硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2572|回复: 1
收起左侧

[emWin教程入门篇] 第77章     附件L--裸机工程推荐的触摸检测描方式

[复制链接]

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2017-4-22 18:55:58 | 显示全部楼层 |阅读模式
完整65章+12章附件教程下载地址:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834





                               第77章     附件L--裸机工程推荐的触摸检测描方式


        本章节配套的所有裸机例子都是将触摸检测放在硬件定时器中断里面了,实际项目中不推荐这种方式,因为触摸检测获取触摸数据时,时间都稍微有些长,如果获取电容屏的多点触摸数据,时间就更长了,比较影响系统的实时性,所以推荐使用emWin自带的定时器功能来做触摸检测。
       分两步即可完成(配套的完整例子是:V6-617_STemWin实验_强烈推荐的裸机触摸检测方式,不在中断里调用(裸机)):
第1步:创建定时器,这里创建了两个定时器,周期分别是1ms和10ms。
  1. /* 创建定时器 */
  2. hTimer = GUI_TIMER_Create(_cbTimer, /* 回调函数 */
  3.                           1,       /* 绝对时间,设置系统上电后1ms作为溢出时间 */
  4.                           0x01,    /* 可以认为此参数是区分不同定时器的ID,方便多个定时使用同一个回调函数 */
  5.                           0);      /* 保留,暂时未用到 */
  6.                         
  7. /* 设置定时器周期为1ms */
  8. GUI_TIMER_SetPeriod(hTimer, 1);
  9. /* 创建定时器 */
  10. hTimer = GUI_TIMER_Create(_cbTimer, /* 回调函数 */
  11.                           10,      /* 绝对时间,设置系统上电后10ms作为溢出时间 */
  12.                           0x02,    /* 可以认为此参数是区分不同定时器的ID,方便多个定时使用同一个回调函数 */
  13.                           0);      /* 保留,暂时未用到 */
复制代码
第2步:定时器的回调函数电阻屏的检测周期是1ms,电容屏的触摸芯片GT811和FT5X06检测周期是10ms。
  1. /*
  2. *********************************************************************************************************
  3. *    函 数 名: _cbTimer
  4. *    功能说明: 定时器回调函数        
  5. *    形    参: pTM 消息指针
  6. *    返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. void _cbTimer(GUI_TIMER_MESSAGE * pTM)
  10. {
  11.      switch (pTM->Context)
  12.      {
  13.          case 0x01:
  14.               /* 电阻触摸屏 */
  15.               if(g_tTP.Enable == 1)
  16.               {
  17.                    TOUCH_Scan();
  18.               }
  19.             
  20.               /* 此函数一定要调用,设置重新启动,要不仅执行一次 */
  21.               GUI_TIMER_Restart(pTM->hTimer);
  22.               break;
  23.         
  24.          case 0x02:
  25.    
  26.               /* 电容触摸屏GT811 */
  27.               if(g_GT811.Enable == 1)
  28.               {
  29.                    GT811_OnePiontScan();
  30.               }
  31.               /* 电阻触摸屏FT5X06 */
  32.               if(g_tFT5X06.Enable == 1)
  33.               {
  34.                    FT5X06_OnePiontScan();
  35.               }
  36.             
  37.               /* 此函数一定要调用,设置重新启动,要不仅执行一次 */
  38.               GUI_TIMER_Restart(pTM->hTimer);
  39.               break;      
  40.         
  41.          default:
  42.               break;
  43.      }
  44. }
复制代码
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

267

主题

595

回帖

1396

积分

至尊会员

积分
1396
发表于 2017-4-24 16:48:58 | 显示全部楼层
要这么麻烦么,不都是放在system_tick里面1ms一次的么
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 07:03 , Processed in 0.427277 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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