lvgl_t113 0.1
t113-s3 86盒的LVGL桌面时钟程序
载入中...
搜索中...
未找到
home_page.c
浏览该文件的文档.
1
24#include "lvgl/lvgl.h"
25#include <pthread.h>
26#include <time.h>
27#include <sys/time.h>
28#include "calender_page.h"
29#include "home_page.h"
30#include "message_page.h"
31
34#include "source/img/calendar.h"
35#include "source/img/comment.h"
36#include "source/img/home.h"
37#include "source/img/loading.h"
38#include "source/img/mikuimg.h"
39#include "source/img/No_Wifi.h"
40#include "source/img/shezhi.h"
41#include "source/img/Wifi-1.h"
42
43
45
51typedef struct _lv_clock
52{
53 lv_obj_t *time_label;
54 lv_obj_t *date_label;
55 lv_obj_t *weekday_label;
57
63typedef struct _lv_status_lable
64{
65 lv_obj_t *wifi_label;
66 lv_obj_t *blue_label;
68lv_obj_t *HomePage_OBJ;
69static lv_coord_t hor_res = 480;
70static lv_coord_t ver_res = 480;
71static lv_coord_t rect_width =(lv_coord_t)((float)480 * 0.2f); // 矩形宽度
72
78static void clock_date_task_callback(lv_timer_t *timer)
79{
80 static const char *week_day[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
81 static time_t unix_time;
82 static struct tm *time_info;
83
84 unix_time = time(NULL);
85 time_info = localtime(&unix_time);
86
87 int year = time_info->tm_year + 1900;
88 int month = time_info->tm_mon + 1;
89 int day = time_info->tm_mday;
90 int weekday = time_info->tm_wday;
91 int hour = time_info->tm_hour;
92 int minutes = time_info->tm_min;
93 int second = time_info->tm_sec;
94
95 if (timer != NULL && timer->user_data != NULL)
96 {
97 lv_clock_t *clock = (lv_clock_t *)(timer->user_data);
98 if (clock->time_label != NULL)
99 {
100 lv_label_set_text_fmt(clock->time_label, "%02d:%02d:%02d", hour, minutes, second);
101 lv_obj_align(clock->time_label, LV_ALIGN_BOTTOM_LEFT, 230, -15);
102
103 if (clock->date_label != NULL)
104 {
105 lv_label_set_text_fmt(clock->date_label, "%d-%02d-%02d", year, month, day);
106 lv_obj_align(clock->date_label, LV_ALIGN_BOTTOM_MID, 50, -60);
107 }
108
109 if (clock->weekday_label != NULL)
110 {
111 lv_label_set_text_fmt(clock->weekday_label, "%s", week_day[weekday]);
112 // lv_obj_align_to(clock->weekday_label, lv_obj_get_parent(clock->weekday_label), LV_ALIGN_BOTTOM_MID, -2, 0);
113 lv_obj_align(clock->weekday_label, LV_ALIGN_BOTTOM_MID, -110, -20);
114 }
115 }
116 }
117}
118
124static void clock_wb_status_task_callback(lv_timer_t *timer)
125{
126 if (timer != NULL && timer->user_data != NULL)
127 {
128 lv_status_lable_t *status_lable = (lv_clock_t *)(timer->user_data);
129 if (status_lable->wifi_label != NULL)
130 {
131
132 if (0==check_wifi_state("wlan0"))
133 {
134 lv_img_set_src(status_lable->wifi_label, &Wifi_1);
135 }
136 else
137 {
138 lv_img_set_src(status_lable->wifi_label, &No_Wifi);
139 }
140
141 lv_obj_align(status_lable->wifi_label, LV_ALIGN_TOP_LEFT, (hor_res - rect_width) / 3, ver_res - ver_res * 0.28f);
142 }
143 if (status_lable->blue_label != NULL)
144 {
145
146 if (0==0)
147 {
148 lv_img_set_src(status_lable->blue_label, &Bluetuth_ON);
149 }
150 else
151 {
152 lv_img_set_src(status_lable->blue_label, &Bluetuth_OFF);
153 }
154
155 lv_obj_align(status_lable->blue_label, LV_ALIGN_TOP_LEFT, (hor_res - rect_width) / 3 * 2, ver_res - ver_res * 0.35f);
156 }
157 }
158}
159
165static void calender_img_clicked_callback(lv_event_t *e)
166{
167 LV_LOG_USER("Clicked");
168 // lv_scr_load(Calender_OBJ);
169 // if (Calender_OBJ != NULL) {
170 // lv_obj_del(Calender_OBJ);
171 // Calender_OBJ = NULL; // 确保指针重置
172 // }
173 // Calender_OBJ = lv_obj_create(NULL); // 创建新的页面对象
174 lv_scr_load_anim(Calender_OBJ, LV_SCR_LOAD_ANIM_FADE_ON, 200, 0, false);
175}
176
182static void message_img_clicked_callback(lv_event_t *e){
183 LV_LOG_USER("Clicked");
184 // lv_scr_load(MessageBox_OBJ);
185 // if (MessageBox_OBJ != NULL) {
186 // lv_obj_del(MessageBox_OBJ);
187 // MessageBox_OBJ = NULL; // 确保指针重置
188 // }
189 // MessageBox_OBJ = lv_obj_create(NULL); // 创建新的页面对象
190 lv_scr_load_anim(MessagePage_OBJ, LV_SCR_LOAD_ANIM_FADE_ON, 200, 0, false);
191}
192
197void HomePage(void)
198{
199 // 创建主页对象
200 HomePage_OBJ = lv_obj_create(NULL);
201 lv_obj_set_size(HomePage_OBJ, LV_HOR_RES, LV_VER_RES);
202
203 // 声明图片资源
204 LV_IMG_DECLARE(mikuimg);
205
206 // 创建一个用于显示图片的图片对象
207 lv_obj_t *img = lv_img_create(HomePage_OBJ); // 创建在当前活动的屏幕
208 lv_img_set_src(img, &mikuimg);
209 lv_obj_align(img, LV_ALIGN_TOP_LEFT, 0, 0);
210
211 // 底部装饰1
212 lv_obj_t *canvas = lv_canvas_create(HomePage_OBJ);
213 static lv_color_t canvasBuf[(32 * 480) / 8 * 480];
214 lv_canvas_set_buffer(canvas, canvasBuf, 480, 480, LV_IMG_CF_TRUE_COLOR_ALPHA);
215 const lv_point_t polygonPoint[4] = {
216 {0, ver_res - ver_res * 0.1f},
217 {hor_res - rect_width, ver_res - ver_res * 0.3f},
219 {0, ver_res}
220 };
221 lv_draw_rect_dsc_t rect_dsc;
222 lv_draw_rect_dsc_init(&rect_dsc);
223 rect_dsc.bg_color = lv_color_hex(0x567c8c);
224 lv_canvas_draw_polygon(canvas, polygonPoint, 4, &rect_dsc);
225
226 // 底部装饰2
227 lv_obj_t *canvas1 = lv_canvas_create(HomePage_OBJ);
228 static lv_color_t canvasBuf1[(32 * 480) / 8 * 480];
229 lv_canvas_set_buffer(canvas1, canvasBuf1, 480, 480, LV_IMG_CF_TRUE_COLOR_ALPHA);
230 const lv_point_t polygonPoint1[4] = {
231 {0, ver_res - ver_res * 0.25f},
232 {hor_res - rect_width, ver_res - ver_res * 0.45f},
233 {hor_res - rect_width, ver_res - ver_res * 0.3f},
234 {0, ver_res - ver_res * 0.1f}
235 };
236 lv_draw_rect_dsc_t rect_dsc1;
237 lv_draw_rect_dsc_init(&rect_dsc1);
238 rect_dsc1.bg_color = lv_color_hex(0x000000);
239 rect_dsc1.bg_opa = LV_OPA_80;
240 lv_canvas_draw_polygon(canvas1, polygonPoint1, 4, &rect_dsc1);
241
242 // 状态标签
243 static lv_status_lable_t status_lable = {0};
244 status_lable.wifi_label = lv_img_create(HomePage_OBJ);
245 status_lable.blue_label = lv_img_create(HomePage_OBJ);
246 lv_timer_t *wb_task_timer = lv_timer_create(clock_wb_status_task_callback, 1000, (void *)&status_lable); // 创建定时任务,1秒一次
247
248 // 右侧栏
249 static lv_style_t style_rect;
250 lv_obj_t *rect;
251 lv_color_t c = lv_color_hex(0xadc0c8); // 修改颜色值
252 lv_style_init(&style_rect); // 初始化样式
253 lv_style_set_bg_color(&style_rect, c); // 设置颜色
254 lv_style_set_width(&style_rect, rect_width); // 设置宽度
255 lv_style_set_height(&style_rect, ver_res); // 设置高度
256 lv_style_set_radius(&style_rect, 0); // 设置圆角
257 lv_style_set_shadow_width(&style_rect, 25); // 设置阴影宽度
258 lv_style_set_shadow_ofs_x(&style_rect, -3); // 设置水平偏移
259 lv_style_set_border_width(&style_rect, 0); // 设置边框宽度
260 rect = lv_obj_create(HomePage_OBJ);
261 lv_obj_align(rect, LV_ALIGN_TOP_RIGHT, 0, 0);
262 lv_obj_add_style(rect, &style_rect, 0);
263
264 // 创建设置图片按钮
265 lv_obj_t *shezhi_img = lv_img_create(HomePage_OBJ); // 创建在当前活动的屏幕
266 lv_img_set_src(shezhi_img, &shezhi);
267 lv_obj_align(shezhi_img, LV_ALIGN_TOP_RIGHT, -1 * rect_width / 2.0 + 64 / 2, 1 * ver_res / 5.0 - 64 / 2);
268
269 // 创建日历图片按钮
270 lv_obj_t *calendar_img_btn = lv_imgbtn_create(HomePage_OBJ); // 创建在当前活动的屏幕
271 lv_imgbtn_set_src(calendar_img_btn, LV_IMGBTN_STATE_RELEASED, &calendar1, NULL, NULL);
272 lv_obj_align(calendar_img_btn, LV_ALIGN_TOP_RIGHT, -1 * rect_width / 2.0 + 64 / 2, 2 * ver_res / 5.0 - 64 / 2);
273 lv_obj_set_size(calendar_img_btn, 64, 64);
274 lv_obj_add_event_cb(calendar_img_btn, calender_img_clicked_callback, LV_EVENT_CLICKED, NULL);
275
276 // 创建消息图片按钮
277 lv_obj_t *message_img_btn = lv_imgbtn_create(HomePage_OBJ); // 创建在当前活动的屏幕
278 lv_imgbtn_set_src(message_img_btn, LV_IMGBTN_STATE_RELEASED, &comment, NULL, NULL);
279 lv_obj_set_size(message_img_btn, 64, 64);
280 lv_obj_align(message_img_btn, LV_ALIGN_TOP_RIGHT, -1 * rect_width / 2.0 + 64 / 2, 3 * ver_res / 5.0 - 64 / 2);
281 lv_obj_add_event_cb(message_img_btn, message_img_clicked_callback, LV_EVENT_CLICKED, NULL);
282
283 // 创建加载图片
284 lv_obj_t *loading_img = lv_img_create(HomePage_OBJ); // 创建在当前活动的屏幕
285 lv_img_set_src(loading_img, &loading);
286 lv_obj_align(loading_img, LV_ALIGN_TOP_RIGHT, -1 * rect_width / 2.0 + 64 / 2, 4 * ver_res / 5.0 - 64 / 2);
287
288 // 时间标签样式
289 static lv_style_t time_label_style;
290 lv_style_init(&time_label_style);
291 lv_style_set_text_color(&time_label_style, lv_color_white());
292 lv_style_set_text_font(&time_label_style, &lv_font_montserrat_32);
293 lv_style_set_text_opa(&time_label_style, LV_OPA_COVER);
294 lv_style_set_bg_opa(&time_label_style, LV_OPA_0);
295 lv_style_set_text_color(&time_label_style, lv_color_hex(0xdba7af));
296
297 // 日期标签样式
298 static lv_style_t date_label_style;
299 lv_style_init(&date_label_style);
300 lv_style_set_text_opa(&date_label_style, LV_OPA_COVER);
301 lv_style_set_bg_opa(&date_label_style, LV_OPA_0);
302 lv_style_set_text_color(&date_label_style, lv_color_white());
303 lv_style_set_text_font(&date_label_style, &lv_font_montserrat_20);
304
305 // 星期标签样式
306 static lv_style_t week_lable_style;
307 lv_style_init(&week_lable_style);
308 lv_style_set_text_opa(&week_lable_style, LV_OPA_COVER);
309 lv_style_set_bg_opa(&week_lable_style, LV_OPA_0);
310 lv_style_set_text_color(&week_lable_style, lv_color_white());
311 lv_style_set_text_font(&week_lable_style, &lv_font_montserrat_26);
312
313 // 创建时钟对象
314 static lv_clock_t lv_clock = {0};
315 lv_clock.time_label = lv_label_create(HomePage_OBJ);
316 lv_obj_add_style(lv_clock.time_label, &time_label_style, LV_STATE_DEFAULT);
317
318 lv_clock.date_label = lv_label_create(HomePage_OBJ);
319 lv_obj_add_style(lv_clock.date_label, &date_label_style, LV_STATE_DEFAULT);
320
321 lv_clock.weekday_label = lv_label_create(HomePage_OBJ);
322 lv_obj_add_style(lv_clock.weekday_label, &week_lable_style, LV_STATE_DEFAULT);
323
324 // 创建定时任务,200ms刷新一次
325 lv_timer_t *task_timer = lv_timer_create(clock_date_task_callback, 200, (void *)&lv_clock);
326}
const lv_img_dsc_t Bluetuth_OFF
const lv_img_dsc_t Bluetuth_ON
const lv_img_dsc_t No_Wifi
const lv_img_dsc_t Wifi_1
const lv_img_dsc_t calendar1
lv_obj_t * Calender_OBJ
int check_wifi_state(char *interface)
检查WIFI的工作状态
const lv_img_dsc_t comment
static lv_coord_t ver_res
static lv_coord_t hor_res
static void clock_date_task_callback(lv_timer_t *timer)
时钟定时回调_切换时间
lv_obj_t * HomePage_OBJ
static void calender_img_clicked_callback(lv_event_t *e)
日历按钮回调
static lv_coord_t rect_width
struct _lv_status_lable lv_status_lable_t
结构体用于存储状态相关的标签对象
static void message_img_clicked_callback(lv_event_t *e)
消息按钮回调
void HomePage(void)
主页面
struct _lv_clock lv_clock_t
结构体用于存储时间相关的标签对象
static void clock_wb_status_task_callback(lv_timer_t *timer)
时钟定时回调_检查设备运行状态
const lv_img_dsc_t loading
lv_obj_t * MessagePage_OBJ
const lv_img_dsc_t mikuimg
const lv_img_dsc_t shezhi
结构体用于存储时间相关的标签对象
lv_obj_t * time_label
lv_obj_t * weekday_label
lv_obj_t * date_label
结构体用于存储状态相关的标签对象
lv_obj_t * blue_label
lv_obj_t * wifi_label