【MATLAB】APP Designer 定时器的基本使用(Timer)

定时器功能强大,本文记录了一个简单使用的案例。

功能描述

点击开始定时,到达既定的时间调用回调函数。
回调函数中将“数值显示”的值加一。
可以手动修改定时器的周期。

UI布局

在这里插入图片描述
其中:字符框均为数值框,而不是文本框。
组件名称
在这里插入图片描述

实现步骤

1.添加属性

在这里插入图片描述
这里我选私有属性
定时器的句柄

   properties (Access = private)
        Timer_id;        % 定时器id
   end

2.添加定时器控制函数

在这里插入图片描述
这里我选私有函数

methods (Access = private)
        
       % 定时器初始化,重复模式
        function timer_init(app)
            app.Timer_id = timer;
            app.Timer_id.StartDelay = 0.01; % 开启的延时生效时间
            app.Timer_id.Period = 1.0;% 周期
            app.Timer_id.ExecutionMode = 'fixedSpacing';
            app.Timer_id.TimerFcn = @(~, ~) timer_handler(app);
        end
    
        % 定时器启动
        function timer_start(app)
            start(app.Timer_id);
        end
    
        % 定时停止
        function timer_stop(app)
            stop(app.Timer_id);
        end
    
        % 删除定时器
        function timer_delete(app)
            delete(app.Timer_id);
        end
    
        %定时器回调
        function timer_handler(app)
            %执行定时器任务
            app.EditField.Value = app.EditField.Value +1;
        end
    end
一些概念的解释:
  • Period
    定时器定时的周期。
  • StartDelay
    开始定时器时与启动倒计时之间的间隔。
    举例:StartDelay = 4,Period = 2
    start(app.Timer_id);会先等待StartDelay 的4s,然后倒计时Period的2s,再过2s会则会调用TimerFcn 的回调函数进行处理。
  • ExecutionMode
    指定定时器的触发方式(触发一次,还是循环触发……)总共有四种方式,根据实际需求选择

sigleShot;只执行一次,执行后会自动关闭定时器。其他模式可以循环执行
fixedDelay;上一次TimerFcn执行完毕时刻到下一次TimerFcn被加入队列时刻之间的间隔
fixedRate;上一次开始执行到下一次被加入队列之间的间隔
fixedSpacing: 前后两次被加入到执行语句队列时刻之间的间隔

  • delete和修改周期
    删除定时器,要在定时器停止后,才能进行删除或修改周期。

3.初始化定时器

右键app.UIFigure添加回调函数

        % Code that executes after component creation
        function startupFcn(app)
            timer_init(app);
          
        end

在软件打开后,会进行定时器的初始化。

4.开始或停止定时器

添加停止按钮的按键回调。(这个按钮使用的是状态按钮)

       % Value changed function: Button_Contrl
        function Button_ContrlValueChanged(app, event)
            value = app.Button_Contrl.Value;
            if value == 1
                app.Button_Contrl.Text = '停止';
                timer_start(app);
            else
                app.Button_Contrl.Text = '开始';
                timer_stop(app);
            end
        end

5.设置定时器周期

添加对应按钮的回调函数即可,
注意是先停止,才能修改。

        % Button pushed function: Button_SetPeriod
        function Button_SetPeriodPushed(app, event)
            timer_stop(app);
            app.Timer_id.Period = app.EditField_PeriodValue.Value;
            timer_start(app);
        end

添加数值清零的回调函数。

      % Button pushed function: Button_Clear
        function Button_ClearPushed(app, event)
            app.EditField_Show.Value = 0;
        end

6.设置软件关闭回调

软件关闭的时候,释放定时器

        function UIFigureCloseRequest(app, event)
            
            % 停止定时器,然后删除
            timer_stop(app);
            timer_delete(app);
            
            
            delete(app);
            
        end

实验结果

点击开始按钮
在这里插入图片描述
点击清零,数据清0.
在这里插入图片描述
设置定时周期0.2,数值增加的速度明显变快。
在这里插入图片描述
点击停止,定时器停止,数值不再增加。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44078824/article/details/122258372