回答

收藏

[评测分享] 【STM32H735-DK 测评】TouchGFx控制LED亮灭及图标切换

#板卡评测 #板卡评测 246117 人阅读 | 0 人回复 | 2024-03-10

本帖最后由 eefocus_3914144 于 2024-3-10 19:35 编辑

【前言】
TouchGFX给用户提供了良好的界面设计,以及M-P-V的交互分享设计系统。这一篇主要介绍如果建立一个使用屏上的按键来实现对开发板上LED的亮与灭,同时同步国标的显示。
【界面设计】
1、在初始化的工程中添加一个toggle button,图标命名为ButOnOff。同时选择两个状态的背景图片,来指示开关的状态。

2、添加两个图片,重叠在一起,来指示灯的状态。

3、给togglebutton添加用户事件,首先新建用户事件,按下图一步一步创建好虚拟函数:

4、创建好界面所重新生成工程,并打开工程:

【代码实现】
我们由屏控制硬件的流程,是基于View->Presenter->Model的编程步骤。控制的函数由screenVide.cpp->Screen1Presenter.cpp->Model.cpp来逐步实现。
1、首先我们在Screen1View.hpp重写按键的函数:

然后在Screen1View.cpp中实现:
  1. void Screen1View::funButOnOff()
  2. {
  3.         bool butState;
  4.         butState = ButOnOff.getState(); //获取按键状态
  5.         presenter->setPoolLiget(ButOnOff.getState());  //更新状态
  6.         image_on.setVisible(butState); //更新图标显示与否
  7.         imageOFF.invalidate();  //刷新
  8. }
复制代码
在funButOnOff中,首先获取按键的状态,然后把参数更新到Presenter中的setPooliget函数。同时更新图标的显示状态,刷新图标,如果不刷新则无效。

2、在Screen1Presenter.hpp,我们声明该函数:

然后在Screen1Presenter.cpp中实现,在这个函数中,我们把按键的状态传递给model的userPooliget。

  1. void Screen1Presenter::setPoolLiget(bool state)
  2. {
  3.         model->userPooLiget(state);
  4. }
复制代码
3、接在model.hpp中声明该函数:

接着我们在mdoel.cpp中实现对灯的控制,首先我们要把按键初始化与相关控件的开发板的文件stm32h735g_discovery.c添加到工程,该文件在\Drivers\BSP\STM32H735G-DK目录下面,我们复制他并粘贴到工程中就行了,同时在model.cpp中引用他。
在model.cpp中添加对LED的控制函数,代码如下:
  1. void Model::userPooLiget(bool state)
  2. {
  3.         if(state)
  4.         {
  5.                 BSP_LED_On(LED1);
  6.         }
  7.         else
  8.         {
  9.                 BSP_LED_Off(LED1);
  10.         }
  11. }
复制代码
函数中我们通过对按键状态的值来实现对灯的开与关。
当然我们需要在main.c中初始化按键。
这样我们就实现了整个代码的编写。下载到开发板后成功实现了TouchGFX对硬件的实时控制。效果如视频所示。

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条