每月下旬的四到五天有一个工作量的低谷期,利用这段时间,我们再折腾一下arduino。这次我们做一个万年历。
一、所需材料
根据我们就地取材的原则,这次我们还是要充分利用现有材料:
材料表:
1、一个带I2C的LCD1602显示屏,用于显示日期、时间、星期等信息。
用arduino 做一个万年历
之所以要用带I2C的屏,是因为单独的LCD1602需要接12条线,除了VVC和GND外,占6个接口,而且还需要一个10K的电位器来调整屏的亮度,而使用带I2C的,一共有四条线就足够了一条VVC,一条GND,一条SDA,一条SCL,而且自带调节屏幕亮度的电位器。能让我们的万年历系统简洁不少。

2、一块arduino nano单片机。其它版本的也行,我一直用nano不是l因为我喜欢它,主要是上次一次买了五个,一直在杂物盒时放着。
用arduino 做一个万年历
3、一个DS3231时钟模块,用来为arduino提供时钟。
用arduino 做一个万年历
我用的是DS3231。这是一款高精度I2C实时时钟模块,带一个纽扣电池,用于在系统掉电时能够保存时间信息。这个模块具有集成的温度补偿晶体振荡器。它的寄存器能保存秒、分、时、星期、日期、月、年和闹钟设置等信息。还有月末日期和闰年补偿。时钟的工作格式为24小时或带AM/PM指示的12小时格式。我们的万年历需要从DS3231中取出年、月日、星期、时、分、秒及温度数据。
4、一个小喇叭,用来为闹钟发声用,这是我从一个旧收音机上拆下来的。
5、两个轻触按键开关配套两个220欧的电阻,用于手工设置日期时间的。
用arduino 做一个万年历
6、一块锂电池和一个充电模块,充电模块有两个作用:一是通过5v的手机充电器为锂电池充电,二是将锂电池的3.7v电压升到5v为单片机供电。
用arduino 做一个万年历

用arduino 做一个万年历

7、一个开关,用于控制电源通断。
用arduino 做一个万年历
二、连接示意图
1、供电系统示意图:
正常情况下,电池向充电板的5v输出提供电源,通过一个mini USB口给arduino供电,当我们用micro usb线给电池充电时,也会同时给arduino供电。
用arduino 做一个万年历
2、arduino和各模块的连接图:
用arduino 做一个万年历

三、程序源码
源码下载地址:
https://pan.baidu.com/s/1XuRiTCtXlPuleMD6E4Inbg
提取码:k63v

四、运行效果和操作说明
系统通电后,会在LCD显示相关信息,第一行为日期和星期缩写,第二行为时间和温度。但显示的日期时间为2000-01-01 00:00:00 星期一。这是DS3231的初始时间,我们需要自己设置时间。
长按设置键,2000的年份数字就会闪烁,按调整键就可以增加这个值,到99后再按就会回到00,完成后再次按设置键,就能设置月度,然后是日期、星期、时、分、秒都可以设置。
还有,DS3231可以保存两个闹钟,我们也可以设置闹钟时间,手机没电,就不拍图片了,各位自己折腾吧。