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

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之后,触摸屏上出现一个鼠标指针,然后会随着手指的移动而移动。

猜你喜欢

转载自blog.csdn.net/u014751607/article/details/72573024