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

共3条 1/1 1 跳转至

智能温控器(十一)

菜鸟
2017-08-30 08:18:57     打赏

    在正常模式按下“KY1”键,将切换到设置模式,默认是进入运行值设置模式,通过“KY3”键,可以切换不同参数值的设置模式。值得注意的是,在这里”KY1”键又有了一个新身份——确定键,在参数设置模式下,”KY1”是实现了确定键功能,当”KY1”实行完确定键的功能后,再按一次“KY1”键,即可切换回到正常模式下。在参数设置模式下,不同的参数设置将会有不同的提示符,以提醒用户当前设定的是哪个参数,“KY2”、“KY4”分别实现参数值的减1、加1功能,如果设置的参数超出了合理的范围(每种参数的范围均不一样),数码管将会显示错误信息“Err3”,这时需要重新设置参数值,直到在合理的范围之内,否则不能退出。当参数设置好之后,按下“KY1”键,方可按”KY3”键进行参数切换。
(由于帖子字数限制,下限值和回差值的case部分代码没贴出来,但是按照运行值和上限值的代码规律可以得出它们的代码。)
[mw_shl_code=c,true]        #if MODE2_TEST
        /*
         *  设定模式下,可进行温度运行值、上限值、下限值、回差值的设定,并有对应的状态显示;
         *  当设置值超出合理的范围时,显示错误信息。
         */
        while (uiMenuMode == MENU_SET) {                                /* 参数设定模式                 */
            if (GuiCurKey == KY1) {
                GuiCurKey = 0;                                          /* 键值清零                     */
                uiMenuMode = MENU_NORMAL;                               /* 返回到正常模式               */                
                showClear();
                break;
            }
            if (GuiCurKey == KY3) {
                GuiCurKey = 0;                                          /* 键值清零                     */
                uiModeState++;                                          /* 设置模式切换                 */
                uiModeState &= 0x03;                                    /* 防止溢出                     */
            }
            if ((GuiCurKey == KY2) || (GuiCurKey == KY4)) {             /* 进入设置状态                 */
                uiSetFlag = 1;
            }
            switch (uiModeState) {                                      /* 不同设置模式                 */
                /*
             *  运行值设置模式
             */
            case MODE_SET_CURR:
                indiCharShow("SC");                                     
                uiSetTemp = uiSetTempCurr;
                                                                while (uiSetFlag == 1) {                                /* 设置参数,uiSetFlag默认为1   */
                    if (GuiCurKey == KY2) {
                        uiSetTemp--;
                        if (uiSetTemp > 0xFFFE) {                       /* 溢出清零                    */
                            uiSetTemp = 0;
                        }
                        GuiCurKey = 0;
                    }
                    if (GuiCurKey == KY4) {
                        uiSetTemp++;
                        GuiCurKey = 0;
                    }
                    if (GuiCurKey == KY1) {
                        uiSetFlag = 0;                                  /* 置0,退出设置状态            */
                        GuiCurKey = 0;
                    }
                    decTosegShow(uiSetTemp * 10, SV);                   /* 显示设定值,乘10补充小数点   */
                }
                if (uiSetTemp > uiSetTempMax) {                         /* 限制设定范围                 */
                    indiCharShow("Err3");
                    Delay(SystemFrequency / 4);
                    uiSetFlag = 1;                                      /* 置1,重新进入设置状态        */
                } else if (uiSetTemp < uiSetTempMin) {
                    indiCharShow("Err3");
                    Delay(SystemFrequency / 4);
                    uiSetFlag = 1;                                      /* 置1,重新进入设置状态        */
                } else {
                    uiSetFlag = 0; 
                }
                uiSetTempCurr = uiSetTemp;
                decTosegShow(uiSetTempCurr * 10, SV);                   /* 显示设定值,乘10补充小数点   */
                break;
                                                                /*
             *  上限值设置模式
             */
            case MODE_SET_MAX:
                indiCharShow("SH");                                     /* 当前设置模式提示             */
                uiSetTemp = uiSetTempMax;
            while (uiSetFlag == 1) {                                /* 设置参数,uiSetFlag默认为1   */
                    if (GuiCurKey == KY2) {
                        uiSetTemp--;
                        if (uiSetTemp > 0xFFFE) {
                            uiSetTemp = 0;
                        }
                        GuiCurKey = 0;
                    }
                    if (GuiCurKey == KY4) {
                        uiSetTemp++;
                        GuiCurKey = 0;
                    }
                    if (GuiCurKey == KY1) {
                        uiSetFlag = 0;                                  /* 置0,退出设置状态            */
                        GuiCurKey = 0;
                    }
                    decTosegShow(uiSetTemp * 10, SV);                   /* 显示设定值,乘10补充小数点   */
                }
                if (uiSetTemp > TEMP_MAX) {                             /* 限制设定范围                 */
                    indiCharShow("Err3");
                    Delay(SystemFrequency / 4);
                    uiSetFlag = 1;                                      /* 置1,重新进入设置状态        */
                } else if (uiSetTemp < (uiSetTempCurr + 1)) {
                    indiCharShow("Err3");
                    Delay(SystemFrequency / 4);
                    uiSetFlag = 1;                                      /* 置1,重新进入设置状态        */
                } else {
                    uiSetFlag = 0; 
                }
                uiSetTempMax = uiSetTemp;
                decTosegShow(uiSetTempMax * 10, SV);                    /* 显示设定值,乘10补充小数点   */
                break;
            default:
                break;
            }
        }
        #endif[/mw_shl_code]
    至此,程序部分的设计讲完了,谢谢大家一直关注到现在。设计中还有不足之处,希望大家能提出自己的意见及建议,能把智能温控器完善得更好。后续还将会上传一些和温控器相关的资料,希望大家继续关注这个开源项目!
    开源在继续!




关键词: 智能     温控器    

高工
2020-12-31 16:41:09     打赏
2楼

谢谢分享


工程师
2021-01-01 13:53:56     打赏
3楼

注释给的都挺到位的


共3条 1/1 1 跳转至

回复

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