challis
发表于 2024-1-27 23:02:36
接下来是通过按钮控制模式切换以及修改时间,新建一个button.h的文件,用来处理按钮功能
challis
发表于 2024-1-27 23:04:41
按钮+的功能为:正常模式(Mode_Normal)无响应,如果是修改分钟(Mode_Change_Minute)的话,则增加1分钟,到60自动置0,如果是修改小时(Mode_Change_Hour)的话,则增加1小时,到24自动置0
uchar Btn_Up_Pressed()
{
switch(mode)
{
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;
}
second = 0;
return 1;
}
challis
发表于 2024-1-27 23:05:44
模式按钮就比较简单了,直接根据当前模式,来切换到下一个模式,按钮响应函数的返回值都是代表了是否需要刷新显示
uchar Btn_Mode_Click()
{
switch(mode)
{
case Mode_Normal:
mode = Mode_Change_Minute;
break;
case Mode_Change_Minute:
mode = Mode_Change_Hour;
break;
case Mode_Change_Hour:
mode = Mode_Normal;
break;
}
return 1;
}
challis
发表于 2024-1-27 23:07:57
按钮响应函数准备放在timer3中进行调用,简单起见,没有添加按键防抖动,timer3是100ms调用一次,好像加不加抖动的影响都不大
challis
发表于 2024-1-27 23:17:15
添加Button_OnTimeOut函数,当mode键按下时,btn_mode_ts置一.当按钮释放时,检测btn_mode_ts如果为1,则响应mode_click函数,且将btn_mode_ts置一,按钮+的逻辑也一样uchar Button_OnTimeOut(uchar btn_up,uchar btn_mode)
{
need_update = 0;
if(btn_mode)
{
if(btn_mode_ts)
{
need_update += Btn_Mode_Click();
btn_mode_ts = 0;
}
}else
btn_mode_ts += 1;
if(btn_up)
{
if(btn_up_ts)
{
need_update += Btn_Up_Pressed();
btn_up_ts = 0;
}
}else
btn_up_ts += 1;
return need_update;
}
challis
发表于 2024-1-27 23:21:10
在timer3中添加函数调用,并且判断是否需要刷新,如果需要,则调用SetSeg4Bit()函数来刷新
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_Normal)
AddSec();
is_show_dot = !is_show_dot;
SetSeg4Bit();
t3_iter = 0;
}
else if(need_update)
SetSeg4Bit();
challis
发表于 2024-1-27 23:28:06
接下来是动手时间,将2个按钮一端接地,另一端分别接P10和P11
如图:
challis
发表于 2024-1-27 23:28:57
烧录,测试,发现功能正常
challis
发表于 2024-1-27 23:29:55
有个问题,就是按钮一次一次按,在大量调整时间的时候比较麻烦,要是按钮+能持续响应就好了,这块调整逻辑代码就行,硬件部分不用动
challis
发表于 2024-1-27 23:31:59
每次当按钮按下时检测,当btn_up_ts=0时才允许调用对应功能函数,且将btn_up_ts设置为0x01<<3,并且每次都将btn_up_ts = btn_up_ts>>1,这样,持续按键的话就是300ms响应一次函数了
btn_up_ts = btn_up_ts>>1;
if(btn_up)
{
btn_up_ts = 0;
}else
{
if(!btn_up_ts)
{
need_update += Btn_Up_Pressed();
btn_up_ts = 0x01<<3;
}
}
页:
1
2
3
4
[5]
6
7
8
9
10
11