你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32U599】3.写个表盘

[复制链接]
奇迹 发布时间:2023-12-28 19:29

今天继续进行U599的开发,这次做一个简单的表盘界面。

打开TouchGFX,放置一个背景,放一个analogClock控件。

微信截图_20231228190041.png

效果如下,还是非常好看的。

微信截图_20231228185724.png

在加一个圆形的遮罩,这样的话显示效果与实际板卡中一致。

微信截图_20231228190425.png

点击生成代码,打开vs进行代码开发。

对于钟表控件来说,最重要的就是时间配置,也就是virtual void setTime24Hour(uint8_t hour, uint8_t minute, uint8_t second)函数(这里我配置的是24小时制,如果是12小时制,需要virtual void setTime12Hour(uint8_t hour, uint8_t minute, uint8_t second, bool am)函数)

微信截图_20231228193044.png

在了解如何改变时间之后,接下来就是想办法实现定时刷新,TouchGFX提供了一个滴答回调virtual void handleTickEvent (),当前界面每一帧进行刷新的时候都会调用一次这个函数。

下面加入代码魔法。

mainView.hpp

#ifndef MAINVIEW_HPP
#define MAINVIEW_HPP

#include <gui_generated/main_screen/mainViewBase.hpp>
#include <gui/main_screen/mainPresenter.hpp>

class mainView : public mainViewBase
{
public:
    mainView();
    virtual ~mainView() {}
    virtual void setupScreen();
    virtual void tearDownScreen();
    virtual void handleTickEvent();
protected:
    int tickCounter;
    int analogHours;
    int analogMinutes;
    int analogSeconds;
};

#endif // MAINVIEW_HPP

mainView.cpp

#include <gui/main_screen/mainView.hpp>

mainView::mainView()
{

}

void mainView::setupScreen()
{
    analogHours = 10;
    analogMinutes = 10;
    analogSeconds = 0;
    mainViewBase::setupScreen();
}

void mainView::tearDownScreen()
{
    mainViewBase::tearDownScreen();
}

void mainView::handleTickEvent()
{
    tickCounter++;

    if (tickCounter % 60 == 0)
    {
        if (++analogSeconds >= 60)
        {
            analogSeconds = 0;
            if (++analogMinutes >= 60)
            {
                analogMinutes = 0;
                if (++analogHours >= 24)
                {
                    analogHours = 0;
                }
            }
        }
        analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds);
    }
}

在上面的代码中,首先是覆盖实现了虚函数virtual void handleTickEvent(),定义了时分秒变量

因为handleTickEvent()是每一帧都会调用一次,对于模拟或者板卡配置来说,默认为每秒60帧,所以tickCounter计数到60,就代表过去了1秒,之后调用analogClock.setTime24Hour(analogHours, analogMinutes, analogSeconds)控制显示。

跑一下仿真看看

bandicam2023-12-2819-12-25-611.gif

效果不错,但是感觉指针有点生硬,下面我们给他指针加入一点小动画。

回到TouchGFX,对analogClock控件Animation项进行配置(这里配置仅供参考,大家可以根据自己实际效果进行调整)

微信截图_20231228191250.png

重新生成代码,回到VS进行仿真

bandicam2023-12-2819-13-22-803.gif

gif图有点失真,不过还是能看出指针回弹动画的,完美。

因为代码都写完了,也不涉及单片机层面开发,直接就能编译(TouchGFX这个开发流程简直无敌,以后GUI没有一个完备的上位机仿真是很难有市场的)。

23ea6a559135e802286a37dddd33064.jpg

效果完美,收工。

收藏 评论2 发布时间:2023-12-28 19:29

举报

2个回答
watershade 回答时间:2023-12-29 10:10:16

羡慕楼主的大圆屏

lospring 回答时间:2023-12-29 23:47:09

TouchGFX确实非常牛逼,学习了

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版