- 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位十进制数
读出还是写入,通过命令控制逻辑,对年月日哪个时间信息进行操作,也是通过命令控制逻辑
命令控制逻辑通过命令字控制

左侧两列分别是相应寄存器的读/写命令字
因为同一寄存器的读/写操作只有在位 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写数据和读数据的操作
使用一个数组存储时间信息
还可以封装一个初始化函数,因为单片机启动和复位时,所有 I/O 都为高电平,但我们没有对DS1302操作时,CE 和 SCLK 都应为低电平
完整项目代码:Gitee:实时时钟
此处暂不讲解,项目链接:Gitee:可调节时钟
效果如下:
到此这篇51单片机时钟编程(51单片机时钟电路作用)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/androidbc/42679.html