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