技术:51单片机、Arduino、DS1302时钟、串口通信
 

概述

本文实现51单片机和Arduino串口实时显示时钟功能,让读者对DS1302能够更好的理解,这次功能也和上节课学到的串口通信运用在一起

详细

一、DS1302时钟

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器

二、51单片机串口显示时钟

硬件连接: 

初始化DS1302时钟后,DS1302内部会进行计时,这里我们通过datapros()把当前时间放入Data字符串中,代码如下:

void datapros() //时间读取处理转换函数
{
Ds1302ReadTime();
Data[0] = '0'+(TIME[2]/16); //时
Data[1] = '0'+(TIME[2]&0x0f);
Data[2] = ':';
Data[3] = '0'+(TIME[1]/16); //分
Data[4] = '0'+(TIME[1]&0x0f);
Data[5] = ':';
Data[6] = '0'+(TIME[0]/16); //秒
Data[7] = '0'+(TIME[0]&0x0f);
}

主函数只要每1s打印一次数据到串口就实现时钟功能了,代码如下:

void main()
{
int i;
Ds1302Init(); //Ds1302初始化
UsartInit(); //串口初始化
while(1)
{
datapros();
sprintf(time_data,"%c%c%c%c%c%c%c%c",Data[0],Data[1],Data[2],Data[3],Data[4],Data[5],Data[6],Data[7]); //合成字符串函数
printf(time_data);
printf("\n");
delay1s(); //1s打印一次时间
}
}

时钟功能如下图:

注:如果加了其他功能,代码量多了,不能每1s打印出时间了,那你可以试试用中断

三、Arduino串口显示时钟

硬件连接: 

编译烧写前,你还需要:

1. 右击Arduino软件->打开文件所在的位置

2. 将本项目代码文件夹中的DS1302文件夹复制到libraries文件夹中

这样我们代码中才能使用DS1302这个头文件,代码如下:

#include <stdio.h>
#include <string.h>
#include "DS1302.h" uint8_t RST = 5;
uint8_t DAT = 6;
uint8_t CLK = 7; /* 日期变量缓存 */
char buf[50];
char day[10]; /* 定义DS1302对象 */
DS1302 rtc(RST, DAT, CLK); void print_time()
{
Time t = rtc.time();
/* 星期转换成字符串 */
memset(day, 0, sizeof(day));
switch (t.day)
{
case 1: strcpy(day, "Sunday"); break;
case 2: strcpy(day, "Monday"); break;
case 3: strcpy(day, "Tuesday"); break;
case 4: strcpy(day, "Wednesday"); break;
case 5: strcpy(day, "Thursday"); break;
case 6: strcpy(day, "Friday"); break;
case 7: strcpy(day, "Saturday"); break;
}
/* 日期格式化 */
snprintf(buf, sizeof(buf), "%04d-%02d-%02d %02d:%02d:%02d %s", t.yr, t.mon, t.date, t.hr, t.min, t.sec, day);
/* 打印输出 */
Serial.println(buf);
} void setup()
{
Serial.begin(9600);
rtc.writeProtect(false);//关闭写保护
rtc.halt(false);
/* 初始化时间 */
Time t(2018, 12, 19, 12, 0, 0, 4);//最后一个为星期x,日:1、一:2、二:3.....
rtc.time(t);
rtc.writeProtect(true);//开启写保护
} void loop()
{
/* 串口显示时间 */
print_time();
delay(1000);
}

时钟功能如下图:

四、总结

本文实现51单片机和Arduino串口显示时钟功能,让读者对DS1302能够更好的理解,如果想深入了解DS1302具体实现和其他的功能,大家可以自行上网搜索资料,相信付出就会有收获。

五、项目结构图

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

Arduino和C51开发DS1302时钟的更多相关文章

  1. Arduino和C51开发OLED显示屏

    技术:51单片机.Arduino.OLED显示屏.U8glib   概述 OLED显示屏常常用作为智能产品的显示设备,本文简单介绍OLED显示屏的使用方法. 详细 代码下载:http://www.de ...

  2. Arduino和C51开发DHT11温湿度传感器

    技术:51单片机.Arduino.DHT11.温湿度传感器.传感器   概述 学习单片机离不开对传感器的学习,本文主要介绍DHT11温湿度传感器的使用方法,同学也可以了解更多的传感器,这对你以后开发产 ...

  3. Arduino和C51开发LCD1602显示屏

    技术:51单片机.Arduino.LCD1602   概述 本文介绍了LCD1602显示屏,并在LCD1602上显示字符串,对LCD1602常见的问题的解决和开发方法也做了简单介绍. 详细 代码下载: ...

  4. Arduino和C51开发光敏传感器

    技术:51单片机.Arduino.光敏传感器.PCF8591.AD/DA转换   概述 本文介绍了如何接收传感器的模拟信号和如何使用PCF8591 AD/DA转换模块对光敏传感器的模拟信号进行转换.讲 ...

  5. Arduino可穿戴开发入门教程(大学霸内部资料)

    Arduino可穿戴开发入门教程(大学霸内部资料) 试读下载地址:链接:http://pan.baidu.com/s/1mg9To28 密码:z5v8 介绍:Arduino可穿戴开发入门教程(大学霸内 ...

  6. spi接口的ds1302时钟芯片控制在lcd1602上显示

    spi接口的ds1302时钟芯片控制在lcd1602上显示                                                                        ...

  7. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》

    引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...

  8. x86 版的 Arduino Intel Galileo 开发板的体验、分析和应用

    1.前言 在今年(2013)罗马举办的首届欧洲 Make Faire 上,Intel 向对外发布了采用 x86 构架的 Arduino 开发板:Intel Galileo.这无疑是一个开源硬件领域的重 ...

  9. Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE

    Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE Windows平台下安装Arduino IDE Windows操作系统下可以使用安装向导和压缩包形式安装.下面详细讲解这 ...

随机推荐

  1. Round() 四舍五入 js银行家算法

    首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825;        ...

  2. 一个简易Asp.net网站日志系统

    前不久在网站上看到了网站日志访问记录组件UserVisitLogsHelp开源了! 这篇博客感觉还不错,就把源码download了下来,学习一下,发现里面的代码书写和设计并不是很好,于是自己改了改.自 ...

  3. FastReport.Net 入门

    任何一门编程技术入门体验都是以“Hello World”开始的,但我想再复杂一点的“Hello World”,才能算真正的入门.   FastReport.Net V1.2.76 ,vs2008 在 ...

  4. Regular Expression Matching leetcode java

    题目: Implement regular expression matching with support for '.' and '*'. '.' Matches any single chara ...

  5. android 桌面小工具(Widget)开发教程

    刚学做了哥Widget,感觉不错哦,先来秀下效果(用朋友手机截的图) 这个Widget会每隔5秒钟自动切换内容和图片,图片最好使用小图,大图会导致你手机桌面(UI)线程卡顿 教程开始: 1.首先创建一 ...

  6. javascript——选择行之后才可以进行控制操作

  7. 微信小程序--后台交互/wx.request({})方法/渲染页面方法 解析

    小程序的后台获取数据方式get/post具体函数格式如下:wx.request({}) data: { logs:[] }, onLoad:function(){ this.getdata(); } ...

  8. mongodb的用法

    关于新版(2.***)的c#用法,网上基本没有.昨天折腾半天,去构造server,发现现在新版本不需要了,文档是这样的,大概意思,无需像原来那样获取server,直接从client获取db就行了. h ...

  9. 微信小程序 - 滚动公告组件

    支持横轴.纵轴滚动. 点击下载:speaker

  10. 實戰ESXi 5設置MPIO 打造IP-SAN負載平衡容錯

    http://www.netadmin.com.tw/article_content.aspx?sn=1305100002 測試MPIO負載平衡及容錯移轉機制VMware vSphere ESXi主機 ...