NO12 蓝桥杯单片机之DS1302的使用

1 DS1302是什么

DS1302由两块存储器组成,一个是日历时钟寄存器还有一个是31位的静态RAM存储器。

而在蓝桥杯中常考的就是日历时钟寄存器,故这里只介绍日历时钟寄存器。简单来说,其就是一个“电子表”,他会自动的实时记录时间,而不需要像我们之前运用定时器做的时钟一样,要自己来设计时钟怎么运行,DS1302是已经自动设计好了,我们只需要写入从哪个时刻开始计时,以及读取相应的时间即可。

2 DS1302的结构

2.1 硬件原理图(就是单片机上DS1302芯片的引脚连接情况)

这里比较重要的就是SCK,RST,I/O(SDA)这三个引脚,其在头文件中需要定义,要学会看原理图这三个口连接哪三个引脚。

2.2 内部寄存器结构图

2.2.1 控制字的格式

控制字简单理解就是控制写入或读取哪个地址啊,是读取还是写入啊,用的是RAM还是CK啊这些操作,各个位的要求如图。

(再往下看,其实这个控制字就是下个图中左侧读寄存器和写寄存器的那些地址为什么是这样写。)

比如:当选择日历时钟给模式。

读寄存器的第一个地址为81H, BIT7=1,BIT6=0,BIT5~BIT1=0,读操作故BIT0=1,

即1000 0001,写成16进制为81H

写寄存器的第一个地址为80H,BIT7=1,BIT6=0,BIT5~BIT1=0,写操作故BIT0=0,

即1000 0000,写成16进制为80H。

读寄存器的第二个地址为83H, BIT7=1,BIT6=0,BIT5~BIT2=0,BIT1=1,读操作故BIT0=1,

即1000 0001,写成16进制为83H

......

2.2.2 日历时钟寄存器

(以下图来源小蜜蜂老师,注意:有个错误,CH为1的时候时钟是停止为0的时候是开始运行,这里小蜜蜂老师写反了。

日历时钟寄存器中一共包含8个8位寄存器,前7个分别为秒——分——时——日——月——周——年,(黄色高亮部位即为可以用于表示时间数据的位)

最后一个为控制寄存器,有效位只有BIT7,其他强制为0。(具体操作如图)

第一个秒寄存器:(CH为1的时候时钟是停止为0的时候是开始运行,这里小蜜蜂老师写反了。

第三个时寄存器BIT7位表示可以选择是12小时模式还是24小时模式,当选择24小时时,BIT5位用于选择AM还是PM模式。

注意:时间数据是用BCD码表示,(以八位数为例,前四个为十位,后四个为个位,且每四个数只能表示0~9),因此,图中黄色高亮部分有的写10秒,10分,指的是秒的十位和分的十位,(由于秒和时十位最多为5,故只需要用三个位就可以表示,最高位恒为0,只是秒的最高位被利用成了CH位而已。)

3 DS1302代码编写即使用

(1):地址写成数组

首先,日历时钟寄存器经过控制字格式来写,地址是固定的,因此在代码编写中将读写寄存器地址写成一个固定的数组会方便后续操作。

(与秒——分——时——日——月——周——年即上一个图中的顺序一 一对应,由于最后一个寄存器只有首位有效,我们就放到后面单独写,就不写进数组里了

///写寄存器地址
unsigned char code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};

//读寄存器地址
unsigned char code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

(2):时间参数写成数组

 DS1302的基本操作实际上非常简单,只有两个操作:其一是设定时间参数,其二是读取实时时间。不管是那个操作,MCU都要通过SPI接口进行数据交互,而SPI接口有其规定的时序,这个必须参考数据手册(这个在官方给的底层代码中.c文件有写,有空可以去看看,所以在这里只需要调用里面函数即可。)

要设定时间参数就要写进时间,因此把要写进去的时间参数也写成一个数组会比较方便

比如:注意写入顺序,秒——分——时——日——月——周——年

这里写成16进制时没有进行下一节(第四节)中讲的数据的转换,而是直接写成了16进制(已转换为为二进制的形式),这是因为若每四个单元都只是0~9,那么BCD和16进制(已转换为二进制的形式)是一样的,故直接写即可。

(3)调用函数来进行读取实时时间

调用以下两个函数(底层代码.c文件)可能有时候名称会有改变具体看你用的底层代码,传入数组的地址以及数据即可进行读取。


unsigned char Read_Ds1302_Byte ( unsigned char address ) 

void Write_Ds1302_Byte( unsigned char address,unsigned char dat ) 

(注意:千万别漏了还有几个寄存器要单独写的,在执行函数中记得写!!)

4 DS1302读写数据时的转换 !!!!!!

这是个难点!

因为DS1302储存是按BCD来储存的,然后我们需要知道一个概念,就是单片机内的数据都是以0,1这两种形式储存(不论是二进制还是BCD等本质还是01),但是在计算时,单片机就直接默认以这些数据(不论是二进制数还是BCD等等)通通运用二进制的转换规则来转换成十进制,在编写代码进行运算时,就直接把这些数据看成是十进制数来进行运算公式的编写。

但是读取显示出来的数据是以16进制的数来表示的(这个就不要管,你在编写公式时就想着这是个十进制数来写公式转化就行了!!!!)

4.1 然后就要解释一下各种进制的转换关系:

(图源:BCD码以及各进制之间的相互转换-CSDN博客)

特别要说一下十六进制和BCD码的区别。

16进制其实就只有0~F这些单个数字,平时我们运算时的每四位作为一个单元,然后每个单元对应0~F这16个数,写成01形式后就是16进制转换为二进制后的结果(即16进制本身为单个数字,而写成每四个是已经转换为2进制的结果),为了不易弄混,其转化为十进制数记成先转成二进制数在以二进制数的方法转十进制(即2^0 * _+ 2^1 * _ +....)

而BCD码本身就是以每四个数字为一个单元,只是每个单元对应的只有0~9这十个数字,而每个单元作为十进制的一位,比如11,BCD码为0001 0001(前四个数转化为十进制是1,为十进制的十位数,后四个数转化为十进制是1,为十进制的个位数,)因此BCD码还要继续转换为二进制。(比如下图中10的表达,二进制是1010,而BCD是0001 0000)

(来源bcd码和16进制的区别_bcd和16进制的区别-CSDN博客)

但是,当四个为1个单元只表示0~9时,此时BCD和16进制(已转换为二进制的形式)是一样的,此时写入数据就可以直接用16进制表达,而不需要在进行转换。


所以可以看到,对于同一个十进制数,用BCD表达,十六进制表达二进制表达都是不一样的。

4.2 DS1302中的转换

在DS1302中数据是以BCD储存的,但是我们讲到在单片机运算时,单片机是默认运用二进制的转换规则来把这些0101形式转换为十进制来进行运算(无论是写入单片机还是读取的单片机的数据),那么在写入和读写数据时(通常只用16进制来表示写入和读写的数据),就要进行BCD码的转换。

(参考:DS1302内码和10进制二进制十六进制之间转换.doc (book118.com),图片来源也是这个文档。)

写入DS1302:

要写入一个十进制为45的数,如果直接把45写进单片机的DS1302,(前面说到,单片机默认是以转换二进制的规则来把二进制转十进制,或者十进制转二进制),那么单片机就会运用2进制规则转换45后储存起来,即等于0010 1101(2^5 * 1 + 2^3 *1 +2^2 * 1 + 2^0 * 1),但是DS1302又是以BCD码的形式储存的,0010 1101对应的BCD码是完全不存在的(因为1101对应>9了,而且单看前四位为2,说明十进制数的十位为2,也是不对的),因此,我们要进行数据的转换使得写进去的数最终表示为BCD码的形式转换回来十进制是我们想要的十进制数。简单说,我们想要45,但我们不能直接写45,我们要写69,这样单片机按2进制规则储存起来的就是0100 0101,按BCD方式转化为十进制就是我们想要的45。

以下例子的公式就是把所谓45转换为69的过程。

读取DS1302:

同样,当BCD存储为0100  0101,如果我们直接读取这个数据,出来的数对应十进制应该是69,因此,我们要把BCD码转换成45对应的二进制,再进行读取,最终显示的是以16进制来显示(转化为十进制是45)。

以下例子的公式就是把69转换为45的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/500004.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简易挛生分拣系统设计

1 工效组合展示 2 方案规划设计 3 数字挛生建模 基础建模、动画设计、模型导出 4 软件体系架构 5 Web交互设计 5.1 页面架构 5.2 初始构造 5.3 模型运用 5.4 WS通信 5.5 运行展现 6 服务支撑编码 6.1 整体调度 6.2 WS服务 6.3 C/S通信 7 系统级调试完善

了解一下npm i的流程与原理

流程 执行npm install,先判断有无lock文件。 1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的,老版本是树结构,可能会出现依赖重复安装的问题,老版本示意图如下: 作为前…

【探索Linux】—— 强大的命令行工具 P.31(守护进程)

阅读导航 引言一、守护进程简介1. 概念2. 特点 二、用C创建守护进程⭕代码✅主要步骤 温馨提示 引言 当谈到计算机系统中运行的特殊进程时,守护进程(daemon)无疑是一个备受关注的话题。作为在后台默默运行并提供各种服务的进程,守…

【机器人】UIUC、北大、亚马逊提出基于动作的场景图,让机器人理解和操控未知环境

论文的主要内容是通过机器人操作的交互式探索,构建一个基于动作的场景图(Action-Conditioned Scene Graph,简称ACSG)来帮助机器人更好地理解和操作未知环境。 全文核心:在未知环境中如何让机器人自主探索并完成复杂任务…

乐维更改IP地址

1.1 系统IP调整 vim /etc/sysconfig/network-scripts/ifcfg-ens1921.2 Web相关服务IP变更 1.2.1 编辑/itops/nginx/html/lwjkapp/.env文件,更改ZABBIXSERVER、ZABBIXRPCURL、DB_HOST中的IP 1.2.2 进入/itops/nginx/html/lwjk_app/目录下,执行php bin/manager process-conso…

记录C++中,vector的迭代器在push_back以后扩容导致迭代器失效的问题

前言 vector是我们用到最多的数据结构,其底层数据结构是单端动态数组,由于数组的特点,vector也具有以下特性: ①O(1)时间的快速访问; ②顺序存储,所以插入到非尾结点位置所需时间复杂度为O(n),删…

JDK21|史诗级的更新,虚拟线程

作者:鱼仔 博客首页: https://codeease.top 公众号:Java鱼仔 前言 要想看官方对于JDK21的更新说明,可以直接跳转到下面这个官方网站中 官网地址为:https://openjdk.org/projects/jdk/21/ JDK21是最新的LTS版本,里面添加了不少新的特性&…

中小型集群部署,Docker Swarm(集群)使用及部署应用介绍

1、Docker Swarm简介 说到集群,第一个想到的就是k8s,但docker官方也提供了集群和编排解决方案,它允许你将多个 Docker 主机连接在一起,形成一个“群集”(Swarm),并可以在这个 Swarm 上运行和管…

【Web APIs】DOM节点

目录 1.节点操作 1.1DOM节点 1.2查找节点 1.2.1父节点查找 1.2.2子节点查找 1.2.3兄弟节点查找 1.3增加节点 1.4克隆节点 1.5删除节点 2.时间对象 2.1实例化 2.2时间对象方法 2.3时间戳 3.重绘和回流 1.节点操作 1.1DOM节点 DOM节点:DOM树中的每一个…

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是: 数据库里负责增加,删除,修改,查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…

《VulnHub》Lampião:1

title: 《VulnHub》Lampio:1 date: 2024-03-28 21:37:49 updated: 2024-03-28 21:37:50 categories: WriteUp:Cyber-Range excerpt: 关键技术:主机发现,端口扫描、服务探测、操作系统探测,对开放的端口探测漏洞&#x…

正弦实时数据库(SinRTDB)的使用(5)-历史数据查询

前文已经将正弦实时数据库的使用进行了介绍,需要了解的可以先看下面的博客: 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入OPC DA的数据 正弦实时数据库(SinRTDB)…

民航电子数据库:查询cae服务存在哪些数据库以及删除数据库

目录 一、场景二、查询数据库列表三、删除数据库 一、场景 1、对接民航电子数据库 2、在CAEManage是没有直观展示已存在的数据库的,只能通过SQL查询 3、在CAEManage没有操作按钮可以删除数据库,只能通过SQL进行删除 二、查询数据库列表 1、登录SYSTE…

我是如何在学术界占有一席之地的——专注于我的写作

罗伯特纽贝克 “作为一个移民,你是怎么发表这么多文章的?”意识到我不是以英语为母语的人,当我去年面试教职时,人们无数次问过这个问题。我知道披露我的挣扎不太可能让我找到工作,所以我会笑着说:“我喜欢…

Xinstall广告效果监测,为您的App推广保驾护航

在当前的移动互联网时代,App已经成为企业与用户连接的重要桥梁。然而,App推广过程中,如何准确衡量广告效果、洞悉推广效果以及优化用户体验,一直是广告主和开发者面临的挑战。这时,一款强大而专业的App全渠道统计服务商…

蓝桥杯刷题第四天

思路: 这道题很容易即可发现就是简单的暴力即可完成题目,我们只需满足所有数的和为偶数即可保证有满足条件的分法,同时也不需要存下每个输入的数据,只需要知道他是偶数还是奇数即可,因为我们只需要偶数个奇数搭配在一块…

Manjaro 安装全新 Linux 版微信,从此告别 Wine

目前已经基本上使用 Manjaro 来工作,而工作离不开微信作为日常的工作沟通工具。因为微信官方一直没有 Linux 版本的,所以之前都只能够使用 Wine 版本,然后踩了不少坑,但还算能勉强使用。 最近听说微信终于要发布 Linux 版本的&am…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路:因为本题是二叉搜索树,利用它的特性可以从上往下进行递归遍历树,这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…

ip地址改变导致nacos无法登录的解决方法

ip地址改变导致nacos无法登录的解决方法 在做黑马的springcloud课程里的黑马商城微服务项目时,发现使用nacos的默认账号密码(nacos,nacos)无法登录,项目里也没报错信息,虽然猜测和ip地址改变有关&#xff0…

视频素材免费无水印软件有哪些?视频素材免费下载素材库

在这个视觉为王的时代,一段精彩的视频能够跨越语言和文化的障碍,触动每一个心灵。对于每一位热血沸腾的视频创作者而言,寻找那些高质量无水印的素材,就像是在无尽的创意海洋中航行,在这段旅程中,我为你精选…