这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 智能温控器(十)——心得分享

共3条 1/1 1 跳转至

智能温控器(十)——心得分享

菜鸟
2017-08-30 08:23:52     打赏

分享心得,你我共同进步:

      上一次介绍完了所有的子函数,这次来给大家介绍介绍主函数的功能。

      主函数除了有初始化部分,还有分有两个功能模式。其主要功能请看下图。

1.jpg

      进入开机界面后,会有两个功能菜单选择,一个是正常模式,一个是设置模式,开机界面后默认进入正常模式,按“KY1”键可以再正常模式和设置模式之间进行切换。在两种功能模式下,均是以while循环来实现的,以确保各种模式的稳定运行及互不干扰。

      在正常模式下会进行三种异常状况的检查,以及温度的实时刷新显示,还有控制继电器的输出。异常状况有三种,分别是传感器断开、传感器短路和温度超出量程范围等,当出现这三种异常状况时,将会启动蜂鸣器报警和红色LED指示灯报警,如果是传感器异常,数码管界面还将显示错误提示符“Err1”,如果是温度超出量程,将显示错误提示符“Err2”,提示符信息主要是方便用户检查系统错误,并及时排查错误,当错误排除后,系统将自动恢复。如果无任何异常,数码管界面将正常显示温度值,同时也将实测温度值与设定的温度值比较,实现温度控制。具体代码请看一下程序清单。

   /*
         *  正常模式下,只显示实时温度值,并检查键值进行模式切换;
         *  检查各种异常状况,随时发出报警;控制继电器输出。
         */
        #if MODE1_TEST
        while (uiMenuMode == MENU_NORMAL) {                             
            if (GuiCurKey == KY1) {
                GuiCurKey = 0;                                          /* 键值清零                     */
                uiMenuMode = MENU_SET;                                  /* 进入初始菜单设置             */ 
                uiModeState = MODE_SET_CURR;                            /* 起始默认为运行值设置         */
                showClear();                
                indiCharShow("SC");                                     /* 运行值设置状态显示           */
                break;
            }
            
            /*
             *  非正常状态判断
             */
            if (GuiCurVol > 3000 ) {
                uiErrFlag = 1;
                indiCharShow("Err1");                                   /* 显示错误代码,传感器断开     */
                buzzerON();                                             /* 蜂鸣器报警                   */
                ledrON();                                               /* 指示灯报警                   */
            } else if (GuiCurVol < 100) {
                uiErrFlag = 1;
                indiCharShow("Err1");                                   /* 显示错误代码,传感器短路     */
                buzzerON();                                             /* 蜂鸣器报警                   */
                ledrON();                                               /* 指示灯报警                   */
            } else if ((GuiCurVol < 413) || (GuiCurVol > 2873)) {
                uiErrFlag = 1;
                indiCharShow("Err2");                                   /* 显示错误代码,超出测量量程   */
                buzzerON();                                             /* 蜂鸣器报警                   */
                ledrON();                                               /* 指示灯报警                   */
            } else {
                uiErrFlag = 0;
                buzzerOFF();
                ledrOFF();
            }
            
            /*
             *  正常状态下显示
             */
            if (uiErrFlag == 0) {                                       /* 无错误状态                   */
                decTosegShow(GuiCurTemp, PV);                           /* 实时显示温度值               */
                decTosegShow(uiSetTempCurr * 10, SV);                   /* 当前温度设定值,*10补小数位  */
            }
            
            /*
             *  输出控制
             */
            if ((GuiCurTemp / 10) < (uiSetTempCurr - uiSetTempMove)) {
                relayON();                                              /* 继电器闭合                   */
                ledgON();                                               /* 输出指示灯亮                 */
            } else {
                relayOFF();                                             /* 继电器断开                   */
                ledgOFF();                                              /* 输出指示灯灭                 */
            }
        }
        #endif





关键词: 智能     温控器    

高工
2020-12-31 16:40:07     打赏
2楼

谢谢分享


工程师
2021-01-01 13:54:05     打赏
3楼

感谢您的分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]