美文网首页
Arduino 入门项目系列 (2) - 简易电子时钟

Arduino 入门项目系列 (2) - 简易电子时钟

作者: 捡个七 | 来源:发表于2018-10-17 16:58 被阅读0次

    这周主要学习 DS1302 时钟模块的使用,并用其搭建一个简易的电子时钟,此篇文章主要参照参考文章[2]

    硬件准备

    • Arduino UNO 一个
    • DS1302 时钟模块一枚
    • 1602LCD一块(附带 PCF8574T 转接板)
    • 面包板一块
    • 连接线若干

    软件准备

    电路连接

    • DS1302 的连线:VCC ——> 5V,GND ——> GND,CLK ——> 4,DAT ——> 3,RST ——> 2
    • LCD 的连线:VCC ——> 5V,GND ——> GND,SDA ——> A4,SCL ——> A5

    实现代码

    Arduino_Learning/SimpleClock

    /*
     * 搭建简易的电子时钟
     */
    #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

    相关文章

      网友评论

          本文标题:Arduino 入门项目系列 (2) - 简易电子时钟

          本文链接:https://www.haomeiwen.com/subject/sbslzftx.html