『51单片机』 DS1302时钟
🚩 WRITE IN FRONT 🚩
- 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
- 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量7w+、全网访问量100w+🏅
- 🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
- 📝 个人主页:謓泽的博客 📃
- 📣 专栏系列:【51单片机】系列 📃
- 🧑💻 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
- 🎁 点赞👍+ 收藏⭐️+ 留言📝
✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩
💬 本系列哔哩哔哩江科大51单片机的视频为主以及博主自己码字的总结梳理 📚
DS1302介绍
DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。
RTC(Real Time Clock):实时时钟,是一种集成电路。通常称为时钟芯片,里面内部自带晶振且集成化。
🍈拓展→现在流行的串行时钟电路很多例如『DS1302﹣DS1307﹣PCF8485』等...
这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路。
🍊说明⇢涓细电流充电是用来弥补电池在充满电后由于自放电而造成的容量损失。一般采用脉冲电流充电来实现上述目的。为补偿自放电,使蓄电池保持在近似完全充电状态的连续小电流充电,又称维护充电。采用普通32.768kHz晶振。
有些人可能会不理解 为什么通过定时器就能够实现定时器时钟的功能。为什么还需要要这个DS1302芯片?
解释⇢首先我们的单片机它的定时器时钟就会有几个缺点。
⒈定时器时钟它的精度不高,它没有时钟芯片这个精度高,说白点就是时钟更加准确性。
⒉定时器时钟会占用我们单片机的CPU时间。因为我们单片机在运行其它东西时候,还需要不断的给这个单片机计算时间。所以就会消耗我们单片机的一个CPU也就是中央处理器。
⒊单片机定时器时钟它是不能够掉电继续运行的,而DS1302时钟芯片却可以。
芯片手册
芯片手册在我们学习单片机的时候尤为重要,学习单片机一定要学会懂得如何查找芯片手册。可以说在我们以后写一个项目的时候手册对于我们的帮助是极大的。所以,我们一定要学会把手册利用起来。当你买了一个模块或者是芯片的时候叫厂家把手册发过来,就比如这个DS1302商家那里同样也是有的。
DS1302
🍏注⇢在这里我只是会介绍大概意思,具体的可以去叫商家把这个DS1302的手册发给你。
⒈直插分装→它的引脚是立起来的直接插在我们PCB板子上的焊盘上的。
⒉贴片分装→它的话就不是插入在我们的PCB板子上了。而是贴在电路板子表面上的像我们开发板的芯片就是我们的贴片分装,那么这两个分装它只是外表不一样。它的内部这个集成芯片的电路都是一模一样的,包括它的引脚定义都是一模一样的,只不过就是一种是大分装直插的,一种是小分装贴片的。
如上图所示⇢在上面的话就是DS1302应用电路,当我们在拿到手册的时候那么首先就要把你的硬件打好这样才能够更好的编程。然后硬件它是怎么进行连接的,这个在手册当中也是有的。所以说这就是手册为什么这么重要的原因。
DS1302 ③个部分
首先这个芯片它有八个引脚大致分为③个部分如下↓
第一部分
如上图所示⇢就是我们电源部分的引脚。
其中电源部分的引脚第一个就是(Vcc2)是主电源和我们单片机连接到一起的,然后还有一个电源是(Vcc1)是备用电源。
🍈注⇢它的这个引脚命名也是比较奇特的,一般的人都会觉得Vcc1才是主电源。然后(Vcc2)是备用电源。实际上在这个电路当中它们两是相反的。GND(地)就不用多说了和主电源连接在一起的,给芯片供电。
- Vcc2就和我们单片机的电源连接在了一起。
- Vcc1就和我们这个备用电池连接在了一起。
在Vcc1中上面是正极。正极接到了Vcc1,负极接地。
那么有了这个主电源和这个备用电源就可以保证了我们这个时钟芯片的这个电源是非常的充分了。在上电的时候Vcc2当做电源,一旦掉电就切换到备用电池,保证它还能够正常工作。
开发板DS1302原理图
🍏注⇢在上述的原理图当中我们可以看到开发板手册这里的Vcc1(备用电源)是并没有接的,那么在我们开发板上的这个是没有接这个备用电池的。所以,我们这里掉电继续走时的现象是看不到了的。所以说我们这个代码断电之后它的这个时钟也会停止。当然这个并不是程序的问题是我们硬件并没有接上备用电池。
第二部分
x1和x2固定的接的就是我们的一个晶振(频率32.768KHZ),那么为什么是这个数呢?就是因为在我们通用有关的使用情况之下这个实时时钟都是这个32.768KHZ的晶振。
因为这个对于这个实时时钟来说是方便且精度比较高的,就像是我们单片机的串口一样为什么要使用11.0592KHZ一样比较合适保证精度。晶振这个东西就是给我们实时时钟的系统提供了一个稳定的实时脉冲系统提供1HZ的标准频率,因为我们需要计时的。那么有了这两部分的话我们芯片就可以自己进行独立工作了,把里面的这些时钟呢就可以运行了。
第三部分
如上图所示→那么我们单片机需要怎么样如何去获取时间内就需要这三个引脚。
利用这③个引脚我们就可以把单片机的内部时钟给读取出来。
包括写入时间也是用这③个引脚把时间给写入进去。
这样就可以让我们里面的DS1302工作模式给运行出来。
当然在我们③个引脚是规定了一套协议的,利用这套协议就可以对我们里面的寄存器进行读写。就可以读取以及写入这个时间,这③个引脚和74HC595移位寄存器当中的很类似。
IO和SER(P34)⇢串行数据是对应以及SCLK(P36)⇢叫做串行时钟。注→串行数据是一位一位比特位来进行发送的。
CE就是对IO和SCLK这两个使能的在读和写的时候必须保证它为高电平,相当于开关控制。
内部的结构框图
DS1302的内部结构框图如下↓
如下图→这一部分就是接的是我们的时钟晶振可以通过内部这些电路的一些设置。经过频率的一些分频阿等等运算之后,就会输出这个1HZ的标准输出频率。
如下图→这一部分就是我们时钟的一个内部寄存器,就是说我们这个内部的时间都是存在这个寄存器当中的,31x8的RAM寄存器。就跟我们单片机的寄存器一样,我们只需要对内部寄存器进行读写就可以访问时间了。内部寄存器存储时间。
如下图→这一部分就是我们的访问,怎么读写寄存器就是靠这个来的。
🍈注⇢在74HC595的移位寄存器当中我们是只能进行写入的操作而不能进行读出,这个的话是可以进行读出的操作的。
其中这个CE引脚实际上就是一个使能,并不是说芯片不去使能,时钟就不工作。那么这个CE就是用来做一个判断的开关,当CE是高电平的时候你的IO和SCLK才能是有用的。如果CE为低电平那么这些就是无效的。
那么IO和74HC595的SRE是极其类似的,我们的数据是一个一个出去的也就是输出,只不过我们这个还可以读写进去。
SCLK(串行时钟)也和SRCLK是非常类似的,就是它时钟芯片每次来一个上升沿(高电平),我们的这个数据就会每次向下进行一次的移位。
寄存器定义
🍀注→在上述图当中地址是从低到高来进行排列的。注→IO数据输入/输出在DS1302也是从低位到高位的。
第一个寄存器存储的就是秒。
第二个寄存器存储的就是分。
第三个寄存器存储的就是小时。
第四个寄存器存储的就是日(1~31)
第五个寄存器存储的就是月(1~12)
第六个寄存器存储的就是年(0~99)
WP置1(高电平)写入的话是无效的,但是可以读出的。写入的话就要给低电平有效。
TCS就是涓细电流充电能力对电池进行充电。
说明→在上述的寄存器当中都是与时钟有关的寄存器。
地址命令字
那么在这里我们就需要完成两个任务如下↓
⒈在哪(地址-读秒第一个为什么不是分钟) 里写入(我们是写入还是读出) 什么 (写入实际数据是什么,就是设计时间)
⒉在哪里(比如说我想读秒) 读出 什么
🍎重点⇢在寄存器定义的那幅图当中,秒所对应的那一行(也就是第二行) READ所对应的那一列(也就是第一列) 方格里边是 81h (十六进制)转换为二进制为1000 0001对应上述图当中。
🍏注→第六位给高电平操作的是RAM给低电平操作的是CK(非) 在最高位上固定为"1".
如果我们需要写入 WR 给上低电平0。
注意看寄存器那幅图当中是分别有WRITE和READ。分别有对应的关系的。
时序定义
关于地址命令字和数据如何一一对应起来。
三大步骤(重点!)
⒈CE置"1"相当于一个开关的作用。
⒉在这里规定了我们要先把最低为给发送过去,在这里也就是R/W(非)设置到IO口上。
⒊SCLK时钟给上一个上升沿(高电平),那么我们的IO口最低为就会被写入到单片机。然后就是把SCLK置回到"0"此时在到IO(地址)口第一位依次类推。
注→I/O命令字(R/W非 ~ 1和数据(D0 ~ D7)是一一对应的(注:一个是指令还有一个是数据)高电平读出。
这一部分是完成命令字的写入操作。我们先要发命令字因为我们要告诉到底是写还是读。
这一部分就是实际的数据也就是IO数据输入/输出和上面的操作都是一样的。记住最终再把SCLK给置0以及CE。
📝重点说明→在上述我讲解的是写入数据的,实际上读出数据前半部分也都是一样的(只不过需要改变命令字最低位读"1")紧跟着时钟的下降沿然后就会开始读出这个数据每次读出一个数据来一个下降沿依次类推到最后一位就把SCLK和CE置0.
🍊注→在这些数据当中是完全对应在外面的寄存器上的。
拓展说明如下↓
在写入数据是给单片机写入进去数据的我们是看不到现象的,而当我们想要看到现象是需要把单片机的数据给读出来才行。
在CE(芯片开关)的操作中,CE始终要保持我们的高电平,写完之后再把它清0置低电平。然后整个写入操作它才是有效的。
SCLK(串行时钟)给一个固定的时钟,然后IO(数据输出/输入)就给数据,在时钟的上升沿,IO口的数据将被输入。同时还额外的规定了在时钟的下降沿,DS1302就会把它给的数据进行输出。
下面就是串行输入。所有驱动都是低电平输入/高电平输出 交替。
BCD码
在DS1302的内部寄存器地址/定义,是用BCD码表示的也就是我们常用到单片机8421码。
BCD码(Binary Coded Decimal),用4位二进制数分开分别来表示个位和十位。
例:0001 0011表示13,1000 0101表示85,0001(十位) 1010(个位)不合法(十进制的个位只有0~9,A代表的是10)
在十六进制中的体现:0x13表示13,0x85表示85,0x1A不合法。
BCD码转十进制:DEC=BCD/16*10+BCD%16; (2位BCD十位和个位)
BCD/16把高四位提取出来,BCD%16把低四位提取出来。
十进制转BCD码:BCD=DEC/10*16+DEC%10; (2位BCD十位和个位)
为什么需要进制转换呢?其根本原因就是在写代码的过程当中进制可能不一样,我写的这个代码读出的数据是BCD码而你这个库函数当中存放的Number是十进制的,此时我们应该要把BCD码用公式把它进行一个强转为十进制这样最终得到的才是一个逢十进一的一个数。如果当你直接BCD码存放十进制Number当中会发生以下情况如下👇
0000 1001 = 9 0001 0000 = 10(解码以十进制进行解码) //十进制转换为十六进制 (1x16^1)+(0x16^0) = 16🍊说明⇢此时如果是这样的话当我们的数字到9的时候再+1的话就会跳到16的数字。所以,我们需要把BCD码转十进制。
其实可以直接带入进去算下BCD码转十进制 例如下↓拓展:÷(获得高位) %(获得低位)
BCD码(8421码0~15)十进制码是(0~9)我们带入式子来进行计算如下↓
DEC(十进制) = (16/16*10) + (16%16) = 10 这不就相当于是从十六进制转到了十进制吗?同理。当然这个只是一个小技巧,有更加严谨的转换方式。
注→BCD码在单片机中还是以16进制形式存储。
相关文章:
『51单片机』 DS1302时钟
🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大…...
ubuntu部署个人网盘nextCloud使用docker-compose方式
概述 当下各大网盘的容量都是有限制的,而且xx云不开会员网速就拉跨。 所以就想搭建一个自己的盘,并且可以控制用户的权限分组; nextCloud就很合适 我这边都是自己用偶尔给其他人使用下,所以直接docker部署了。 ubuntu版本&…...
【ChatGPT 01】ChatGPT基础科普
1. 从图灵测试到ChatGPT 1950年,艾伦•图灵(Alan Turing)发表论文**《计算机器与智能》( Computing Machinery and Intelligence),提出并尝试回答“机器能否思考”这一关键问题。在论文中,图灵提出了“模仿游戏”&…...
2317.操作后的最大异或和
非常好的一个位运算推公式题目 首先num[i]^x可以知道 这里可以变成任意一个数字 又有num[i]&上上面的数字 所以我们可以扣掉任意位的1把它变成0 答案让我们求异或和 所以只要这一位有1 答案的这一位就有1 我们发现这就是一个按位或运算 class Solution { public:int maxi…...
Python爬虫-经典案例详解
爬虫一般指从网络资源的抓取,通过Python语言的脚本特性,配置字符的处理非常灵活,Python有丰富的网络抓取模块,因而两者经常联系在一起Python就被叫作爬虫。爬虫可以抓取某个网站或者某个应用的内容提取有用的价值信息。有时还可以…...
【信创】银河麒麟V10 安装postgis
安装postGis步骤 1、安装 proj4 #tar -zxvf proj-4.8.0.tar.gz #cd proj-4.8.0 #mkdir -p /opt/proj-4.8.0 #./configure --prefix=/opt/proj-4.8.0 #make && make install #vi /etc/ld.so.conf.d/proj-4.8.0.conf #ldconfig 2、安装 geos #tar -xjf geos-3.6.1.tar.b…...
OpenCV常用功能——灰度处理和图像二值化处理
文章目录 一、灰度处理1.1 cvtColor函数 二、图像二值化处理2.1 全局阈值2.2 自适应阈值 一、灰度处理 1.1 cvtColor函数 函数原型: cv2.cvtColor(src, code[, dst[, dstCn]]) -> dst功能:转换图像颜色空间。 参数: src: 输入图像。co…...
excel巧用拼接函数CONCAT输出JSON、SQL字符串
一、前言 工作中有时候需要用Excel对数据进行组装,需要输出JSON或者SQL语句,然后通过脚本或Java程序完成一些特定功能,总结了一下用到的函数,方便以后使用。这里使用的是WPS软件。 二、输出JSON 例如:需要将几列数据…...
Redis桌面管理工具:Redis Desktop Manager for Mac
Redis Desktop Manager是一款非常实用的Redis管理工具,它不仅提供了方便易用的图形用户界面,还支持多种Redis数据结构,可以帮助用户轻松地完成Redis数据库的管理工作。 以下是一些推荐Redis Desktop Manager的理由: 多平台支持&a…...
基于SSM的汽车维修管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的汽车维修管理系统,java项目。 …...
volatile 系列之如何解决可见性问题
下面我们来看一下volatile是如何解决可见性问题的呢?如果我们针对stop字段增加volatile关键字: public static volatile boolean stopfalse; 然后,使用hsdis工具获取IT编译器生成的汇编指令来查看volatile写操作带来的影响和变化。 接着,设置J…...
网络安全(黑客技术)—小白自学
目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类&am…...
MTK AEE_EXP调试方法及user版本打开方案
一、AEE介绍 AEE (Android Exception Engine)是安卓的一个异常捕获和调试信息生成机制。 手机发生错误(异常重启/卡死)时生成db文件(一种被加密过的二进制文件)用来保存和记录异常发生时候的全部内存信息,经过调试和仿真这些信息,能够追踪到异常的缘由。 二、调试方法…...
京东平台数据分析:2023年9月京东扫地机器人行业品牌销售排行榜
鲸参谋监测的京东平台9月份扫地机器人市场销售数据已出炉! 根据鲸参谋平台的数据显示,9月份,京东平台扫地机器人的销量近14万,环比增长约2%,同比降低约4%;销售额为2.9亿,环比降低约4%࿰…...
pytorch 笔记:index_select
1 基本使用方法 index_select 是 PyTorch 中的一个非常有用的函数,允许从给定的维度中选择指定索引的张量值 torch.index_select(input, dim, index, outNone) -> Tensorinput从中选择数据的源张量dim从中选择数据的维度index 一个 1D 张量,包含你想…...
面试算法43:在完全二叉树中添加节点
题目 在完全二叉树中,除最后一层之外其他层的节点都是满的(第n层有2n-1个节点)。最后一层的节点可能不满,该层所有的节点尽可能向左边靠拢。例如,图7.3中的4棵二叉树均为完全二叉树。实现数据结构CBTInserter有如下3种…...
Python算法例3 检测2的幂次
1. 问题描述 检测一个整数n是否为2的幂次。 2. 问题示例 n8,返回True;n6,返回False。 3.代码实现 # 采用UTF-8编码格式 # 参数n是一个整数 # 返回True或者False class Solution:def checkPowerOf2(self,n):ans 1for i in range(31):if …...
线扫相机DALSA--采集卡Base模式设置
采集卡默认加载“1 X Full Camera Link”固件,Base模式首先要将固件更新为“2 X Base Camera Link”。 右键SCI图标,选择“打开文件所在的位置”,找到并打开SciDalsaConfig的Demo,如上图所示: 左键单击“获取相机”&a…...
Gitee 发行版
Gitee 发行版 1、Gitee 发行版管理2、项目仓库中创建发行版本3、项目中导入3.1 gradle配置3.2 dependencies执行正常,包没有下载 1、Gitee 发行版管理 Gitee 发行版(Release)管理 2、项目仓库中创建发行版本 按照Gitee官网操作就行 3、项目…...
python面向对象
用animal举例代码如下: class Animal:name age 0def call(self):print(I am %s, and I\m %d years old. % (self.name, self.age))def isMe(self, name) -> bool:return self.name nameanimal Animal() animal.name coco animal.age 10 animal.call()prin…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

















