分享心得,你我共同进步:
上一次介绍完了所有的子函数,这次来给大家介绍介绍主函数的功能。
主函数除了有初始化部分,还有分有两个功能模式。其主要功能请看下图。
进入开机界面后,会有两个功能菜单选择,一个是正常模式,一个是设置模式,开机界面后默认进入正常模式,按“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