按键扫描处理程序流程图代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.3.2 按键扫描处理程序流程图
(1)按键扫描处理代码
/* 功能实现参数,参数mode为Key_Menu按键选择的功能模块*/
void Display(unsigned char mode)
{
switch (mode)//显示模式,0为显示实时温度,1为显示温度上限,2为显示温度下限
{
case 0: if (temperature < 0)//温度小于0
{
temperature = -temperature;//换为正温度
DisplaySeg(0x40, temperature % 1000); //0x40为负号
}
else DisplaySeg(codeSeg[temperature % 10000 / 1000], temperature % 1000);
break;
case 1: DisplaySeg(0x76, alarm_temp_H * 10); break;//显示温度上限,0x76为H字符
case 2: DisplaySeg(0x38, alarm_temp_L * 10); break;//显示温度下限,0x38为L字符
default:break;
}
}
/* 按键扫描和处理函数*/
void KeyScan(void)
{
if (Key_Menu == 0)//判断按键是否被按下
{
DelayMs(10);//延时10毫秒,去抖动干扰
if (Key_Menu == 0)//再次确认按键是否被按下
{
while(Key_Menu == 0)Display(menu);//等待按键释放,器件扫描数码管
menu++;//功能键,功能切换
if (menu == 3)menu = 0;//三个功能切换完
}
}
if (Key_Add == 0)
{
DelayMs(10);
if (Key_Add == 0)
{
while(Key_Add == 0)Display(menu);
switch (menu)
{
case 1: if (alarm_temp_H < 50)alarm_temp_H++;break;//加温度上限
case 2: if (alarm_temp_L < 27)alarm_temp_L++;break;//加温度下限
default:break;
}
}
}
if (Key_Dec == 0)
{
DelayMs(10);
if (Key_Dec == 0)
{
while(Key_Dec == 0)Display(menu);
switch (menu)
{
case 1: if (alarm_temp_H > 30)alarm_temp_H--;break;//减温度上限
case 2: if (alarm_temp_L > 7)alarm_temp_L--;break;//减温度下限
default:break;
}
}