STM32F4应用笔记(四)UCGUI裸机移植——支持触摸屏

来源:互联网 发布:网络摄像头怎么安装 编辑:程序博客网 时间:2024/06/09 10:57

1、移植的基准
这一次是以正点原子F4开发板的触摸屏实验作为基准。
我们在前一篇博客建立的工程的基础上。把触摸屏实验Hardware之中的相应的文件夹添加到工程中。
2、在GUI_X添加文件GUI_X_Touch.c
这一次支持触摸屏,所以需要添加GUI_X_Touch.c。
2.1修改GUI_X_Touch.c文件
在GUI_X_Touch.c中添加预处理命令#include “touch.h”。
然后将其中的GUI_TOUCH_X_MeasureX
和GUI_TOUCH_X_MeasureY两个函数改为如下所示的形式:
int GUI_TOUCH_X_MeasureX(void) {
tp_dev.scan(0);//扫描
return tp_dev.x[0];
}
int GUI_TOUCH_X_MeasureY(void) {
tp_dev.scan(0);//扫描
return tp_dev.y[0];
}
3、修改GUIConf.h文件
打开工程文件Config文件夹中的GUIConf.h文件,将其中的GUI_SUPPORT_TOUCH和GUI_WINSUPPORT总开关打开。

#define GUI_SUPPORT_TOUCH         (1) #define GUI_WINSUPPORT            1 

4、修改GUITouchConf.h文件
打开工程文件Config文件夹中GUITouchConf.h文件,因为我们采用4.3英寸(480*800)显示屏竖屏显示,所以改为:

#define GUI_TOUCH_AD_LEFT    0     //坐标值#define GUI_TOUCH_AD_RIGHT   480   //#define GUI_TOUCH_AD_TOP     0     //#define GUI_TOUCH_AD_BOTTOM  800   //#define GUI_TOUCH_SWAP_XY    0#define GUI_TOUCH_MIRROR_X   0#define GUI_TOUCH_MIRROR_Y   0

5、修改LCDConf.h
修改LCD的尺寸,看你用多大的。

#define LCD_XSIZE      (480) #define LCD_YSIZE      (800) 

6、修改主函数

#include "sys.h"#include "delay.h"  #include "usart.h"   #include "led.h"#include "lcd.h"#include "ili93xx.h" #include "touch.h"#include "gui.h"#include "timer.h" int main(void) {     Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz      delay_init(168);           //延时初始化            uart_init(84,115200);      //初始化串口波特率为115200      LED_Init();                 //LED端口初始化     LCD_hard_Init();     TP_Init();             //触摸屏初始化      TIM3_Int_Init(100-1,8400-1);//10Khz的计数频率,计数100次为10ms      GUI_Init();     GUI_SetBkColor(GUI_BLUE);//设置背景色     GUI_SetColor(GUI_WHITE);     GUI_Clear();     GUI_SetFont(&GUI_Font24_ASCII);   GUI_DispStringAt("- - STM32F- -",4,10);   GUI_DispStringAt("- - UCGUI3.98 - -",4,40);   GUI_DispStringAt("- - SUCCESSFULLY - -",4,70);     delay_ms(2000);// 延时2s   GUI_Clear();     GUI_CURSOR_Show();    while(1)     {        LED0=!LED0;        delay_ms(100);    }}

7、修改timer函数
这个实验用到了,定时器3,定时器3的中断服务程序如下:

//定时器3中断服务程序     void TIM3_IRQHandler(void){     static u8 j=0;    j++;        if(TIM3->SR&0X0001)//溢出中断    {        LED1=!LED1;             GUI_TOUCH_Exec();        GUI_Exec();//GUI事件更新        if(j>=50)        {            LED1=!LED1;            j=0;        }           }           

GUI_TOUCH_Exec();是用来获取触摸屏状态的。
8、最终实现效果
首先显示几行字,2s之后,触摸屏上出现一个鼠标指针,然后会随着手指的移动而移动。

原创粉丝点击