51单片机DS1302时钟

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

51单片机DS1302时钟

实现功能

数码管上显示电子时钟 时 分 秒,格式为“XX-XX-XX”(以 13点51分47秒 为例 )

单片机型号:STC89C52

DS1302介绍

1、DS1302简介

DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日 历和 31 字节静态 RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三根通信线:①RES 复位 ②I/O 数据线 ③SCLK 串行时钟。时钟/RAM 的读/写数据以一个字节或多达 31 个字节的字符组方式通信。


操作 DS1302 的大致过程,就是将各种数据写入 DS1302 的寄存器,以设置它当前的时间的格式。然后使 DS1302 开始运作,DS1302 时钟会按照设置情况运转,再用单片机将其寄存器内的数据读出。再用液晶显示,就是我们常说的简易电子钟。所以总的来说 DS1302 的操作分 2 步(显示部分属于液晶显示的内容, 不属于 DS1302 本身的内容),但是在讲述操作时序之前,我们要先看看寄存器, DS1302 有一个控制寄存器、12 个日历、时钟寄存器和 31 个 RAM。

2、控制寄存器

控制寄存器用于存放 DS1302 的控制命令字,DS1302 的 RST 引脚回到高电平后写入的第一个字节就为控制命令。它用于对 DS1302 读写过程进行控制,格式如下:

在这里插入图片描述

  1. 第 7 位永远都是 1。
  2. 第 6 位,1 表示 RAM,寻址内部存储器地址;0 表示 CK,寻址内部寄存器。
  3. 第 5 到第 1 位,为 RAM 或者寄存器的地址。
  4. 最低位,高电平表示 RD,即下一步操作将要 “读”;低电平表示 W,即 下一步操作将要 “写”。

在这里插入图片描述
在这里插入图片描述

比如要读秒寄存器则命令为 1000 0001,反之写为 1000 0000,要注意其含义。

3、日历/时钟寄存器

DS1302 共有 12 个寄存器,其中有 7 个与日历、时钟相关,存放的数据为 BCD 码形式。格式如下:

在这里插入图片描述
在这里插入图片描述

秒寄存器:低四位为秒的个位,高的次三位为秒的十位。最高位 CH 为 DS1302 的运行标志,当 CH=0 时,DS1302 内部时钟运行,反之 CH=1 时停止。

小时寄存器:时寄存器。最高位为 12/24 小时的格式选择位,该位为 1 时 表示 12 小时格式。当设置为 12 小时显示格式时,第 5 位的高电平表示下午 (PM);而当设置为 24 小时格式时,第 5 位具体的时间数据。

写保护寄存器:当该寄存器最高位 WP 为 1 时,DS1302 只读不写,所以要在往 DS1302 写数据之前确保 WP 为 0

4、DS1302的读写时序

在控制指令字输入后的下一个 SCLK 时钟的上升沿时,数据被写入 DS1302,数据输入从低位(位 0)开始。同样,在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据,读出数据时从低位 0 位到高位 7。其时序图 如下所示:

在这里插入图片描述

上图就是 DS1302 的三个时序:复位时序,单字节写时序,单字节读时序

CE(RST):复位时序,即在 RST 引脚产生一个正脉冲,在整个读写器件, RST 要保持高电平,一次字节读写完毕之后,要注意把 RST 返回低电平准备下次读写周期。

单字节读时序:注意读之前还是要先对寄存器写命令,从最低位开始写;可以看到,写数据是在 SCLK 的上升沿实现,而读数据在 SCLK 的下降沿实现。所以, 在单字节读时序中,写命令的第八个上升沿结束后紧接着的第八个下降沿就将要读寄存器的第一位数据读到数据线上了!这个就是 DS1302 操作中最特别的地方。 当然读出来的数据也是最低位开始。

单字节写时序:两个字节的数据配合 16 个上升沿将数据写入即可。

程序注意事项

  • 要记得在操作 DS1302 之前关闭写保护;
  • 注意用延时来降低单片机的速度以配合器件时序;
  • DS1302 读出来的数据是 BCD 码形式,要转换成我们习惯的 10 进制,转换 方法在源程序里;
  • 读取字节之前,将 IO 设置为输入口,读取完之后,要将其改回输出口;
  • 在写程序的时候,建议实现开辟数组(内存空间)来集中放置 DS1302 的 一系列数据,方便以后扩展键盘输入。
5、BCD码

前面我们提到在日历/时钟寄存器中都是以 BCD 码存放数据,那么 BCD 码是 什么呢?BCD 码是通过 4 位二进制码来表示 1 位十进制中的 0~9 这 10 个数码。 如下所示:

在这里插入图片描述

所以从 DS1302 中读取出来的时钟数据均为 BCD 码格式,需转换为我们习惯的 10 进制,转换方法在源程序里。

硬件原理

在这里插入图片描述

从上图中可知,DS1302 芯片的控制管脚接至单片机 P3.4-P3.6 上,在芯片的 X1、X2 管脚处外接了一个 32.768KHZ 晶振,为时钟运行提供一个稳定的时钟频 率,C2 和 C3 为旁路电容,目的是消除晶振起振时产生的电感干扰。

  • VCC2:主电源引脚。
  • X1、X2:DS1302 外部晶振引脚,通常需外接 32.768K 晶振。
  • GND:电源地。
  • CE:使能引脚,也是复位引脚(新版本功能变)。
  • I/O:串行数据引脚,数据输出或者输入都从这个引脚。
  • SCLK:串行时钟引脚。
  • VCC1:备用电源。

软件编写

程序框架如下:

  • 编写数码管显示功能
  • 编写 DS1302 时钟读写功能
  • 编写主函数
#include <REGX52.H>
#include <intrins.h>

//使用宏定义数码管段码口
#define LED  P0

//管脚定义
sbit DS1302_CE=P3^5;     //复位引脚
sbit DS1302_SCLK=P3^6;   //时钟引脚
sbit DS1302_IO=P3^4;     //数据引脚

//定义数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

//---DS1302写入和读取时分秒的地址命令//
//---秒分时日月年 最低位读写位------//
unsigned char Write_Addr[7]={
   
   0x80, 0x82, 0x84, 0x86, 0x88,
51单片机————DS1302实时时钟——动态数码管显示 二、定义数组变量存储时间(秒、分、时、日、月、周、年)时间数据。一、DS1302实时时钟spi时序程序编写。2.上层调用(底层时序)程序编写。1.底层spi时序编写。三、定义ds1302读和写函数。四、定义数码管(SMG)函数。 阅读详情

相关推荐

51单片机学习笔记】DS1302实时时钟程序

跟着官方教程写的ds1302实时时钟代码

weixin_54435584的博客 8904

基于STC89C52RC单片机LCD12864液晶屏显示实例源代码+开发板PDF硬件参考设计原理图.zip

基于STC89C52RC单片机LCD12864液晶屏显示实例源代码+开发板PDF硬件参考设计原理图 nt main(void){ Lcd12864_Init(); while(1){ Lcd12864_Show_Char(); Lcd12864_Screen_Flash(); Lcd12864_Write_Byte(0x01,lcdCmd);//清屏 Lcd12864_Show_String(1,1,"LCD12864测试实验"); Lcd12864_Show_String(2,2,"ABCDEFG123456789"); Lcd12864_Show_String(3,2,"C51单片机开发"); Lcd12864_Show_String(4,1,"www.ppptalk.com"); Lcd12864_Screen_Flash(); Lcd12864_Write_Byte(0x01,lcdCmd);//清屏 Lcd12864_Show_Image(); Lcd12864_Screen_Flash(); } }

使用51单片机DS1302时钟芯片做一个简易的电子时钟

今天带大家使用DS1302时钟芯片来做一块电子时钟,可以实时显示时间,想要学习的快来一起看看吧!

让技术没有门槛 4541

51单片机&DS1302& 18B20温度传感模块实现温度测量时间显示程序KEIL源码.zip

51单片机&DS1302& 18B20温度传感模块实现温度测量时间显示程序KEIL源码 #include <Atmel/AT89X52.h> #include "DS1302.h" #include "DS18B20.h" #include "KeyDisp.h" void main() { init_DS1302(); //初始化1302,如果不需要就屏蔽掉 delay(1); beep(350); while(1) { get_wendu(); read_RTC(); KeyProcess(); display(); }

蓝桥杯单片机数码管显示DS1302时钟

数码管显示DS1302时钟我通通常采用的是一种指针传递参数的方式。DS1302.h源文件。DS1302.c文件。

Likeyang_的博客 914

51单片机学习2——DS1302制作简易数码管电子时钟

51单片机学习2——ds1302模块简易电子时钟

m0_57615836的博客 9411

DS1302数码管显示时--分--秒(按键可修改时间)

       反思:此项目在做的时候我是直接用单片机引脚去驱动数码管(P1口控制段选,P3口控制位选),发现单片机引脚不能直接控制驱动数码管,所以我在思考后加了74HC138和74HC573来驱动,138控制位选,573控制段选。所以我在原来的PCB基础上在洞洞板上焊接了驱动芯片。我在做PCB电路设计的时候,是因为仿真的时候是单...

榆林壮的博客 1万+

51单片机使用DS1302时钟芯片实现可调时钟

DS1302时钟芯片、51单片机

可可斯蒂彳亍的博客 5504

51单片机DS1302数字时钟

51单片机DS1302数字时钟 #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit RST = P1^0; sbit IO = P1^1; sbit SCLK = P1^2; sbit HC595_SER = P2^7; //b 8 d c ...

叶子丶de花 博客 5130

51单片机——DS1302时钟

DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟芯片。定时器计时的缺点: 1.精度没有时钟芯片高 2.它会占用单片机cpu时间 3.单片机的定时器时钟不能掉电后继续运行; DS1302时钟芯片带有备用电池,如果掉电,它的内部逻辑判断就会自动把电源切换到备用电池

YLG_lin的博客 9784

51单片机---DS1302时钟的使用(含源码)

本节我们学习了51单片机DS1302的相关内容,包括原理,电路图,相关寄存器的设置以及时序;完成了利用LCD1602与晶体管的结合,实现了时钟显示

m0_56399733的博客 6万+

万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码

万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X32点阵 源代码万年历 STC89+DS3231+DS18B20+LED16X3

51单片机DS1302实时时钟

51单片机DS1302实时时钟

2302_80442755的博客 3605

51单片机 | DS1302 时钟实验

DS1302 时钟实验

F4_Family的博客 2766

51单片机C语言DS1302时钟

DS1302是一种高性能、低功耗、带有内置RAM的实时时钟电路,可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能。其电路图如下: 引脚5、6、7分别于控制器相连,外部有10kΩ上拉电阻。DS1302由控制寄存器、日历-时钟寄存器和31个RAM组成。DS1302的控制寄存器用于存放DS1302的控制命令字,其RST‾\overline{\text{RST}}RST引脚回到高电平后写入的第一个字节就是控制命令,它用于对DS1302的读写过程进行控制,其样式如下: DS1302的日历-时钟寄存器如下

qq_20091631的博客 3919

51单片机DS1302时钟/蜂鸣器

DS1302时钟:在时钟的上升沿向时钟写入数据,下降沿从时钟读出数据。跳变有效。 从低位到高位读取数据,先读命令字确定时钟是写入还是读出、写在哪里,去哪里读。DS1302内部存储的是BCD码,使用时需要转换为其他进制。 蜂鸣器:分为有源无源,通过放大电路实现驱动,根据每次电平转变的时间间隔的不同,就能发出不同音色的声音。

学了就忘是正常现象 1931

(九)51单片机——DS1302时钟

目录DS1302介绍引脚定义和应用电路寄存器定义命令字 时序定义代码编写 今天,我们的任务是要编写一个用51开发板编写的可调小时钟,接下来就让我们一步一步来实现它吧! 我们51单片机的就是这样一个DS1302芯片。 这边是DS1302与CPU之间的一个关系,我先列一个表格来介绍一下各个部分的功能。VCC2主电源VCC1备用电池GND接地X1、X232.768KHz晶振CE芯片使能IO数据输入/输出SCLK串行时钟 这个是更为详细的图片:

weixin_66578482的博客 4276

51单片机学习之DS1302时钟

DS1302芯片 X1、X2:32.768KHz晶振接入引脚。 GND:地。 RST (CE) :复位引脚,低电平有效,操作时高电平。 I/O:数据输入/输出引脚,具有三态功能。 SCLK:串行时钟输入引脚。 Vcc1:工作电源引脚。 Vcc2:备用电源引脚。 接入电池断电时提供1302电源 对DS1302读写控制格式如下(单字节) 发送两个字节(一个地址,一个命令) DS1302是通...

qq_44266648的博客 1507
上一篇: 哈夫曼树(数据结构)
下一篇: 51单片机ADC模数转换
都是Bug惹的祸
博客等级 码龄5年 232粉丝 138原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值