电子钟的需求单
——页面1:Page==0
功能: 走时,实时时间显示
显示格式: 23.59.55(小数点,独占一格)
LED灯指示: DS0亮
按键功能: Key0:切换界面
Key1:由按键来控制DS6灯的亮灭
Key2:由按键来决定DS4灯的是否进行闪烁
Key3:关闭当次闹铃
——页面2:Page==1
功能: 时间调整,选择是调整小时,还是调整分钟
显示格式: 0:选择小时:5-01F 01; 1:选择分钟:5 01F-01 (8段码)
LED灯指示: DS1亮
按键功能: Key0:切换界面
Key1:选择调整参数,光标变迁 ,起始:调整小时值
Key2:对选中的参数,+1
Key3:对选中的参数,-1
——页面3:Page==2
功能: 闹铃设置,选择是设置小时,还是设置分钟
显示格式: 0:设置小时:nL-01 01; 1:设置分钟:nL 01-01 (8段码)
LED灯指示: DS2亮
按键功能: Key0:切换界面
Key1:选择设置参数,光标变迁 ,起始:设置小时值
Key2:对选中的设置参数,+1
Key3:对选中的设置参数,-1
------页面1的示例代码
//走时页面
case 0:
switch (KeyScan())
{
case KEY0_PRESS://切换到时间调整状态
Page = 1;
Adj_Time = 0; //进入此页面时的默认值为进入时的 小时 和 分钟 值,光标在小时前。
Adj_Hour = Hour;
Adj_Min = Min;
Button_Flag = 1;
break;
case KEY1_PRESS://切换到闹钟开关
Alarm_Flag = !Alarm_Flag;
HAL_GPIO_WritePin(DS_GPIO_Port, DS6_Pin, Alarm_Flag?DS_ON:DS_OFF);
Button_Flag = 1;
break;
case KEY2_PRESS://切换LED闪烁开关
Flash_Flag = !Flash_Flag;
if(!Flash_Flag)
{
HAL_GPIO_WritePin(DS_GPIO_Port, DS4_Pin, DS_OFF);
}
Button_Flag = 1;
break;
case WKUP_PRESS://关闭当次闹铃
HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, BEEP_OFF);
Button_Flag = 1;
break;
default:
break;
}
break;
------页面2的示例代码
//时间调整页面
case 1:
switch (KeyScan())
{
case KEY0_PRESS://切换到闹铃时间调整状态
Page = 2;
Button_Flag = 1;
break;
case KEY1_PRESS://切换选择调整参数
Adj_Time = !Adj_Time;
Button_Flag = 1;
break;
case KEY2_PRESS://对选中参数+1
if (!Adj_Time)
{
Adj_Hour = (Adj_Hour==23)?0:Adj_Hour+1;
}
else
{
Adj_Min = (Adj_Min==59)?0:Adj_Min+1;
}
Button_Flag = 1;
break;
case WKUP_PRESS://对选中参数-1
if (!Adj_Time)
{
Adj_Hour = (Adj_Hour == 0)?23:Adj_Hour-1;
}
else
{
Adj_Min = (Adj_Min == 0)?59:Adj_Min-1;
}
Button_Flag = 1;
break;
default:
break;
}
break;
-----------页面3的示例代码
//闹钟调整页面
case 2:
switch (KeyScan())
{
case KEY0_PRESS://切换到走时状态,前述调整的走时和闹铃时间将会生效,秒参数变为0。
Page = 0;
Hour = Adj_Hour;
Min = Adj_Min;
Sec = 0;
Button_Flag = 1;
break;
case KEY1_PRESS://切换选择调整参数
Adj_alarm = !Adj_alarm;
Button_Flag = 1;
break;
case KEY2_PRESS://对选中参数+1
if (!Adj_alarm)
{
Alarm_Hour = (Alarm_Hour==23)?0:Alarm_Hour+1;
}
else
{
Alarm_Min = (Alarm_Min==59)?0:Adj_Min+1;
}
Button_Flag = 1;
break;
case WKUP_PRESS://对选中参数-1
if (!Adj_alarm)
{
Alarm_Hour = (Alarm_Hour==0)?23:Alarm_Hour-1;
}
else
{
Alarm_Min = (Alarm_Min==0)?59:Alarm_Min-1;
}
Button_Flag = 1;
break;
default:
break;
}
break;