单片机学习笔记---DS1302时钟

上一节我们讲了DS1302的工作原理,这一节我们开始代码演示。

新创建一个工程写上框架

我们需要LCD1602进行显示,所以我们要将LCD1602调试工具那一节的LCD1602的模块化代码给添加进来

然后我们开始创建一个DS1302.c和DS1302.h

根据原理图,为了方便操作,我们要在DS1302.c文件重新定义我们的三个端口

定义好之后我们操作重命名的名字,就相当于操作单片机的这三个引脚。

然后我们就可以根据上节讲的工作原理模拟这个时序

首先我们要写一个函数,叫做单字节写DS1302,模拟这个时序

第二个函数是单字节读DS1302,模拟这个时序

然后初始化DS1302

开始写字节,第一步将CE置1

下一步把命令字的第0位放在IO线上

然后DS1302_SCLK置1再置0

这里置1后立马置0的话需要考虑我们芯片能够承受的时钟最快频率,因为置1后立马置0的过程中,可能时钟线操作的太快,而时钟芯片反应不过来。

所以要看看芯片手册上支持的最快速率是多少。

比如手册上给出了这个时序上每一段的操作时间表格

还画了图表示哪里到哪里对应的是表格中的哪一个时间

比如说tDC对应的是当VCC是2V的时候,操作时间最小不能小过200ns,如果VCC是5V的时候,时间最小是50ns。

但是由于我们51单片机的速率是比较慢的(一个机器周期是1微秒),所以置1到置0之间可以不用加延时。如果有的单片机的速度很快的话,置1到置0之间要加一段延时,等IO后完成数据交互之后再置0。

经过以上三步后我们的时序已经走完到这一步了

接下来我们接着写入命令字的第1位,第2位,第3位......数据(保持CE=1)

我们可以用for循环来实现

更正:图中应该是i<8

这个循环完成后整个时序就进行到这个地方

最后那一半时序其实和前面一半的时序操作几乎一模一样,只是它的数据不同

可以直接复制过来改一下

更正:图中应该是i<8

这个循环完成后我们时序已经完成到这里了

最后就是把CE给清零

更正:图中应该是i<8

这样单字节写的这整个时序就已经完成了。

数据写进去后,我们还要让单片机读出来,最后再显示出来才能看到我们写进去的数据。

接下来我们就操作单字节读的时序

操作命令字部分的时序几乎一样,可以直接复制过来

更正:图中应该是i<8

这样整个时序就进行到这里了

但是这里有个问题当时钟来一个下降沿的时候,时钟芯片就会向单片机输出数据了,这就意味着如果我们直接这样写的话,那进行到最后一轮for循环的时候就同时有一位数据出来了,我们应该想要时序进行到这一步才对

所以得调整一下顺序,先给0,再给1

更正:图中应该是i<8

这样当第一个for循环结束后,时序就不是到这里来了

而是到这里来了

最后一个for循环结束后就到这里来了

这样我们这个for循环就全部是与命令字有关的,

当这一部分时序进行完之后,这里单片机就要释放掉对IO口的控制,然后把IO口的控制权转交给DS1302。DS1302输出数据,然后单片机在这里直接读取IO口的状态。

因此接下来先给下降沿

更正:图中应该是i<8

那么数据就已经到了IO口的线上了,所以我们直接读

所以我们再给一个上升沿

更正:图中应该是i<8

这个时候时序就进行到这里了

这个时候DS1302操作IO口把它想要输出的数据的D0给到IO口线上了。

然后先定义一个变量Data,然后进行循环读出数据的每一位

这样就和这个时序完全相同了

PS:连续两次置1时序上的电平不会产生变化,并且单字节读的时序比单字节写的时序少了一个脉冲,那么我们这个地方重复置了一个1的话可以补充少了的这个脉冲。

最后别忘记CE清零

把Data返回(到时候主程序里面调用这个函数的话,返回值就可以打印出来了)

返回值类型也要改

这里有一个重点!敲黑板!重点来了!

读取完数据时候一定要给IO口清零!!!

如果不写上这一句代码的话效果是这样的,请看视频,读出来的数据是乱码的!

DS1302实时时钟2

这样读和写的两个时序已经模拟完成,我们需要再DS1302.h文件里面进行声明一下这几个函数

到这里我们的读写程序基本已经完成了

BCD码

然后还需要补充一个知识:BCD码

DS1302的内部寄存器不是以正常的二进制进行存储的,而是以BCD码进行存储的。

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

高四位表示十进制的十位,低四位表示十进制的个位

例:0001 0011表示13,1000 0101表示85,0001 1010不合法

在十六进制中的体现:0x13表示13,0x85表示85,0x1A不合法

(10的BCD码是0001 0000,转换成正常的十进制是16)

BCD码转十进制:DEC=BCD/16(把高四位提取出来)*10+BCD%16(把低四位提取出来); (2位BCD)

十进制转BCD码:BCD=DEC/10(得到十位)*16+DEC%10(得到个位); (2位BCD)

所以我们回头这一下这张表格就能看明白了

以秒寄存器为例,这张表格上写明低四位存的是秒,而高位的那三位(0-50就只能用到三位(0)101)存的是10秒,CH置为1的话,秒就会停止,整个时钟就会停止。CH=0的话时钟时钟是运行的。

所以想要最后的结果显示成正常的十进制数的话就要将结果转换成十进制再显示。

如果还是想转换成十进制再显示的话可以利用这一个转换公式

BCD码转十进制:DEC=BCD/16(把高四位提取出来)*10+BCD%16(把低四位提取出来); (2位BCD)

设置时间时,要将十进制转换成BCD码写进时钟芯片,可以利用这个公式

十进制转BCD码:BCD=DEC/10(得到十位)*16+DEC%10(得到个位); (2位BCD)

我们要将年月日,时分秒,星期显示在液晶屏上的话还要在DS1302.c文件中定义是个数组,然后再写两个函数,方便我们后续设置时间

为了方便后面不用每次都查找这个表上的地址码

我们可以把这个表格上的写入地址重定义

然后我们知道,写入时的命令字最低位肯定是0,读出时的命令字最低位肯定是1

所以我们在ReadByte()这里加一行这样的代码

因为这个读的命令字一定是1了,将Command或0x01之后,那它的最低位肯定是1,也就是肯定是读,然后我们给地址的时候,可以直接给写的地址,因为写的地址或了0x01之后就是读的地址,这样我们就不需要重复定义那么多地址了。因此我们就不需要把读的地址也弄成这样了

要想获得读的地址就直接将写的这个地址|0x01就变成读的地址了!

于是两个函数写完之后是这样

将这两个函数和数组都声明一下

最后DS1302.c的完整代码如下:

最后我们在主程序中调用函数然后运行

运行后的效果,请看视频:

DS1302实时时钟1

本节的代码演示就到这里。

之后有时间再演示一个可调时钟的代码!

源码放在评论区,自取!有什么问题,可以评论区留言。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java项目:19 基于SpringBoot的医院管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 医院管理系统 分为三个角色 管理员、医生、病人 管理员的主要功能&#xff1a;系统管理、医生管理、患者管理、预约管理、病史管理、住院信息管理、管…

ARM PAC/BTI/MTE三剑客精讲与实战

一、PAC指针认证精讲与实战 思考 1、什么是栈溢出攻击&#xff1f;什么是代码重用攻击&#xff1f;区别与联系&#xff1f; 2、栈溢出攻击的软&硬件缓解技术有哪些&#xff1f;在TF-A&OPTEE上的应用&#xff1f; 3、什么是ROP攻击&#xff1f;对ROP攻击的缓解技术&…

深入解析Linux中HTTP代理的工作原理

亲爱的Linux探险家们&#xff0c;准备好一起探索HTTP代理背后的神秘面纱了吗&#xff1f;在这个数字世界里&#xff0c;HTTP代理就像是一个神秘的中间人&#xff0c;默默地在你和互联网之间穿梭&#xff0c;为你传递信息。那么&#xff0c;这个神秘的中间人到底是如何工作的呢&…

centos7的git使用方法

下载git yum install git git克隆 git clone https...(图片中复制的内容) git提交到远程仓库 git add filename git commit -m "提交日志" git push git首次使用要配置邮箱和用户名 查看提交日志 git log 查看当前提交状态 git status

数据结构第十四天(树的存储/双亲表示法)

目录 前言 概述 接口&#xff1a; 源码&#xff1a; 测试函数&#xff1a; 运行结果&#xff1a; 往期精彩内容 前言 孩子&#xff0c;一定要记得你的父母啊&#xff01;&#xff01;&#xff01; 哈哈&#xff0c;今天开始学习树结构中的双亲表示法&#xff0c;让孩…

[算法前沿]--061-生成式 AI 的发展方向,是 Chat 还是 Agent?

什么是AI Agent (LLM Agent) AI Agent 的定义 AI Agent是一种超越简单文本生成的人工智能系统。它使用大型语言模型&#xff08;LLM&#xff09;作为其核心计算引擎&#xff0c;使其能够进行对话、执行任务、推理并展现一定程度的自主性。简而言之&#xff0c;Agent是一个具有…

上线GPT应用的流程

上线一个应用是一个逐步迭代的过程&#xff0c;不断根据用户反馈和市场需求进行改进和优化。上线一个基于GPT的应用通常需要以下步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.明确目标和用途…

在线JSON解析格式化工具

在线JSON解析格式化工具 - BTool在线工具软件&#xff0c;为开发者提供方便。JSON在线可视化工具:提供JSON视图,JSON格式化视图,JSON可视化,JSON美化,JSON美化视图,JSON在线美化,JSON结构化,JSON格式化,JSON中文Unicode等等。以清晰美观的结构化视图来展示json,可伸缩折叠展示,…

K8S之运用节点选择器指定Pod运行的节点

node节点选择器的使用 使用场景实践使用nodeName使用nodeSelectornodeName和nodeSelector混合使用1、设置了nodeName 和 设置 Node上都不存在的标签。看调度情况2、设置nodeName 为node1 和 设置 node2上才有的标签。看调度情况 实践总结 使用场景 默认情况&#xff0c;在创建…

【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、分布…

【2023年终总结】感恩南洋经历,2024收拾再启程

新年祝福 值此2024农历新年到来之际&#xff0c;祝一直支持“IT进阶之旅”的各位小伙伴们新的一年伴随着新的开始&#xff0c;新的旅程&#xff0c;新的突破&#xff0c;新的收获&#xff0c;新的期待..... 写在前面 2023&#xff0c;“IT进阶之旅”一直处于“停更”状态&#…

一站式在线协作开源办公软件ONLYOFFICE,协作更安全更便捷

1、ONLYOFFICE是什么&#xff1f; ONLYOFFICE是一款功能强大的在线协作办公软件&#xff0c;可以创建编辑Word文档、Excel电子表格&#xff0c;PowerPoint&#xff08;PPT&#xff09;演示文稿、Forms表单等多种文件。ONLYOFFICE支持多个平台&#xff0c;无论使用的是 Windows、…

Qt QML学习(一):Qt Quick 与 QML 简介

参考引用 QML和Qt Quick快速入门全面认识 Qt Widgets、QML、Qt Quick 1. Qt Widgets、QML、Qt Quick 区别 1.1 QML 和 Qt Quick 是什么关系&#xff1f; 1.1.1 从概念上区分 QML 是一种用户界面规范和标记语言&#xff0c;它允许开发人员创建高性能、流畅的动画和具有视觉吸引…

「数据结构」八大排序2:快排、归并排序

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;初阶数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 八大排序2 &#x1f349;快速排序&#x1f34c;霍尔版本&#x1f34c;挖坑法&#x1f34c;前后指针法 &#x1f349;快排优化&am…

鸿蒙原生应用再添新丁!央视新闻 入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;央视新闻 入局鸿蒙 来自 HarmonyOS 微博2月9日消息&#xff0c;#央视新闻启动鸿蒙原生应用开发#中央广播电视总台旗舰央视新闻客户端正式宣布&#xff0c;将基于HarmonyOS NEXT鸿蒙星河版&#xff0c;启动央视新闻 鸿蒙原生应用开发&#xf…

CSGO游戏搬砖项目靠谱吗?是不是骗人的

很多地方都在大肆宣扬说CSGO游戏搬砖项目有二三十个点的利润&#xff0c;但我觉得他们看待问题太片面了&#xff0c;没有从全局上去分析这个项目。 这些人为了能割到小白的韭菜真是无所不用其极&#xff0c;什么牛都能吹得出来&#xff01;至少要实事求是吧&#xff0c;这不睁…

Ajax+JSON学习一

AjaxJSON学习一 文章目录 前言一、Ajax简介1.1. Ajax基础1.2. 同源策略 二、Ajax的核心技术2.1. XMLHttpRequest 类2.2. open指定请求2.3. setRequestHeader 设置请求头2.4. send发送请求主体2.5. Ajax取得响应 总结 前言 一、Ajax简介 1.1. Ajax基础 Ajax 的全称是 Asynchron…

vue3 之 商城项目—详情页

整体认识 路由配置 准备组件模版 <script setup></script><template><div class"xtx-goods-page"><div class"container"><div class"bread-container"><el-breadcrumb separator">">&…

面向工业 X.0 的工业网络简述

此图片来源于网络 1、背景 工业4.0是在21世纪初提出的&#xff0c;特别是在2013年&#xff0c;德国政府正式推出了“工业4.0”战略&#xff0c;旨在通过利用物联网&#xff08;IoT&#xff09;等先进技术提高工业的竞争力。因此&#xff0c;我们可以认为工业4.0的实现时间大致…

安卓服务的常见问题,性能优化以及应用场景剖析

一、引言 在安卓开发中&#xff0c;服务&#xff08;Service&#xff09;扮演着至关重要的角色&#xff0c;它们在没有用户界面的情况下&#xff0c;为用户提供了长时间的后台任务执行能力。本文将探讨服务常见问题、优化策略、应用场景以及开发过程中应注意的事项。 二、应用场…