周天传完视频,周一就被管理员追啦,问我咋没发进度……最近实在太忙了。
来简单描述一下这次的进步点。
为了让小狼的时间机制正常运行,首先一定要琢磨它的RTC_B如何使用,好在有现成的库,因此我可以不多说了。
关键点:1——启动RTC,2——设置RTC,实际上,不调用库也可以,我的程序就没有用到那么多年月日的东西,暂时就按24小时来,所以只要设置小时分钟就足够了,于是就只是访问了这两个寄存器。于是除了RTC的init函数之外,我只是读写RTCHOUR和RTCMIN这两个寄存器就足够应付我目前对时间的要求啦。
接下来,就是对于整体的操作,包括设定时间和报时。我利用两个按键,一个作为Mode,切换模式(正常→小时设定→分钟设定→正常...),一个用来作为Set进行设定(正常模式报时,其他模式对设定值+1)。
于是我还需要一个简单的状态机来控制系统的模式。
写状态迁移控制器太麻烦了,这么个简单的状态迁移,用Switch就好了嘛——
- void main_stm(arg_t arg)
- {
- switch(main_stm_stat | arg)
- {
- case (ST_IDLE | EV_KEY_M):
- main_stm_stat = ST_RTC_H;
- tellStr[0] = 'a';
- tellStr[1] = 0;
- tellIndex = 0;
- spf_call_proc(PROC_MAIN, MAIN_START_CAST, PROC_CALL_SINGLE);
- break;
- case (ST_IDLE | EV_KEY_S):
- spf_call_proc(PROC_MAIN, MAIN_TELL_TIME, PROC_CALL_SINGLE);
- break;
- case (ST_RTC_H | EV_KEY_M):
- main_stm_stat = ST_RTC_M;
- tellStr[0] = 'm';
- tellStr[1] = 0;
- tellIndex = 0;
- spf_call_proc(PROC_MAIN, MAIN_START_CAST, PROC_CALL_SINGLE);
- break;
- case (ST_RTC_H | EV_KEY_S):
- spf_call_proc(PROC_MAIN, MAIN_SET_HOUR, PROC_CALL_SINGLE);
- break;
- case (ST_RTC_M | EV_KEY_M):
- main_stm_stat = ST_IDLE;
- spf_call_proc(PROC_MAIN, MAIN_TELL_TIME, PROC_CALL_SINGLE);
- break;
- case (ST_RTC_M | EV_KEY_S):
- spf_call_proc(PROC_MAIN, MAIN_SET_MIN, PROC_CALL_SINGLE);
- break;
- default:
- break;
- }
- }
复制代码
于是在主任务里,根据发来的事件,进行相应的处理就OK了。
最后分享一下相关的视频,很简单。夹杂在中间的音乐,完全是为了避免无聊……