第六篇?给阿波罗添加电容触摸屏支持
时间:10-02
整理:3721RD
点击:
还好我之前研究过一段时间的电容触摸芯片,当时用的GT系列的(该系列的生产公司,大家可以去搜索,我是为了避免打广告的嫌疑,嘿嘿),这次阿波罗上的RGB屏幕用的电容触摸芯片是FT系列的(这是另一个公司的了),然后我就研究了正点原子的代码,研究之后还是比较顺畅的移植到了IAR的IDE下面,老实说,虽然我没有用mdk,但是我觉得IAR的编译速度还是蛮快的,这点我很欣慰。当初我就是喜欢IAR的高速编译,才选择IAR的。
说道分析正点原子的代码,我用的工具sourceinsight,这是一个很好的代码分析工具,在此做下推荐。截图如下,
移植到IAR后,我修改正点原子的查询方式读取按键为中断方式,当有触摸按下时,中断引脚PH7会有上升沿中断:
这样就可以配置PH7上升沿中断,在中断函数中完成按键坐标的读取,该芯片FT5426,最多支持5个点的触摸。我在此作了简单的测试,读取按键值,然后通过串口输出所有的键值。但是只是在屏幕输出最后的一个键值,具体的实验截图如下:
屏幕的演示效果如下(比较粗糙,现在还处于调试期):
在正点原子的源代码中的显示字符串函数,我发现了一个bug,就是会留下残影的问题。通过修改代码如下解决这个问题:
说道分析正点原子的代码,我用的工具sourceinsight,这是一个很好的代码分析工具,在此做下推荐。截图如下,
移植到IAR后,我修改正点原子的查询方式读取按键为中断方式,当有触摸按下时,中断引脚PH7会有上升沿中断:
这样就可以配置PH7上升沿中断,在中断函数中完成按键坐标的读取,该芯片FT5426,最多支持5个点的触摸。我在此作了简单的测试,读取按键值,然后通过串口输出所有的键值。但是只是在屏幕输出最后的一个键值,具体的实验截图如下:
屏幕的演示效果如下(比较粗糙,现在还处于调试期):
在正点原子的源代码中的显示字符串函数,我发现了一个bug,就是会留下残影的问题。通过修改代码如下解决这个问题:
- void LCD_ShowString(uint16_t x,uint16_t y,uint16_t width,uint16_t height,uint8_t size,uint8_t *p)
- {
- uint8_t x0=x;
- width+=x;
- height+=y;
- LTDC_Fill(x,y,width,height,BACK_COLOR);//显示前先清屏
- while((*p<='~')&&(*p>=' '))//判断是不是非法字符!
- {
- if(x>=width){x=x0;y+=size;}
- if(y>=height)break;//退出
- LCD_ShowChar(x,y,*p,size,0);
- x+=size/2;
- p++;
- }
- }
多点触摸的情况下,通过串口观察数据,发现会有些无效数据,4095,不知道是什么原因?
关于正点原子的源代码中的显示字符串函数,我发现了一个bug,就是会留下残影的问题,可以通过格式化输入解决,比如:
sprintf((char *)rstr,"PWM:%6dms...%9lldus",ic_value,hole_ic_value);
%6d,%9lld来固定字符串的长度,这样也可以解决这个问题。