【HC32F4A0开发板】移植LVGL电容触摸屏驱动
[复制链接]
本帖最后由 TL-LED 于 2023-3-1 08:37 编辑
在https://bbs.eeworld.com.cn/thread-1234256-1-1.html这篇中,LVGL的显示部分移植到开发板上,
在https://bbs.eeworld.com.cn/thread-1234575-1-1.html这篇中已经测试触摸屏驱动,下面将电容触摸功能也移植到开发板。
一、LVGL中添加触摸程序
LVGL的触摸程序是在lv_port_indev_templ.c文件中定义的
需要要到的函数如下:
在下面的文件中,添加触摸驱动程序部分。
在lv_port_indev_init函数中,只保留触摸屏相关的,其他都屏蔽掉,要不触摸不能用
添加触摸屏的代码:
/*Initialize your touchpad*/
static void touchpad_init(void)
{
/*Your code comes here*/
init_touch();
}
/*Will be called by the library to read the touchpad*/
static void touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
{
static lv_coord_t last_x = 0;
static lv_coord_t last_y = 0;
/*Save the pressed coordinates and the state*/
if(touchpad_is_pressed()) {
touchpad_get_xy(&last_x, &last_y);
//DDL_Printf("last_x=%d, last_y=%d\r\n",last_x,last_y);
data->state = LV_INDEV_STATE_PR;
}
else {
data->state = LV_INDEV_STATE_REL;
}
/*Set the last pressed coordinates*/
data->point.x = last_x;
data->point.y = last_y;
}
/*Return true is the touchpad is pressed*/
static bool touchpad_is_pressed(void)
{
//bool sta=0;
/*Your code comes here*/
if(TOUCHPAD_IsPressed())
{
//DDL_Printf("sta\r\n");
return true;
}
//
return false;
}
/*Get the x and y coordinates if the touchpad is pressed*/
static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y)
{
/*Your code comes here*/
static uint16_t u16LastX = 0U;
static uint16_t u16LastY = 0U;
BSP_GT9XX_GetXY(GT9XX_POINT1, &u16LastX, &u16LastY);
//DDL_Printf("u16LastX=%d, u16LastY=%d\r\n",u16LastX,u16LastY);
(*x) = 800-u16LastY; //横屏
(*y) = u16LastX;
}
在主程序中,添加初始化输入
二、程序运行
运行视频如下:
235609
|