2019 年天津科技大学电子设计竞赛:算法与策略-----B题

版权声明: https://blog.csdn.net/qq_38351824/article/details/88702419

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等。

③时间一秒一秒的过去怎么做到的呢?延时即可,也可以自己调用定时器。但其实延时就是用的定时器计时的。


脱离现实直接写文章,如有错误之处还请指点批正!

猜你喜欢

转载自blog.csdn.net/qq_38351824/article/details/88702419
今日推荐