×
单片机 > 单片机程序设计 > 详情

使用MSP430连接RTC模块(DS2321)制作数字时钟

发布时间:2020-08-25 发布时间:
|

在本篇文章中,我们将使用MSP430连接RTC模块DS3231来制作一款数字时钟,然后在1602液晶显示屏上显示时间和日期。 MSP-EXP430G2是德州仪器提供的开发工具,也称为LaunchPad,用于学习和练习如何使用其微控制器。该电路板属于MSP430产品线,我们可以对所有MSP430系列微控制器进行编程。


所需的材料

●    MSP430开发板

●    DS3231 RTC模块

●    电位器10k

●    LCD模块1602

●    连接导线

●    面包板


什么是RTC?

RTC是一个实时时钟模块。它用于维护大多数电子项目的日期和时间。该模块具有自己的纽扣电池电源,即使主电源被移除或MCU被硬件复位,也可使用该纽扣电池电源维持日期和时间。所以一旦我们在这个模块中设置了日期和时间,它会一直保持下去。RTC的型号很多,如DS1307、DS3231等。

  • #include


  • 然后,我们包含了RTClib.h库用于RTC时钟以及LiquidCrystal.h用于LCD功能。

    1. #include "RTClib.h"

    2. #include    


    之后,我们必须创建一个实例来初始化我们的RTC模块。

    1. RTC_DS3231 rtc;


    然后制作一个大小为7的数组,并存储所有7天的名称。

    1. char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};


    这里是LCD显示器使用的MSP430的引脚声明:(RS(P2.0),EN(P1.4),D4(P1.5),D5(P2.3),D6(P2.4),D7 (P2.5))

    1. LiquidCrystal lcd(8 ,6, 7,11,12,13);   



    在void setup()中,我们初始化了LCD屏幕和RTC的接口,并指定了显示器的尺寸(宽度和高度),begin()需要在任何其他库命令之前调用。

    1. void setup () {

    2. lcd.begin(16, 2);

    3.    lcd.setCursor(3,0);

    4.   lcd.print("RTC Clock");

    5.   delay(3000);

    6.   lcd.clear();

    7.   rtc.begin();

    8.   //  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    9. }



    注意:在上述函数中,注释的行代码很重要。如果未设置时间和日期,请取消注释该行并上载该程序。此功能在编译时存储计算机的时间,因此请确保您的计算机的时间是正确的。


    现在,显示屏上显示的时间是正确的,但出现问题,每次重新启动/复位微控制器时,LCD都会显示您上传代码的时间。这是因为rtc.adjust()函数已经存储了计算机的时间,所以当您重置时,它会从那个时间开始。


    要解决这个问题,首先用rtc.adjust()函数上传程序,然后取消注释。然后立即评论同一行并再次上传程序。现在,您的日期和时间已经设置完毕,不会因复位微控制器而受到影响。


    在循环函数中,我们从RTC模块获取日期和时间,并将其存储在预定义的now变量中,并使用lcd.print()函数将其显示在LCD上。

    1. void loop () {

    2.     DateTime now = rtc.now();

    3.     lcd.clear();

    4.      lcd.setCursor(3,0);

    5.    lcd.print(now.day(), DEC);

    6.     lcd.print("/");….

    7. …….



    将代码下载到Arduino开发板中,运行效果如下:


  • #include

  • #include "RTClib.h"

  • #include

  • RTC_DS3231 rtc;

  • char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

  • LiquidCrystal lcd(8 ,6, 7,11,12,13);

  • void setup () {

  • lcd.begin(16, 2);

  •   lcd.setCursor(3,0);

  •   lcd.print("RTC Clock");

  •   delay(3000);

  •   lcd.clear();

  •   rtc.begin();

  •   //  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  • }


  • void loop () {

  •     DateTime now = rtc.now();

  •     lcd.clear();

  •     lcd.setCursor(3,0);

  •     Serial.print(now.year(), DEC);

  •     Serial.print('/');

  •     lcd.print(now.day(), DEC);

  •     lcd.print("/");

  •     lcd.print(now.month(), DEC);

  •     lcd.print("/");

  •     lcd.print(now.year(), DEC);

  •     lcd.setCursor(1,5);

  •     lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);

  •     lcd.print(",");

  •     lcd.print(now.hour(), DEC);

  •     lcd.print(":");

  •     lcd.print(now.minute(), DEC);

  •     lcd.print(":");

  •     lcd.print(now.second(), DEC);

  •     delay(1000);

  • }


  • 关键字:MSP430  RTC模块  DS2321  数字时钟

    『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

    热门文章 更多
    STM32单片机的复用端口初始化的步骤及方法