RA8875 触屏控制

在网上看到不少人反映RA8875的触摸屏界面并不好用,并有不少人反映根本用不了的情况的。过年无聊在玩STM32F407和一个RA8875为核心的7寸屏幕的时候也遇到了不少的问题,就写出来跟大家分享一下。
1、RA8875的触摸屏自动模式:
    if (EnableTouchScreen)
    {               
        LCD_WriteReg(0x70,0x84);                                    //配置ADC
        LCD_WriteReg(0x71,0x05);                                    //启用自动模式,消去机械振动
        LCD_WriteReg(0xF0,0x04);                                    //开启屏幕触摸中断
    }
上面的代码能开启触摸屏自动模式。需要注意,当触摸事件发生并采样后,需要进行如下的操作
LCD_WriteReg(0xf1, 0x04);                                   //清除中断标志位
在清除了中断之后,RA8875才会又检测触摸事件,否则读取0x72~0x74的寄存器的值是不会改变的,中断也不会响应了。
2、RA8875的中断模式:
这时困惑我很久的一个问题,因为我安装上面的配置做好了程序之后,触摸事件并不会拉低中断脚。经过多次参考别人的程序之后,发现我比其他人多了一步:
SCREEN.WriteText(LCD_COLOR_BLUE,LCD_COLOR_GREEN,true,LCD_TEXT_4x,"abcdefg");
这个是我用C++写的一个类,作用是使用RA8875的文字功能在屏幕上输出字符串。代码中有一段:
LCD_WriteReg(0x40, 0xe0); 
这段代码使得RA8875进入了文字模式,而非位图模式。实际上,我将文字输出屏蔽之后,一切就正常了。这表明,RA8875在文字模式下,触摸触摸屏是不会拉低INT脚的。为了解决问题,我在WriteText最下面加了一句
LCD_WriteReg(0x40, 0x00);
重新使得RA8875回到位图模式,就可以正常使用了。
但实际上,使用自动模式的效果并不是太理想。实际程序运行的时候,当手指按到屏幕上会触发多次的触摸事件,但并不是每次的坐标都是正确的,特别是松手的时候,干扰特别大。所以使用触摸中断+扫描的方式或许是比较好的一个选择,这需要在软件上使用一个中值滤波器。

你可能感兴趣的:(硬件应用,RA8875,触摸屏控制)