123 lines
5.5 KiB
C
123 lines
5.5 KiB
C
/*
|
||
显示任务
|
||
*/
|
||
|
||
/* Includes ----------------------------------------------------------------- */
|
||
#include "task\user_task.h"
|
||
#include "device\can.h"
|
||
#include "task\user_task.h"
|
||
#include "bsp\led.h"
|
||
#include "bsp\buzzer.h"
|
||
#include "device\lcd.h"
|
||
#include "bsp\gpio.h"
|
||
#include "lvgl.h" // 它为整个LVGL提供了更完整的头文件引用
|
||
#include "lv_port_disp.h" // LVGL的显示支持
|
||
#include "lv_port_indev.h" // LVGL的触屏支持
|
||
#include "tim.h"
|
||
/* Private typedef ---------------------------------------------------------- */
|
||
/* Private define ----------------------------------------------------------- */
|
||
/* Private macro ------------------------------------------------------------ */
|
||
/* Private variables -------------------------------------------------------- */
|
||
static CAN_t can;
|
||
|
||
CAN_Sick_t sick;
|
||
|
||
/* Private function --------------------------------------------------------- */
|
||
/* Exported functions ------------------------------------------------------- */
|
||
|
||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||
{
|
||
if (htim->Instance == TIM6)
|
||
{
|
||
lv_tick_inc(1); // LVGL的tick计数器
|
||
}
|
||
}
|
||
|
||
void Task_Disp(void *argument)
|
||
{
|
||
(void)argument; // 消除未使用参数的警告
|
||
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_DISP; // 50Hz
|
||
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||
|
||
LCD_Init();
|
||
lv_init(); // LVGL 初始化
|
||
lv_port_disp_init(); // 注册LVGL的显示任务
|
||
lv_port_indev_init(); // 注册LVGL的触屏检测任务
|
||
LCD_Clear(WHITE);
|
||
HAL_TIM_Base_Start_IT(&htim6); // 启动定时器中断
|
||
|
||
// 按钮 1
|
||
lv_obj_t *myBtn1 = lv_btn_create(lv_scr_act()); // 创建按钮; 父对象:当前活动屏幕
|
||
lv_obj_set_pos(myBtn1, 170, 80); // 设置坐标
|
||
lv_obj_set_size(myBtn1, 60, 20); // 设置大小
|
||
|
||
// 按钮 1 的文本
|
||
lv_obj_t *label_btn1 = lv_label_create(myBtn1); // 创建文本标签,父对象:上面的btn按钮
|
||
lv_obj_align(label_btn1, LV_ALIGN_CENTER, 0, 0); // 对齐于:父对象
|
||
lv_label_set_text(label_btn1, "NEXT"); // 设置标签的文本
|
||
|
||
// 按钮 2
|
||
lv_obj_t *myBtn2 = lv_btn_create(lv_scr_act()); // 创建按钮; 父对象:当前活动屏幕
|
||
lv_obj_set_pos(myBtn2, 170, 110); // 设置坐标
|
||
lv_obj_set_size(myBtn2, 60, 20); // 设置大小
|
||
|
||
// 按钮 2 的文本
|
||
lv_obj_t *label_btn2 = lv_label_create(myBtn2); // 创建文本标签,父对象:上面的btn按钮
|
||
lv_obj_align(label_btn2, LV_ALIGN_CENTER, 0, 0); // 对齐于:父对象
|
||
lv_label_set_text(label_btn2, "OK");
|
||
|
||
lv_obj_t *label_sick1 = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||
lv_obj_set_pos(label_sick1, 10, 10); // 设置坐标
|
||
lv_label_set_text(label_sick1, "Sick1: 0"); // 设置初始文本
|
||
|
||
// 创建 Sick2 标签
|
||
lv_obj_t *label_sick2 = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||
lv_obj_set_pos(label_sick2, 120, 10); // 设置坐标
|
||
lv_label_set_text(label_sick2, "Sick2: 0"); // 设置初始文本
|
||
|
||
// 创建 Sick3 标签
|
||
lv_obj_t *label_sick3 = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||
lv_obj_set_pos(label_sick3, 10, 40); // 设置坐标
|
||
lv_label_set_text(label_sick3, "Sick3: 0"); // 设置初始文本
|
||
|
||
// 创建 Sick4 标签
|
||
lv_obj_t *label_sick4 = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||
lv_obj_set_pos(label_sick4, 120, 40); // 设置坐标
|
||
lv_label_set_text(label_sick4, "Sick4: 0"); // 设置初始文本
|
||
|
||
// 创建 作者 标签
|
||
lv_obj_t *label_board = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||
lv_obj_set_pos(label_board, 10, 95); // 设置坐标
|
||
lv_label_set_text(label_board, "Mini_croe"); // 设置初始文本
|
||
|
||
lv_obj_t *label_name = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||
lv_obj_set_pos(label_name, 10, 114); // 设置坐标
|
||
lv_label_set_text(label_name, "By Robofish"); // 设置初始文本
|
||
|
||
while (1)
|
||
{
|
||
tick += delay_tick; /* 计算下一个唤醒时刻 */
|
||
// 读取数据
|
||
lv_timer_handler(); // LVGL的定时器处理函数
|
||
if (osMessageQueueGet(task_runtime.msgq.can.feedback.sick, &can, NULL, 100) == osOK)
|
||
{
|
||
osKernelLock();
|
||
// 更新显示内容
|
||
char buffer[16];
|
||
snprintf(buffer, sizeof(buffer), "Sick1: %d", can.sick.named.sick[0]); // 假设 sick.value1 是 Sick1 的值
|
||
lv_label_set_text(label_sick1, buffer);
|
||
|
||
snprintf(buffer, sizeof(buffer), "Sick2: %d", can.sick.named.sick[1]); // 假设 sick.value2 是 Sick2 的值
|
||
lv_label_set_text(label_sick2, buffer);
|
||
|
||
snprintf(buffer, sizeof(buffer), "Sick3: %d", can.sick.named.sick[2]); // 假设 sick.value3 是 Sick3 的值
|
||
lv_label_set_text(label_sick3, buffer);
|
||
|
||
snprintf(buffer, sizeof(buffer), "Sick4: %d", can.sick.named.sick[3]); // 假设 sick.value4 是 Sick4 的值
|
||
lv_label_set_text(label_sick4, buffer);
|
||
osKernelUnlock();
|
||
}
|
||
|
||
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||
}
|
||
} |