51单片机时钟编程(51单片机时钟电路作用)

51单片机时钟编程(51单片机时钟电路作用)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>学习使用的开发板&#xff1a;<br /> 编程软件&#xff1a;<br /> 烧录软件&#xff1a;</p> 

讯享网

开发板实图:
在这里插入图片描述
讯享网

  • DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能
  • RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟芯片

在这里插入图片描述


原理图如下:
在这里插入图片描述
左侧部分为晶振部分,提供晶振源

  • VCC2:主电源
  • VCC1:备用电池
  • GND:电源接地
  • X1、X2:接晶振部分,
  • CS:芯片使能
  • I/O:数据输入/输出
  • SCLK:上升沿串行时钟

内部结构图如下:
在这里插入图片描述

  • 电源控制:提供电源
  • 晶振源:实现实时时钟的时间改变
  • 时钟存储:存储年、月、日、周、时、分、秒信息
  • 命令控制逻辑:控制本次操作为读取/写入,选择对象(年、月、日…)
  • 输入移位寄存器:输入命令/数据

DS1302实现实时时钟的原理如下:

时钟存储有年月日等信息,晶振源提供晶振频率,让时钟存储的信息每秒加一

我们可以通过命令控制逻辑,告诉DS1302我们是要读出时钟存储的时间信息,还是覆写时间信息。覆写后的时间依然可以依靠晶振频率实现实时

读出和输入覆写都通过I/O口

时钟存储的时间信息并不是十六进制数,而是BCD码

  • BCD码(Binary Coded Decimal),用4位二进制数表示1位十进制数

例:0001 0011表示13,前四个二进制为1,后四个二进制为3,组合在一起就是13
例:1000 0101表示85,前四个二进制为8,后四个二进制位为5,组合在一起为85
例:0001 1010不合法,因为BCD码规定4位二进制只能表示0 ~ 9

读出还是写入,通过命令控制逻辑,对年月日哪个时间信息进行操作,也是通过命令控制逻辑

命令控制逻辑通过命令字控制

在这里插入图片描述

命令字启动每一次数据传输
MSB(位 7) 必须是逻辑 1,如果是 0,则禁止对 DS1302 写入
位 6 在逻辑 0 时规定为时钟/日历数据,逻辑 1 时为 RAM 数据。
位 1 到 位 5 表示输入输出的指定寄存器,例如 00000 为秒寄存器,00001 为分钟寄存器,00010 为小时寄存器
LSB(位 0) 在逻辑 0 时为写操作逻辑 1 时为读操作


下图给出地址定义:
在这里插入图片描述

左侧两列分别是相应寄存器的读/写命令字

例如,秒寄存器写操作
在这里插入图片描述
位 7固定为1,位6 = 0 表示时钟模式,A0 ~ A5: 00000 选择秒寄存器,位0 = 0 表示读操作

因为同一寄存器的读/写操作只有在位 0 有所区别,写操作 = 1,读操作 = 0,所以


在这里插入图片描述

命令字和写入的时间数据都要通过,I/O口单次传输的数据是一位,然后通过 SCLK = 1,将数据写入移位寄存器

时序控制图如下:

在这里插入图片描述

  • CE:所有数据传输开始驱动 CE 输入高,即 CE = 1。CE实现两个功能:第一,CE 开启允许对地址/命令序列的移位寄存器进行读写的控制逻辑;第二,CE 信号为单字节和多字节 CE 数据数据传输提供了终止的方法
  • 当 SCLK = 1 上升沿时,的数据会被写入移位寄存器
  • 数据输入:输入写命令后,接下来的 8 个 SCLK 周期的数据字节被输入。
    • 数据输入以 位 0 开始。如存储15,BCD码 = 15 = 0001 0101。从最低位的1开始传输
  • 数据输出:输入读命令后的 8 个 SCLK 周期,输出一个数据字节。
    • 注意第一个数据位的传送发生在命令字节被写完后的第一个下降沿
    • 数据输出从位 0 开始

在这里插入图片描述

首先对串口号和命令字进行定义,方便使用

讯享网

此处只定义了写命令字,

接下来封装向DS1302写数据和读数据的操作


根据时序图,要先写入命令字,再写入数据
每一位数据都通过输入,在 SCLK = 1 上升沿时写入移位寄存器
写入的数据要由十进制转为BCD码

 


根据时序图,要先写入命令字,再读出数据
命令字数据通过输入,在 SCLK = 1 上升沿时写入移位寄存器
读出数据通过输出,在 SCLK = 0 下降沿读出
读出的数据要由BCD码转为十进制

讯享网

使用一个数组存储时间信息

 
讯享网
 

还可以封装一个初始化函数,因为单片机启动和复位时,所有 I/O 都为高电平,但我们没有对DS1302操作时,CE 和 SCLK 都应为低电平

讯享网
 

讯享网

DS1302 模块实现对实时时钟的控制
再使用 LCD1602 模块显示时间
LCD1602模块代码:Gitee 的 和

 

完整项目代码:Gitee:实时时钟

效果如下:
在这里插入图片描述

此处暂不讲解,项目链接:Gitee:可调节时钟

效果如下:


以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

小讯
上一篇 2025-05-21 18:52
下一篇 2025-04-14 16:18

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/155770.html