Arduino 入门项目系列 (2) - 简易电子时钟
2018-10-17 本文已影响0人
捡个七
这周主要学习 DS1302 时钟模块的使用,并用其搭建一个简易的电子时钟,此篇文章主要参照参考文章[2]。
硬件准备
- Arduino UNO 一个
- DS1302 时钟模块一枚
- 1602LCD一块(附带 PCF8574T 转接板)
- 面包板一块
- 连接线若干
软件准备
- Arduino IDE
-
RTC Virtuabotix Library(需咳血上网)
- LCD i2c Library(需咳血上网)
电路连接
- DS1302 的连线:VCC ——> 5V,GND ——> GND,CLK ——> 4,DAT ——> 3,RST ——> 2
- LCD 的连线:VCC ——> 5V,GND ——> GND,SDA ——> A4,SCL ——> A5
实现代码
/*
* 搭建简易的电子时钟
*/
#include <virtuabotixRTC.h> // 驱动 RTC 模块需要的库
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//引脚连线: CLK -> 4 , DAT -> 3, Reset -> 2
virtuabotixRTC RTC(4, 3, 2);
void setup() {
Serial.begin(9600);
lcd.init(); // 初始化 LCD
lcd.backlight(); // 打开背光
lcd.home ();
// 设定时间,分别:秒,分,时,星期,日,月,年
RTC.setDS1302Time(30, 28, 17, 3, 17, 10, 2018);
//初次烧录时,需执行这行代码,之后需要注释掉
}
void loop() {
lcd.clear(); // 清除屏幕后,从 RTC 模块中获取时间,然后打印到 LCD 上
RTC.updateTime();
lcd.setCursor(0,0);
lcd.print(RTC.dayofmonth);
lcd.print("/");
lcd.print(RTC.month);
lcd.print("/");
lcd.print(RTC.year);
lcd.setCursor(0,1);
lcd.print(RTC.hours);
lcd.print(":");
lcd.print(RTC.minutes);
lcd.print(":");
lcd.print(RTC.seconds);
delay(1000);
}
烧录代码
代码编译完没问题后,点击图中所选按钮将其上传至 Arduino UNO 板上。烧录没问题后,就可以在 LCD 上观察到结果了。
实际结果
心得总结
对于驱动 DS1302 时钟模块的库有好多种,但大多数方法是差不多的。这个简易的时钟虽然可以根据设定的时间来显示实时的时间,但是需要注意:初次运行的时候需要设置好时间,之后需要把设定时间的那行代码注释掉。因为时钟模块自带电池,在 Arduino 板子掉电后,还是能继续计时的,所以插上电后还是实时的时间。如果在校准时间之后,还是不能正确的显示时间的话,可以在 DS1302 时钟模块的引脚增加一个电阻。下次按照参考文章[1]的方法试试外部中断的方法来校准时间。
参考文章
[1]. 第20课 DS1302时钟模块与外部定时器
[2]. How to simply use DS1302 RTC module with Arduino board and LCD screen