Arduino Uno零基础入门学习笔记——LCD1602屏+DS1302时钟

一、电路连接

LCD1602IIC

LCD1602IIC引脚Arduino引脚
VCC5V
GNDGND
SDAA4
SCLA5

我这里的LCD1602是IIC的,所以只需要4根线

在这里插入图片描述

DS1302

DS1302引脚Arduino引脚
VCC5V
GNDGND
RSTA0(14)
DATA1(15)
SCKA2(16)

二、代码

记得提前安装DS1302的库
DS1302

#include <DS1302.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h> //引用I2C库
 
char buf1[50];
char buf2[50];

//设置LCD1602设备地址,这里的地址是0x27,一般是0x20,或者0x27,具体看模块手册
LiquidCrystal_I2C lcd(0x27,16,2); //这里是0x27
DS1302 rtc(14, 15, 16); //对应DS1302的RST,DAT,CLK

void initRTCTime(void)//初始化RTC时钟
{
  rtc.writeProtect(false); //关闭写保护
  rtc.halt(false); //清除时钟停止标志
  Time t(2022, 12, 15, 17, 21, 50, 4); //新建时间对象 最后参数位星期数据,周日为1,周一为2以此类推
  rtc.time(t);//向DS1302设置时间数据
}

void printTime()//打印时间数据
{
  Time tim = rtc.time(); //从DS1302获取时间数据
  
  snprintf(buf1, sizeof(buf1), "%04d-%02d-%02d ",
           tim.yr, tim.mon, tim.date
           );
  snprintf(buf2, sizeof(buf2), "%02d:%02d:%02d",
           tim.hr, tim.min, tim.sec);

  Serial.println(buf1);
  Serial.println(buf2);
}

void setup() {
  Serial.begin(9600);

  //新模块上电需要设置一次当前时间,
  //下载完成后需屏蔽此函数再次下载,否则每次上电都会初始化时间数据
  initRTCTime();
  lcd.init();                  // 初始化LCD
  lcd.backlight();             //设置LCD背景等亮

  lcd.setCursor(0,0); 
  lcd.print("    Clock    ");
  delay(2000);
  lcd.clear();

}

void loop() {
  printTime();
  delay(1000);
  
  Time tim = rtc.time(); //从DS1302获取时间数据
  lcd.setCursor(0,0);
  lcd.print(buf1);
  lcd.setCursor(0,1);
  lcd.print(buf2);
}

三、效果

请添加图片描述

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sol-itude

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值