在之前写的一篇关于使用UCGUI来绘制功率波形的文章中我提到过,使用UCGUI来编写波形显示功能函数时,我遇到了我无法解决的问题,就是无法重绘窗口中的波形,只有把全屏全部清空后,再重新绘制一边波形。这样做的弊端是刷新频率太慢,无法满足题目要求的刷新频率1HZ的要求,并且会把原来显示的电压、功率等数据也全部清除,这样更加导致了显示的效果非常不理想。思来想去我觉得我之前使用UCGUI画波形的思路是没有错误的,所以很可能是UCGUI移植时我出了问题,导致出了这样的情况,所以我决定换一款GUI程序来完成我刷新波形的想法。现在看看时间,距离我上几次发表UCGUI画波形数据的文章也过去2天了,所以想要快速掌握LittleVGL的基本使用方法还是算比较容易的,所以要相信自己能够学会任何东西的,只要你有这样的决心。 下面上几张图片,这次是不闪烁的,而且也不会清屏。 那么这一次主要是讲一下我在使用过程中遇到的问题和相关解决方法。 1、在使用的过程中,要注意lv_conf.h是对GUI的配置文件,这个文件是专门面向使用用户的,在这里面选择你需要的功能,配置分配给GUI的内存堆的大小,对于GUI功能的配置,我们只要关注这一个文件就可以了,其它文件可以不怎么看。 2、在使能GUI时,要注意初始化的顺序,GUI使能必须在最前面,然后时使能显示初始化,输出功能初始化,代码如下。
lv_init(); //lvgl系统初始化
lv_port_disp_init(); //lvgl显示接口初始化,放在lv_init()的后面
lv_port_indev_init();
3、在配置样式性质时,如果想要设计出自己风格的样式,那么一定要关注样式的数据类型结构体。在这里面你可以修改任何对象的样式,只是注意最后一定要调用配置函数把样式配置给相关对象,不然没有用的。配置函数如下。
void lv_obj_set_style(lv_obj_t * obj, const lv_style_t * style)
还有其它相关的针对某一个具体的对象类型定义的配置函数,例如
lv_chart_set_style();
这个函数是专门配置图表的,还有很多,具体查手册。 问题也就暂时只想到这些,之后又想起来了再添加吧。接下来讲讲代码编写时的问题。 有些时候我总是觉得自己的代码编写的不够规范,当代码量变得非常大时,有时候甚至不知道自己写到哪里来了,所以代码的风格和标准化上,我也一直在努力让自己进步,尽量让代码更加简洁,更加容易维护。例如,将代码函数的各个功能分区,这样要找自己的代码在哪里时就有了大的方向,就不会到处瞎找,这样的作法在大工程中优点尤为凸显。还有使用结构体将相同功能的变量放在一起,这样对于自己的变量功能就能一目了然,而不会东一个西一个,到最后忘记自己写的是什么,那就搞笑了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200708155018492.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbmhhb19f,size_16,color_FFFFFF,t_70)
#include "task.h"
#include "led.h"
#include "usart.h"
#include
#include "adc_DMA.h"
#include "dealdata.h"
#include "delay.h"
#include "lcd.h"
/*************
结构体集合分类存放区
*************/
typedef struct
{
lv_obj_t *ta;
lv_obj_t *ta1;
lv_obj_t *ta2;
lv_obj_t *ta3;
lv_obj_t *ta4;
lv_obj_t *ta5;
lv_obj_t *ta6;
lv_obj_t *ta7;
lv_obj_t *ta8;
}label;//电压等对象的标签结构体
typedef struct
{
lv_style_t my_style;//设置背景样式的变量
lv_style_t chart_Wave_Style;//设置波形的图表样式的变量
}style_My;//样式的变量结构体
typedef struct
{
lv_obj_t *scr;//装载当前活跃屏幕的对象
lv_obj_t *MyTable;//图表的句柄
lv_chart_series_t *Wave;//数据线波形的句柄
}My_obj;//对象集
typedef struct
{
lv_task_t *task_ReWave;//一个刷新波形的任务
}My_task;//任务集
/************
对象变量定义区
*************/
label label_1;//定义第一个标签页变量
style_My style_1;//定义第一个样式的集合
My_obj Table_obj;//定义一个图表有关的对象集
My_task task_1;//定义一个包含了刷新波形任务的任务集合
lv_coord_t ADC1_overValueLocal[100];
/************
写出电压最值等标签
************/
void table_creat(void)
{
Table_obj.scr=lv_scr_act();//获取当前活跃的屏幕对象,就是屏幕底层
//将背景换为黑色
lv_style_copy(&style_1.my_style,&lv_style_plain_color);
style_1.my_style.body.main_color=LV_COLOR_BLACK;
style_1.my_style.body.grad_color=LV_COLOR_BLACK;
style_1.my_style.text.opa = LV_OPA_50;
lv_obj_set_style(Table_obj.scr,&style_1.my_style);
label_1.ta=lv_label_create(Table_obj.scr,NULL);
lv_label_set_recolor(label_1.ta,true);//先得使能文本重绘色功能
lv_label_set_text(label_1.ta,"#00FFFF V_Max:#");
lv_obj_set_pos(label_1.ta,0,0);//创建标签,表示位置
label_1.ta1=lv_label_create(Table_obj.scr,NULL);
lv_label_set_recolor(label_1.ta1,true);//先得使能文本重绘色功能
lv_label_set_text(label_1.ta1,"#00FFFF V_Min:#");
lv_obj_set_pos(label_1.ta1,120,0);
label_1.ta2=lv_label_create(Table_obj.scr,NULL);
lv_label_set_recolor(label_1.ta2,true);//先得使能文本重绘色功能
lv_label_set_text(label_1.ta2,"#00FFFF V_Curr:#");
lv_obj_set_pos(label_1.ta2,0
|