B题简直堪称弱智题目…
分两类说明一下:正规做法、非正规做法。
这里强调一下,看官方提供的材料清单中并没有RTC模块 ,可见并不是想让用正规的方法做呀!
一、正规做法:
1、说明:首先说明下这题在现实生活中 到底应用在哪里呢?
手机关机了,或者以前的手机把电池扣下来了,为什么开机时间仍然是对的呢?现在的智能手机可以从网上自动校准时间,而以前的手机通常需要自己设定时间,然后保存,再把电池扣下来,过半小时,再开机,发现时间仍然是对的 ,这是怎么回事呢?
这全仰仗了RTC,原来在手机内部还有一块小电池它是用来保证实时时钟(RTC)的运行,RTC是一个独立的定时器。 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。如果想了解的可以简要的看下这篇文章的介绍部分。
2、STM32例程:
为什么要提供STM32的例程呢?因为我之前准备的毕设里面就有实时时钟部分。如果大家不会STM32就不要去涉及!关注微信公众号,回复RTC实时时钟例程,即可。
说明:
(1)、该例程只有显示年月日的功能。
(2)、在此处设置时间。
3、Arduino正规做法:
PS:我猜一说有简单的方法就没人用这复杂的方法,所以也简略些,直接甩链接。
https://www.geek-workshop.com/forum.php?mod=viewthread&tid=847&highlight=RTC
.
二、嘿嘿嘿的做法:
直接讲最最最最简单的方法,算法最简单的,但是可能硬件部分麻烦一点,但是它依然是最最最最简单的方法。
1、元器件的准备:
电池、arduino、稳压模块、按键、OLED 屏幕
2、程序底层(使用到的知识):
(1)按键的使用:
知识点:digitalRead()
例程教学:网址
(2)OLED的使用:
OLED里面我们只需要学会显示数字还有:/即可。
下面的程序是显示1-100cm,既能显示数字也能显示字符了,搞明白了那oled部分就没问题了。
#include "U8glib.h" //加载显示库文件
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI 实例化
void setup() {
}
void loop() {
for(int i=1;i<101;i++){
u8g.firstPage(); //一下是显示实现部分
do {
u8g.setFont(u8g_font_fub30);//设置字体和自号,目前测试字号有fub14,17,20,30
u8g.setPrintPos(0, 50); //显示的位置
u8g.print(i);//显示变量i的值
u8g.setFont(u8g_font_fub14);//设置字体和自号
u8g.setPrintPos(95, 50); //显示的位置
u8g.print("cm");//显示cm字样
} while( u8g.nextPage() );
delay(100);//显示的时间间隔。
}
}`
说明:① 想显示什么数字就把i变成什么数字,那么显示时间是不是也是数字。② 字符cm可以显示了那么 :/是不是也是可以显示了。
以上部分就不在解释了,我怕挨出题人的打。
想继续了解oled其他玩法的同学,我送给大家两个网站,包含所有库函数:① 全英文最全:http://clz.me/u8glib/reference/ ② 全中文可能不咋全:https://geek-workshop.com/forum.php?mod=viewthread&tid=10634&page=1#pid71775
3、算法部分:
我要说明一点,根据《2、程序底层(使用到的知识)》,两个第一问已经做出来了,如果没做出来,先不要往下看了。
现在来解决两个第二问。
更改年月日时分秒是不是一回事啊,如果学会了修改任意一个就都会修改了啊。
下面我只写伪代码,自己转换成C语言去吧,我再多写点就出来了。
演示:修改月份为3:
~~~~ 只写两个 ~~~~
① 3个按键的算法:
上电—开始修改时间—>按下A按键–此时默认修改秒钟–>按下B按键–分钟被选中–>再按下B按键----时钟被选中–>再按下B按键----日被选中–>再按下B按键----月份被选中–>按下A按键–确定修改月份–>按下C按键–显示1–>再按下C按键–显示2–>-->再按下C按键–显示3–>按下A按键–确定月份改为3–>退出大循环,回到刚上电的程序。
② 8个按键的算法:
上电—按下月按键—>按下调按键–显示1–>再按下调按键–显示2–>再按下调按键–显示3–>按下确定按键—结束–>回到刚上电的状态
注意:
① 程序要有循环。(eg:在我调节月份的时候我不小心按多了一次,本来要3,却按多了一次变成4了,怎么办呢?对的,按到12的时候再循环回去变成1)
② 必须掌握语法:for、if(或switch)、break、continue等。
③时间一秒一秒的过去怎么做到的呢?延时即可,也可以自己调用定时器。但其实延时就是用的定时器计时的。
脱离现实直接写文章,如有错误之处还请指点批正!
脱离现实直接写文章,如有错误之处还请指点批正!