本文章用于自己复习回顾,源码以百度网盘链接的形式放在文章末尾了
开发板:正点原子stm32f407zgt6
IDE:MDK-ARM
屏幕:正点原子4.3寸TFTLCD
目录
实际效果
滑块效果展示
效果简介
使用DAC+DMA输出波,并利用方波、三角波、正弦波三个按钮,控制输出波形
滑动滑条Frequency可以调节波的频率:100-5000Hz可调;
滑动滑条Vpp可以调节波的峰峰值
最后,在屏幕上显示当前输出的波形、频率和峰峰值
LVGL移植
可以参考这位博主LVGL移植
利用GUI-Guider制作触控按钮并控制LED亮灭
可以参考我的上一篇博客【LVGL+GUI-Guider】触控按钮控制stm32上LED亮灭
在GUI-Guider中添加滑块
如图,找到滑动条并添加即可
在滑块值改变时获取滑块当前值
在setup_scr_screen.c中的void setup_scr_screen(lv_ui *ui)函数中,找到滑块的名称
我使用了label_8和label_9来显示当前频率和峰峰值状况
在void setup_scr_screen(lv_ui *ui)函数前编写回调函数
回调函数:
//滑块:frequency
static void sli_fre_event_cb(lv_event_t *e)
{
lv_obj_t *target=lv_event_get_target(e);
Fre=lv_slider_get_value(target);
sprintf(label_8,"%dHz",Fre*10+100);
lv_label_set_text(guider_ui.screen_label_8, label_8);
// printf("Fre=%d\r\n",lv_slider_get_value(target));
}
//滑块:Vpp
static void sli_vpp_event_cb(lv_event_t *e)
{
lv_obj_t *target=lv_event_get_target(e);
Vpp=lv_slider_get_value(target);
sprintf(label_9,"%.2lfV",(double)Vpp/100+1);
lv_label_set_text(guider_ui.screen_label_9, label_9);
// printf("Vpp=%d\r\n",lv_slider_get_value(target));
}
用于label_8和label_9动态显示的字符数组的声明:
char label_8[7]={0};
char label_9[7]={0};
调用回调函数:
lv_obj_add_event_cb(ui->screen_slider_1,sli_fre_event_cb,LV_EVENT_VALUE_CHANGED,NULL);
lv_obj_add_event_cb(ui->screen_slider_2,sli_vpp_event_cb,LV_EVENT_VALUE_CHANGED,NULL);
这样,当我们拉动滑块,滑块的值发生变化,就会进入编写好的回调函数,用于显示当前值的文本框中的文本发生对应变化,就实现了视频中的效果
按下按键改变波形并显示当前输出波形
改变波形这一块不加赘述,显示当前输出波形的步骤很简单
在按键回调函数的基础上,只需要增加一句修改文本框中文字的语句即可,同样也是注意传参形式为guider_ui.screen_label_7
lv_label_set_text(guider_ui.screen_label_7, "Square");
另外,也可以采用设置多个文本框,只让特定文本框显示,而其他的文本框隐藏的办法
隐藏文本框的函数调用示例:
lv_obj_add_flag(guider_ui.screen_label_7, LV_OBJ_FLAG_HIDDEN);
显示文本框(清除隐藏文本框的标志位):
lv_obj_clear_flag(guider_ui.screen_label_7, LV_OBJ_FLAG_HIDDEN);
源码
链接:一个百度网盘链接
提取码:1mg2
更多
【LVGL+GUI-Guider】移植完成后添加模块或删去模块
存在诸多不足之处,还望海涵