微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 第六篇?给阿波罗添加电容触摸屏支持

第六篇?给阿波罗添加电容触摸屏支持

时间:10-02 整理:3721RD 点击:
还好我之前研究过一段时间的电容触摸芯片,当时用的GT系列的(该系列的生产公司,大家可以去搜索,我是为了避免打广告的嫌疑,嘿嘿),这次阿波罗上的RGB屏幕用的电容触摸芯片是FT系列的(这是另一个公司的了),然后我就研究了正点原子的代码,研究之后还是比较顺畅的移植到了IAR的IDE下面,老实说,虽然我没有用mdk,但是我觉得IAR的编译速度还是蛮快的,这点我很欣慰。当初我就是喜欢IAR的高速编译,才选择IAR的。
说道分析正点原子的代码,我用的工具sourceinsight,这是一个很好的代码分析工具,在此做下推荐。截图如下,


移植到IAR后,我修改正点原子的查询方式读取按键为中断方式,当有触摸按下时,中断引脚PH7会有上升沿中断:


这样就可以配置PH7上升沿中断,在中断函数中完成按键坐标的读取,该芯片FT5426,最多支持5个点的触摸。我在此作了简单的测试,读取按键值,然后通过串口输出所有的键值。但是只是在屏幕输出最后的一个键值,具体的实验截图如下:


屏幕的演示效果如下(比较粗糙,现在还处于调试期):


在正点原子的源代码中的显示字符串函数,我发现了一个bug,就是会留下残影的问题。通过修改代码如下解决这个问题:

  1. void LCD_ShowString(uint16_t x,uint16_t y,uint16_t width,uint16_t height,uint8_t size,uint8_t *p)
  2. {         
  3.         uint8_t x0=x;
  4.         width+=x;
  5.         height+=y;
  6.         LTDC_Fill(x,y,width,height,BACK_COLOR);//显示前先清屏
  7.     while((*p<='~')&&(*p>=' '))//判断是不是非法字符!
  8.     {      
  9.         if(x>=width){x=x0;y+=size;}
  10.         if(y>=height)break;//退出
  11.         LCD_ShowChar(x,y,*p,size,0);
  12.         x+=size/2;
  13.         p++;
  14.     }  
  15. }

复制代码



多点触摸的情况下,通过串口观察数据,发现会有些无效数据,4095,不知道是什么原因?

关于正点原子的源代码中的显示字符串函数,我发现了一个bug,就是会留下残影的问题,可以通过格式化输入解决,比如:
sprintf((char *)rstr,"PWM:%6dms...%9lldus",ic_value,hole_ic_value);
%6d,%9lld来固定字符串的长度,这样也可以解决这个问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top