本帖最后由 qiao--- 于 2024-1-22 02:27 编辑
前言:
1.本次测评是基于之前的测评的工程上做的,有疑问的可以跟帖提问也可以看看之前的测评。
2.在做完这个界面时候,我已经把这个单片机的资源已经掏空了,为什么这么说呢,请看下图,它的ROM已经被我用完了,不多对于一个103RC系列能跑成这样ACM还是挺让我惊喜的。
而本期测评我给大家带来的是用LVGL做一个手机时间界面,可以让大家熟悉一下用LVGL的开发步骤。先看成品:
视频演示:
播放器加载失败: 未检测到Flash Player,请到
安装
IMG_8279
此小项目是多任务运行,可以看到绿色led灯也在以1s的速率闪烁。
1.实现RTC时钟
实现时间的显示,离不开RTC的时钟功能,我们首先实现RTC的底层驱动部分,HAL库的RTC实现起来较为简单
我们只需要在在下面的代码部分设置当前的时间就可以了,其实这部分设置时间一般是从网络中获取,解析网络中的JSON数据,板子上没有联网的硬件,我就手动设置当前的时间了
RTC代码完成差不多后,我们先在串口上验证一下,看看是否能打印当前的时间,下面为循环打印时间的程序代码
打开串口看看能否正常打印,可以看到是能够正常打印的。说明我们的RTC功能成功的实现了。
2.设计LVGL界面
我是用GUI-Guider设计的界面,里面可以直接生成c代码,我们最后只需要移植到工程里就行了。
进入GUI-Guider之后,我们直接选最新版本就可
选择模拟器,这个模拟器最后可以让你在VScode或者其他平台上模拟运行你写的界面
选择一个空项目
接下来我们设置好工程路径,设置好屏幕的大小就创建成功了
我这里是在一个网站上下载了一些icon,然后截图了eeworld的logo,图片如下所示
在自己创建的工程下面可以直接拖拉控件,调整颜色等一系列操作,如下图所示,为我最后的创建成果。
接下来我们就可以生成c代码了,依次点击右上角的图标即可生成
3.移植生成的c程序
我们先拷贝一份之前我们测评的lvgl+rtos的工程,方便我们这次移植。
在我们GUI-Guider下面会生成一系列文件,如下图所示,而custom和generated就是我们需要移植的两个文件夹
我们直接把这两个文件夹拷贝到我们工程的GUI/gui目录下
打开工程将所有的.c文件包含到我们工程中,并且添加头文件路径。此时我的工程目录如下所示
此时创建一个任务,显示我们的界面即可,创建的任务代码如下
自此屏幕上可以成功显示我自己设计的lvgl界面了,但是这上面的时间不会改变,因此还需要我们修改一些代码。
4.修改lvgl代码实时显示时间
我们把这个功能归类与RTC 中,此时我只需要不断在循环中更新时间就行了,于是我定义了3个字符数组,方便装我更新的时间
在我们串口循环打印时间代码处添加下面的代码实时更新就行了。
自此本期测评就完成了
总结:通过编写ACM32的RTC功能和lvgl的配合可以设计出一个简单时间界面。ACM32的RTC库做的简单易上手,对新手很友好,RTC的例程程序写的非常完善具有参考价值。