串口屏MINIC教程-回调函数使用说明V1.0

2022年4月23日 22点热度 0人点赞

通过MINIC教程DEMO讲述如何使用MINIC设置变量值。

工具/原料

  • 硬件平台(基本型(经济型、商业型)物联型、F型)
  • UI素材
  • MINIC编辑器

硬件平台

  1. 1

    该例程使用大彩基本型7寸串口屏DC80480B070为验证开发平台。

    END

UI素材准备

  1. 1

    准备好相应的美工UI。如图所示

    END

MINIC编辑器

  1. 1

    1. 上位机VisualTFT内部已集成了MINIC开发编译环境,点击菜单栏工具,选择MINIC编辑器,如图所示。

  2. 2

    2. 打开编辑器后,Visual TFT画面如图所示;

    END

实现功能

  1. 1

    教程DEMO中功能的实现步骤如下:

    1. 新建工程;

    2. 配置MODBUS协议;

    3. 画面配置;

    4. 运行预览。

  2. 2

    1.1.1 新建工程

    打开VisualTFT软件的菜单栏【文件】→【新建工程】,弹出新建工程窗口,设置工程名称、路径、 设备型号,点击【确定】,如图所示;

  3. 3

    1.1.2 MODBUS协议配置

    1. 点击软件VisualTFT菜单栏中的【工具】并选择【协议与变量设置】,如图所示;

  4. 4

     在“协议与变量设置”窗口中,先点击左侧的【协议设置】,然后在右侧【启用协议】选择“启用”,【协议类型】选择“MODBUS从机协议”,协议配置详细如图 所示。

  5. 5

    配置协议完成后,点击【变量定义】,然后点击“添加”按钮添加变量,详细配置如图所示;

  6. 6

    1.1.3 配置工程画面

    1. 首页画面配置

    画面中放置六个按钮并设置为切换画面属性,分别指向相对应的画面,如图所示;

  7. 7

    2. on_init画面配置

    (1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加两个保存寄存器,寄存器地址分别为0和1并分别命名为“电压”和“电流”,如图1所示;

    (2) 将画面中文本控件1、2分别绑定变量“电压”、“电流”,如图2所示。

  8. 8

    (3) 画面功能:系统初始化时调用函数对变量赋值。对应的功能函数编写程序如程序清单 1所示;

    程序清单 1  on_init程序

    /**************************************************************************

    ** 函数:on_init

    ** 功能:系统执行初始化

    ** 注意:局部变量定义,只能在函数的最前面定义

    ***************************************************************************/

    void on_init()

    {

    //

    // 画面:on_init

    // 功能:初始化电压为10、电流为2

    //

    "电压" = 10;

    "电流" = 2;

     ......

    }

  9. 9

    3. on_systick画面配置

    (1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加一个保存寄存器,寄存器地址为2并命名为“运行时间”,如图 1所示;

    (2) 将画面中文本控件1绑定变量“运行时间”,如图2所示;

  10. 10

    (3) 画面功能:系统运行后,每一秒调用一次on_systick,在on_systick函数内添加一个计数器,可以算出运行时间。对应的功能函数编写程序如程序清单 2所示。

    程序清单 2  on_systick

    /**************************************************************************

    ** 函数:on_systick

    ** 功能:定期执行任务(1秒1次)

    ** 局部变量定义,只能在函数的最前面定义

    ***************************************************************************/

    void on_systick()

    {

    //

    // 画面:on_systick

    // 功能:每次增加一秒

    // 注意:局部变量定义,只能在函数的最前面定义

    //

    ++"运行时间";

     

    }

  11. 11

    4. on_timer画面配置

    (1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加一个保存寄存器,寄存器地址为3并命名为“计数”,如图 1所示

    (2) 将画面中文本控件3绑定变量“计数”,如图 2所示。

  12. 12

    (3) 画面功能:按下开启定时器后,按照设定的时间循环调用定时器函数on_timer,每次调用都让计数器自加一,通过绑定文本控件将计数器的值在画面中显示出来,对应的功能函数编写程序如程序清单 3和程序清单 4所示

    程序清单 3  on_timer程序

    void on_timer(int timer_id)

    {

     

    if(timer_id == 0)

    {

    //

    //画面:on_timer

    //功能:计数器,记录定时器触发次数

    //注意:局部变量定义,只能在函数的最前面定义

    //

    "计数"++;

    }

    }

     

    程序清单 4  按钮触发函数

    /****************************************************************************

    ** 函数:on_control_notify

    ** 功能:控件值更新通知

    ** 参数:screen_id,画面ID

    ** 参数:control_id,控件ID

    ** 参数:value,新值

    ** 注意:局部变量定义,只能在函数的最前面定义

    ****************************************************************************/

    void on_control_notify(int screen_id,int control_id,int value)

    {

     

    if(screen_id == 3)

    {

    //

    // 功能:按钮控制开启定时器和停止定时器

    // 函数:start_timer(timer_id, timeout, countdown, repeat)

    // 函数功能:启动定时器

    // 参数:    timer_id,    定时器ID;

    //           timeout,     超时时间;

    //          countdown,   1顺计时,0倒计时

    //           repeat        计时次数,0无限循环

    //

    if(control_id == 1 && value == 1)

    {

    start_timer(0, 1000, 1, 0 );

    }

    //

    // 函数:stop_timer(timer_id)

    // 函数功能:启动定时器

    // 参数:    timer_id,    定时器ID;

    //

    if(control_id == 2 && value == 1)

    {

    //停止定时器

    stop_timer(0);

    }

    }

    ......

    }

  13. 13

    5. on_variant_update 画面配置

    (1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加三个保存寄存器,寄存器地址分别为4、5、6并将寄存器分别命名为“速度”、“时间”、“里程”,如图1所示

    (1) 将画面中文本控件1、2、3分别绑定变量“速度”、“时间”、“里程”,如图2所示

  14. 14

    (3) 画面功能:当变量发生变化后会触发此函数,对应的功能函数编写程序,如程序清单 5所示

    程序清单 5  变量更新回调函数

    /**************************************************************************

    ** 函数:on_variant_upate

    ** 功能:串口通信导致变量更新时,执行此函数

    ** 注意:局部变量定义,只能在函数的最前面定义

    ***************************************************************************/

    void on_variant_upate()

    {

    //

    //功能:操作符'@'用于判定某个寄存器是否发生改变

    //       速度或者时间发生变化时,重新计算里程

    //注意:局部变量定义,只能在函数的最前面定义

    //

    if(@"速度" || @"时间")           

    {

    "里程" = "速度" * "时间";

    }

    }

  15. 15

    6. on_control_notify 画面配置

    (1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加一个保存寄存器,寄存器地址为7并命名为“通知次数”,如图 1所示

    (2) 将画面中文本控件7绑定变量“通知次数”,如图 2所示;

  16. 16

    (4) 画面功能:每次操作控件都会相应调用一次on_control_notify,通过一个计数器将每次触发都统计起来,并绑定文本控件在画面中显示次数。对应的功能函数编写程序,如程序清单 6所示

    程序清单 6  on_control_notify 程序

    /****************************************************************************

    ** 函数:on_control_notify

    ** 功能:控件值更新通知

    ** 参数:screen_id,画面ID

    ** 参数:control_id,控件ID

    ** 参数:value,新值

    ** 注意:局部变量定义,只能在函数的最前面定义

    ****************************************************************************/

    void on_control_notify(int screen_id,int control_id,int value)

    {

         ......

    if(screen_id == 5)

    {

    if(control_id == 1)              //运行按钮

    {

    if(value == 0)     //弹起通知

    {

    "通知次数" ++;          

    }

    else if(value == 1)   //按下通知

    {

    "通知次数" ++;           

    }

    else if(value == 2)          //长按通知

    {

    "通知次数" ++;

    }

    }

    else if(control_id == 2)   //文本控件

    {

    "通知次数" ++;               

    }

    else if(control_id == 3)         //图标控件

    {

    if(value == 0)

    {

    "通知次数" ++;           //弹起通知

    }

    else if(value == 1)

    {

    "通知次数" ++;           //按下通知

    }

    }

    else if(control_id == 4)  //选择控件

    {  

    "通知次数" ++;               

    }

    else if(control_id == 5)      //菜单

    {  

    "通知次数" ++;              

    }

    else if(control_id == 6)   //滑块

    {  

    "通知次数" ++;              

    }

    }

    }

    END

注意事项

  • 请注意硬件平台是否符合要求
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论