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

2019-10-23来源: eefocus关键字:MSP430  RTC模块  DS2321  数字时钟

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


所需的材料

●    MSP430开发板

●    DS3231 RTC模块

●    电位器10k

●    LCD模块1602

●    连接导线

●    面包板


什么是RTC?

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



将DS3231 RTC与MSP430进行连接

基于MSP430微控制器的数字时钟的电路图如下。如前所述,DS3231通信方式采用I2C,它包含一个串行时钟(SCL)和一个串行数据(SDA)引脚,该引脚必须连接到我们的MSP430的引脚9上的I2C引脚(引脚 2.1 、SCL)和引脚10(引脚2.2、SDA)。


MSP430能够提供3.3V的Vcc,但我们需要5V来连接LCD和RTC模块。所以,我们将在USB电缆连接器有一个跳线,名为TP1。你可以从那里得到5V。


使用MSP430连接RTC模块的电路图如下:



为RTC模块编程MSP430

在这里我们使用Energia IDE进行编程。它与Arduino IDE相同并易于使用。如果您对MSP430和energia IDE不熟悉,那么请参考链接:使用Energia IDE开发MSP430G2微控制器入门指南 - 闪烁LED。为了连接RTC模块,我们需要这个电路板的库。从此链接下载RTC库,然后进行安装。

我们还需要Wire(用于I2C通信)和liquidcrystal库,它们都预装在Energia IDE中。


本文最后给出了此MSP430数字时钟的完整代码。代码简单易懂。这里我们简单介绍它的几个部分。


首先,我们必须包括必要的库。

下面的库用于RTC模块和MSP430之间的I2C通信。这个库中已经定义了SDA和SCK引脚,所以我们不必单独声明这些引脚。

  1. #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开发板中,运行效果如下:





代码

本篇文章使用的完整代码如下所示:

  1. #include

  2. #include "RTClib.h"

  3. #include

  4. RTC_DS3231 rtc;

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

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

  7. void setup () {

  8. lcd.begin(16, 2);

  9.   lcd.setCursor(3,0);

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

  11.   delay(3000);

  12.   lcd.clear();

  13.   rtc.begin();

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

  15. }


  16. void loop () {

  17.     DateTime now = rtc.now();

  18.     lcd.clear();

  19.     lcd.setCursor(3,0);

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

  21.     Serial.print('/');

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

  23.     lcd.print("/");

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

  25.     lcd.print("/");

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

  27.     lcd.setCursor(1,5);

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

  29.     lcd.print(",");

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

  31.     lcd.print(":");

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

  33.     lcd.print(":");

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

  35.     delay(1000);

  36. }


关键字:MSP430  RTC模块  DS2321  数字时钟 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic478059.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:使用MSP430G2 LaunchPad开发板驱动伺服电机的方法
下一篇:使用MSP430G2 LaunchPad开发板连接步进电机的方法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430G2553与MSP430F5336系列单片机总结[4]——比较器B的使用
比较器B是什么,顾名思义,它其实就是用来比较模拟电压+输入端和-输入端的电压大小,然后设置输出信号CBOUT的值的,如果 + 端电压高于 - 端电压,则CBOUT置高,否则置低。主要的控制寄存器有CBCTL0,CBCTL1,CBCTL2,CBCTL3,CBINT,CBIV,在MSP430G2553中没有比较器B,但是F5336中有,所以接下来的代码全都是F5336的比较器B使用程序:1.比较器B输入通道CB0接外部模拟输入信号,并且引至比较器+输入端,内部参考电压发生器利用共享电压源产生2.0V参考电压。最后当CB0输入模拟信号电压高于2.0V时,CBOUT输出高电平,当CB0输入模拟信号电压低于2.0V时,输出低电平
发表于 2019-11-06
怎么用keil5实现MSP432E401Y点灯
**第一步**先去官网下载芯片包在keil这个序列中选择TI公司相对应的芯片包下载后在pack installer->import->I agree ->finish出现绿色图标,就代表成功。第二步下载模板模板链接打开工程,选择正确的芯片出现下载失败或者没法编译时选择正确的编译器版本插好线接下来Debug的配置是选择正确的芯片flash然后点击编译下载就好了第三步下面两个网站可以下载资料开发板资料芯片资料从开发板原理图可以知道LED灯的引脚接下来是简单流水灯
发表于 2019-11-06
怎么用keil5实现MSP432E401Y点灯
MSP432E401Y-PWM的生成和占空比的调整
 * MSP432E4 Empty Project * * Description: An empty project that uses DriverLib * *                MSP432E401Y *             ------------------ *         /||          
发表于 2019-11-06
MSP432时钟系统CS
MSP432共有六个时钟源,五个时钟,下面分别由我来介绍一下时钟源分别有以下几个LFXTCLK:低频振荡器(LFXT),可与低频32768-Hz手表配套使用,晶体,标准晶体,谐振器,或外部时钟源在32千赫或以下的范围。当在旁路模式下,LFXTCLK可以由32 khz或以下的外部方波信号驱动的范围内。HFXTCLK:高频振荡器(HFXT),可与1-MHz至48-MHz范围内的标准晶体或谐振器一起使用。在旁路模式下,HFXTCLK可以通过外部方波信号驱动。DCOCLK:内部数字控制振荡器(DCO),默认频率为可编程频率和3 mhz频率。VLOCLK:内部极低功率低频振荡器(VLO),典型频率为9.4 khzREFOCLK:内部低功率
发表于 2019-11-06
MSP432E401Y单片机智能小车测速功能
 * MSP432E401Y * Description:本函数实现定时和测速功能   * 引脚:PD0->编码器输入信号 *         * Author: Robin.J***************************************************************************//* DriverLib Includes */#include <ti/devices/msp432e4/driverlib/driverlib.h>/* Standard
发表于 2019-11-06
MSP432学习笔记:IAR的环境配置(官方demo程序的测试)
近来入手一块MSP432,折腾了一天,终于把官方demo程序导入IAR,可以愉快的写代码了,以下是我个人的解决办法。首先,如果要使用IAR对TI的单片机进行开发,首先要下载对应的单片机型号的MSPWARE,本人目前使用的是TI的MSP432P401R的launchpad,对应的MSPWARE的下载地址为msp432ware下载地址,下载完成后默认路径安装即可,安装完成后可以在安装路径下找到下图的文件IAR的下载安装在这里就不做赘述了,需要注意的是IAR的版本应该为IAR for ARM版本,这个千万不能搞错,否则可能会吃很多问题,不能正常运行。正确安装完IAR后应该是这个样子的,我现在安装的是最新的版本,测试没有问题准备工作完成
发表于 2019-11-06
MSP432学习笔记:IAR的环境配置(官方demo程序的测试)
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved