challis
发表于 2024-1-28 22:26:54
模式按钮中添加对新增的4中模式进行处理:
当前为 Mode_Change_Hour 时,按按钮后变为 Mode_Clock 模式
当前为 Mode_Clock 时,按按钮后变为 Mode_Clock_Change_Minute模式
当前为 Mode_Clock_Change_Minute时,按按钮后变为 Mode_Clock_Change_Hour模式
当前为 Mode_Clock_Change_Hour时,按按钮后变为 Mode_Normal模式
当前为 Mode_Clock_Alert时,按按钮后变为 Mode_Normal模式
uchar Btn_Mode_Click()
{
switch(mode)
{
case Mode_Clock_Alert:
mode = Mode_Normal;
break;
case Mode_Normal:
mode = Mode_Change_Minute;
break;
case Mode_Change_Minute:
mode = Mode_Change_Hour;
break;
case Mode_Change_Hour:
mode = Mode_Clock;
break;
case Mode_Clock:
mode = Mode_Clock_Change_Minute;
break;
case Mode_Clock_Change_Minute:
mode = Mode_Clock_Change_Hour;
break;
case Mode_Clock_Change_Hour:
mode = Mode_Normal;
break;
}
return 1;
}
challis
发表于 2024-1-28 22:28:27
AddSec函数中,添加返回值,如果分钟变化,则返回1,否则返回0
以便在主函数中进行判断是否到了闹钟时间
//增加1s,如果分钟变动,返回1
uchar AddSec()
{
if(second >= 59)
{
second = 0;
if(minute >= 59)
{
minute = 0;
if(hour >= 23)
hour = 0;
else
++hour;
}
else
++minute;
return 1;
}
else
++second;
return 0;
}
challis
发表于 2024-1-28 22:31:21
Timer3中添加对AddSec的后续处理:
只有模式不为Mode_Change_Minute和Mode_Change_Hour时才会增加秒数
AddSec如果返回1,代表分钟变了,则判断是否需要切换模式为Mode_Clock_Alert,或者切回Mode_Normal (闹钟响应提醒持续时间为1分钟)
//100毫秒@6.000MHz
void Timer3_Isr(void) interrupt 19
{
uchar need_update;
need_update = Button_OnTimeOut(BTN_UP,BTN_MODE);
++t3_iter;
if(t3_iter == 5)
{
is_show_dot = !is_show_dot;
SetSeg4Bit();
}
else if(t3_iter == 10)
{
if(mode != Mode_Change_Minute && mode != Mode_Change_Hour )
{
if(AddSec())
{
//如果分钟变动:
if(mode == Mode_Normal)
{
if(minute == clock_minute && hour == clock_hour)
mode = Mode_Clock_Alert;
}else if(mode == Mode_Clock_Alert)
{
if(minute != clock_minute || hour != clock_hour)
mode = Mode_Normal;
}
}
}
is_show_dot = !is_show_dot;
SetSeg4Bit();
t3_iter = 0;
}
else if(need_update)
SetSeg4Bit();
}
challis
发表于 2024-1-28 22:33:59
测试显示闹钟模式,以及修改闹钟时间:
challis
发表于 2024-1-28 22:34:28
测试闹钟到时间后的闪烁提醒效果:
challis
发表于 2024-1-28 22:35:02
忘记添加可以设置闹钟的开关了,我再去修改代码并调试一下
challis
发表于 2024-1-28 22:42:04
clock.h中新添加一个变量:clock_enable
uchar clock_minute = 0,clock_hour=0,clock_enable=0;
challis
发表于 2024-1-28 22:43:00
timer3中,分钟变化切换模式的代码中添加条件clock_enable
if(AddSec() && clock_enable)
{
//如果分钟变动:
if(mode == Mode_Normal)
{
if(minute == clock_minute && hour == clock_hour)
mode = Mode_Clock_Alert;
}else if(mode == Mode_Clock_Alert)
{
if(minute != clock_minute || hour != clock_hour)
mode = Mode_Normal;
}
}
challis
发表于 2024-1-28 22:43:48
按钮+中添加功能,如果是Mode_Clock模式,则修改clock_enable为!clock_enable
uchar Btn_Up_Pressed()
{
switch(mode)
{
case Mode_Clock_Alert:
mode = Mode_Normal;
break;
case Mode_Normal:
return 0;
case Mode_Change_Minute:
if(minute>=59)
minute = 0;
else
++minute;
break;
case Mode_Change_Hour:
if(hour>=23)
hour = 0;
else
++hour;
break;
case Mode_Clock_Change_Minute:
if(clock_minute>=59)
clock_minute = 0;
else
++clock_minute;
break;
case Mode_Clock_Change_Hour:
if(clock_hour>=23)
clock_hour = 0;
else
++clock_hour;
break;
case Mode_Clock:
clock_enable = !clock_enable;
break;
}
second = 0;
return 1;
}
challis
发表于 2024-1-28 22:44:17
烧录,测试-闹钟开关功能
页:
1
2
3
4
5
6
[7]
8
9
10
11