Mini_croe_Sick/User/task/mointor.c
2025-04-12 19:43:54 +08:00

112 lines
5.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* Includes ----------------------------------------------------------------- */
#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 -------------------------------------------------------- */
/* Private function --------------------------------------------------------- */
/* Exported functions ------------------------------------------------------- */
void Key1_Callback(void);
void Key2_Callback(void);
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM6) {
lv_tick_inc(1); // LVGL的tick计数器
}
}
void Task_Monitor(void *argument) {
(void)argument; // 消除未使用参数的警告
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_MONITOR; // 1000Hz
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
char tick_str[16];
LCD_Init();
lv_init(); // LVGL 初始化
lv_port_disp_init(); // 注册LVGL的显示任务
lv_port_indev_init(); // 注册LVGL的触屏检测任务
LCD_Clear(BLACK);
// HAL_Delay(5000); // 延时 1 秒
LCD_Clear(RED);
LCD_DrawChar(0, 0, '0', WHITE, BLACK); // 在屏幕上显示字符
LCD_DrawString(0, 0, "Hello", WHITE, BLACK); // 在屏幕上显示字符串
LCD_DrawString(20, 0,"this is sick (DT35-driver)",BLACK,WHITE);
LCD_DrawString(120, 120,"Design by Robofish",BLACK,WHITE);
BSP_LED_Set(BSP_LED_RED, BSP_LED_ON, 0);
BSP_LED_Set(BSP_LED_BLUE, BSP_LED_ON, 0);
BSP_Buzzer_Set(0.1, 0.3); // 设置蜂鸣器频率和占空比
BSP_Buzzer_Start(); // 启动蜂鸣器
HAL_Delay(200); // 延时 1 秒
BSP_Buzzer_Set(0.5, 0.5); // 设置蜂鸣器频率和占空比
// LCD_DrawArea(0, 0, 100, 100, GREEN); // 清屏
HAL_Delay(200); // 延时 1 秒
BSP_Buzzer_Set(0.9, 0.8); // 设置蜂鸣器频率和占空比
HAL_Delay(200);
BSP_Buzzer_Stop(); // 停止蜂鸣器
HAL_TIM_Base_Start_IT(&htim6); // 启动定时器中断
// 按钮 1
lv_obj_t *myBtn1 = lv_btn_create(lv_scr_act()); // 创建按钮; 父对象:当前活动屏幕
lv_obj_set_pos(myBtn1, 180, 60); // 设置坐标
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, "Yes"); // 设置标签的文本
// 按钮 2
lv_obj_t *myBtn2 = lv_btn_create(lv_scr_act()); // 创建按钮; 父对象:当前活动屏幕
lv_obj_set_pos(myBtn2, 180, 100); // 设置坐标
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, "Return");
// // 独立的标签
// lv_obj_t *myLabel = lv_label_create(lv_scr_act()); // 创建文本标签; 父对象:当前活动屏幕
// lv_label_set_text(myLabel, "Hello world!"); // 设置标签的文本
// lv_obj_align(myLabel, LV_ALIGN_CENTER, 0, 0); // 对齐于:父对象
// lv_obj_align_to(myBtn, myLabel, LV_ALIGN_OUT_TOP_MID, 0, -20); // 对齐于:某对象
BSP_GPIO_RegisterCallback(key1_Pin, Key1_Callback);
BSP_GPIO_RegisterCallback(key2_Pin, Key2_Callback);
BSP_GPIO_EnableIRQ(key1_Pin);
BSP_GPIO_EnableIRQ(key2_Pin);
while (1) {
tick += delay_tick; /* 计算下一个唤醒时刻 */
lv_timer_handler(); // LVGL的定时器处理函数
sprintf(tick_str, "Tick: %lu", tick);
//展示tick
LCD_DrawString(0, 0, tick_str, WHITE, BLACK); // 在屏幕上显示 tick 值
// 切换 LED 状态
BSP_LED_Set(BSP_LED_GREEN, BSP_LED_TAGGLE, 0); // 50% 占空比
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
}
}
void Key1_Callback(void) {
// 处理 key1 的中断逻辑
BSP_LED_Set(BSP_LED_RED, BSP_LED_TAGGLE, 0);
}
void Key2_Callback(void) {
// 处理 key2 的中断逻辑
BSP_LED_Set(BSP_LED_RED, BSP_LED_TAGGLE, 0);
}