在正常模式按下“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]
至此,程序部分的设计讲完了,谢谢大家一直关注到现在。设计中还有不足之处,希望大家能提出自己的意见及建议,能把智能温控器完善得更好。后续还将会上传一些和温控器相关的资料,希望大家继续关注这个开源项目!
开源在继续!
共3条
1/1 1 跳转至页
智能温控器(十一)

关键词: 智能 温控器
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 |