112 lines
5.3 KiB
C
112 lines
5.3 KiB
C
/* 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);
|
||
} |