做公司网站的理念/青岛做网络推广的公司有哪些
51单片机内部含有晶振,可以实现定时/计数功能。但是其缺点有:精度往往不高、不能掉电使用等。 我们可以通过DS1302时钟芯片来解决以上的缺点。
DS1302时钟芯片
功能:DS1302是一种低功耗实时时钟芯片,内部有自动的计时功能,其范围包括:年、月、日、时、分、秒、星期。(且每个月的天数和闰年的天数可以内部自动调整)。
结构以及引脚定义:
常见的DS1302时钟芯片有DIP(直插式)和SO(表贴式)两种封装 。
引脚名称 | 功能 |
X1、X2 | DS1302外部晶振引脚,通常接32.768K晶振 |
VCC1 | 备用电源,在主电源使用时可被充电 |
VCC2 | 主电源供应管脚(与单片机共用一个电源) |
GND | 电源地 |
CE | 使能端,也是复位引脚,在进行读写时CE要保持高电平 |
I/O | 串行数据输入或输出 |
SCLK | 串行时钟 |
通常通过单片机直接与CE、I/O、SCLK这3个引脚相连,控制其高低电平,进而控制DS1302时钟芯片。
DS1302电路图
其中,C2和C3为旁路电容,目的是消除晶振起振时产生的电感干扰。对于此电路,没有接入备用电池,可自行将外部备用电源接入VCC1。
DS1302内部寄存器
控制寄存器
功能:通过给控制寄存器数据,来决定:进入年月日等具体哪一个寄存器、进行读/写操作。
上图为控制寄存器样式。
最高位一直为1;
第6位:1表示RAM,寻址内部存储器;0为CK,寻址内部寄存器。
第5位~第1位:为年月日等日历寄存器的地址。
最低位:1表示下一步操作为“读”;0表示下一步操作为“写”。
日历/时钟寄存器
上图为年月日等相关寄存器的地址(绿框内)、功能等。以下对其进行详细说明:
寄存器名称 | 取值范围 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
秒寄存器 | 00~59 | CH | 秒的十位 | 秒的个位 | |||||
分寄存器 | 00~59 | 0 | 分的十位 | 分的个位 | |||||
小时寄存器 | 1~12或 00~23 | 12小时制/ 24小时制 | 0 | AM/PM | Hour | 小时的个位 | |||
日寄存器 | 01~31 | 0 | 0 | 日的十位 | 日的个位 | ||||
月寄存器 | 01~12 | 0 | 0 | 0 | 1或0 | 月的个位 | |||
星期寄存器 | 01~07 | 0 | 0 | 0 | 0 | 星期几 | |||
年寄存器 | 01~99 | 20XX年的十位 | 年的个位 | ||||||
写保护寄存器 | WP | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
需特别注意以下部分:
秒寄存器:CH为DS1302的运行标志,当CH=0时,DS1302内部才能工作;当CH=1时,DS1302停止工作。
写保护寄存器:当WP为1时,DS1302只读不写。所以进行写操作时要确保WP为0。
DS1302初始时间设置
举个例子,如果想将2024.05.04—周7—23:59:49这个时间写入DS1302内部,具体操作如下:
1、对0x8E地址操作,关闭写保护;
2、对秒寄存器0x80操作,写入0x49;
3、对分寄存器0x82操作,写入0x59;
4、对时寄存器0x84操作,写入0x23;
......以此类推,最后对0x8E地址操作,打开写保护。
BCD码
BCD码:用4位二进制数来表示1位十进制数。
例如:0001 0011表示13、1000 0101表示85、0001 1010不合法。
在日历/时钟寄存器内部都是以BCD码来存放数据。因此要设置DS1302的时间,要写入BCD码格式。同时读取数据时,读到的也是BCD码,使用时需转换为对应十进制。
0 | 0000 | 5 | 0101 |
1 | 0001 | 6 | 0110 |
2 | 0010 | 7 | 0111 |
3 | 0011 | 8 | 1000 |
4 | 0100 | 9 | 1001 |
转换公式:
读写时序
前面提到:单片机与DS1302相连的线有3根,分别为:CE、SCLK和I/O引脚;如何通过这3根线进行数据写入和读出呢?
CE:初始化使其为低电平,在整个读写过程中,要保持高电平;一次读写操作完毕后,再回到低电平。
// 功能:DS1302初始化
void DS1302_Init(){DS1302_CE=0; //使能端置0DS1302_SCLK=0; //时钟脉冲置0
}
单字节写入:(先关闭写保护)当CE为高电平时,通过单片机控制SCLK产生脉冲,每一个上升沿,I/O线的数据就进入控制寄存器;当控制寄存器配置完成后,紧接着的I/O线数据会在上升沿时进入对应地址的寄存器。
/***@breaf DS1302单字节写入函数*@param command:写入命令字,包含要写入寄存器的地址;*@param Data:将要写入的数据内容;*@retval 无*/
void DS1302_WriteBety(unsigned char command,Data)
{unsigned char i;DS1302_CE=1;//使能位置高电平;//设置控制寄存器for(i=0;i<8;i++)//控制寄存器数据需要通过IO线一个一个写入控制寄存器;低位先写入{DS1302_IO=command&(0x01<<i);DS1302_SCLK=1; //给一个上升沿DS1302_SCLK=0;}//设置相关年月日寄存器for(i=0;i<8;i++)//数据写入{DS1302_IO=Data&(0x01<<i);DS1302_SCLK=1;DS1302_SCLK=0;}DS1302_CE=0;
}
单字节读出:当CE为高电平时,通过单片机控制SCLK产生脉冲,每一个上升沿,I/O线的数据就进入控制寄存器;当控制寄存器配置完成后,紧接着对应地址的寄存器数据会在下降沿时进入I/O线。
/***@breaf DS1302单字节读出函数*@param command:写入控制指令的指令,包含要读出寄存器的地址;*@retval Data:读出的数据;*/
unsigned char DS1302_ReadBety(unsigned char command)
{unsigned i,Data=0X00;command|=0X01;//写入指令与读出指令只在最后一位相差1,故在此利用或运算消除;DS1302_CE=1;//使能位置高电平;for(i=0;i<8;i++)//控制寄存器数据需要通过IO线一个一个写入控制寄存器;低位先写入{DS1302_IO=command&(0x01<<i);DS1302_SCLK=0; DS1302_SCLK=1;}DS1302_IO=0;for(i=0;i<8;i++)//数据读出{DS1302_SCLK=1;DS1302_SCLK=0; if(DS1302_IO) {Data |=(0X01<<i);}}DS1302_CE=0;return Data;
}
注意数据输入从低位开始。
代码设计
main.c
#include <REGX52.H>
#include "lcd1602.h"//包含LCD1602头文件
#include "DS1302.h"//包含DS1302头文件
void main ()//定义主函数
{LCD_Init(); //LCD1602初始化DS1302_Init();//DS1302初始化LCD_ShowString(1,1," - - ");//设置年月日格式LCD_ShowString(2,1," : : ");//设置时分秒格式DS1302_SetTime();//设置时间,通过数组进行设置while(1){DS1302_ReadTime();//读取内部时间LCD_ShowNum(1,1,DS1302_Time[0],2);//显示年LCD_ShowNum(1,4,DS1302_Time[1],2);//显示月LCD_ShowNum(1,7,DS1302_Time[2],2);//显示日LCD_ShowNum(2,1,DS1302_Time[3],2);//显示时LCD_ShowNum(2,4,DS1302_Time[4],2);//显示分LCD_ShowNum(2,7,DS1302_Time[5],2);//显示秒LCD_ShowNum(2,13,DS1302_Time[6], 1);//显示星期}
}
DS1302.c
#include <REGX52.H>//引脚定义;
sbit DS1302_SCLK=P3^6;
sbit DS1302_IO=P3^4;
sbit DS1302_CE=P3^5;//对应寄存器位置定义
#define DS1302_SECOND 0X80
#define DS1302_MINUTE 0X82
#define DS1302_HOUR 0X84
#define DS1302_DATE 0X86
#define DS1302_MONTH 0X88
#define DS1302_DAY 0X8A
#define DS1302_YEAR 0X8C
#define DS1302_WP 0X8E //定义数组,用于存放设定的时间,年月日时分秒星期
unsigned char DS1302_Time[]={23,10, 28,19,00,59,6};//顺序:年月日时分秒星期
/***@breaf DS1302初始化*@param无*@retval无*/
void DS1302_Init()
{DS1302_CE=0;//将使能位置0,低电平;DS1302_SCLK=0;//将时钟位置0,低电平;
}/***@breaf DS1302单字节写入函数*@param command:写入控制指令的指令,包含要写入寄存器的地址;*@param Data:将要写入的数据内容;*@retval 无*/
void DS1302_WriteBety(unsigned char command,Data)
{unsigned char i;DS1302_CE=1;//使能位置高电平;for(i=0;i<8;i++)//控制寄存器数据需要通过IO线一个一个写入控制寄存器;低位先写入{DS1302_IO=command&(0x01<<i);//相当于把第1--7位置0,只留第0位,如果第0位是0,则为0;反之则为1;DS1302_SCLK=1;DS1302_SCLK=0;}for(i=0;i<8;i++)//数据写入{DS1302_IO=Data&(0x01<<i);//相当于把第1--7位置0,只留第0位,如果第0位是0,则为0;反之则为1;DS1302_SCLK=1;DS1302_SCLK=0;}DS1302_CE=0;
}/***@breaf DS1302单字节读出函数*@param command:写入控制指令的指令,包含要读出寄存器的地址;*@retval Data:读出的数据;*/
unsigned char DS1302_ReadBety(unsigned char command)
{unsigned i,Data=0X00;command|=0X01;//写入指令与读出指令只在最后一位相差1,故在此利用或运算消除;DS1302_CE=1;//使能位置高电平;for(i=0;i<8;i++)//控制寄存器数据需要通过IO线一个一个写入控制寄存器;低位先写入{DS1302_IO=command&(0x01<<i);//相当于把第1--7位置0,只留第0位,如果第0位是0,则为0;反之则为1;DS1302_SCLK=0; DS1302_SCLK=1;}DS1302_IO=0;for(i=0;i<8;i++)//数据读出{DS1302_SCLK=1;DS1302_SCLK=0; if(DS1302_IO) {Data |=(0X01<<i);}}DS1302_CE=0;return Data;
}/***@breaf 向DS1302内设定时间*@param无*@retval无*/
void DS1302_SetTime()
{DS1302_WriteBety(DS1302_WP,0x00);//操作 DS1302 之前,关闭写保护,不然指令无法进入控制寄存器;DS1302_WriteBety(DS1302_YEAR, DS1302_Time[0]/10*16+DS1302_Time[0]%10);//写入年,并将10进制转化BCD码;DS1302_WriteBety(DS1302_MONTH, DS1302_Time[1]/10*16+DS1302_Time[1]%10);//写入月,并将10进制转化BCD码;DS1302_WriteBety(DS1302_DATE, DS1302_Time[2]/10*16+DS1302_Time[2]%10);//写入日,并将10进制转化BCD码;DS1302_WriteBety(DS1302_HOUR, DS1302_Time[3]/10*16+DS1302_Time[3]%10);//写入时,并将10进制转化BCD码;DS1302_WriteBety(DS1302_MINUTE, DS1302_Time[4]/10*16+DS1302_Time[4]%10);//写入分,并将10进制转化BCD码;DS1302_WriteBety(DS1302_SECOND, DS1302_Time[5]/10*16+DS1302_Time[5]%10);//写入秒,并将10进制转化BCD码;DS1302_WriteBety(DS1302_DAY, DS1302_Time[6]/10*16+DS1302_Time[6]%10);//写入星期,并将10进制转化BCD码;DS1302_WriteBety( DS1302_WP,0x80);//写入结束,开启写保护;
}/**
*@breaf 读取DS1302内时间
*@param无
*@retval无
*/
void DS1302_ReadTime()
{unsigned char Temp;//定义变量,用于暂时存储BCD码Temp=DS1302_ReadBety(DS1302_YEAR);//读取年BCD码;DS1302_Time[0]=Temp/16*10+Temp%16;//BCD码转十进制;Temp=DS1302_ReadBety(DS1302_MONTH);//读取月BCD码;DS1302_Time[1]=Temp/16*10+Temp%16;//BCD码转十进制;Temp=DS1302_ReadBety(DS1302_DATE);//读取日BCD码;DS1302_Time[2]=Temp/16*10+Temp%16;//BCD码转十进制;Temp=DS1302_ReadBety(DS1302_HOUR);//读取小时BCD码;DS1302_Time[3]=Temp/16*10+Temp%16;//BCD码转十进制;Temp=DS1302_ReadBety(DS1302_MINUTE);//读取分钟BCD码;DS1302_Time[4]=Temp/16*10+Temp%16;//BCD码转十进制;Temp=DS1302_ReadBety(DS1302_SECOND);//读取秒BCD码;DS1302_Time[5]=Temp/16*10+Temp%16;//BCD码转十进制;Temp=DS1302_ReadBety(DS1302_DAY);//读取星期BCD码;DS1302_Time[6]=Temp/16*10+Temp%16;//BCD码转十进制;
}
DS1302.h
#ifndef __DS1302_H__
#define __DS1302_H__extern unsigned char DS1302_Time[];//声明设置时间的数组
void DS1302_Init();//声明初始化函数
void DS1302_WriteBety(unsigned char command,Data);//声明时间写入函数
unsigned char DS1302_ReadBety(unsigned char command);//声明时间读出函数
void DS1302_SetTime();//声明设置内部时间函数
void DS1302_ReadTime();//声明读取内部时间函数#endif
相关文章:

51单片机入门:DS1302时钟
51单片机内部含有晶振,可以实现定时/计数功能。但是其缺点有:精度往往不高、不能掉电使用等。 我们可以通过DS1302时钟芯片来解决以上的缺点。 DS1302时钟芯片 功能:DS1302是一种低功耗实时时钟芯片,内部有自动的计时功能&#x…...

Redis-5 分布式锁
一.为什么要使用分布式锁? 传统的互斥锁synchronized只能作用于同一台虚拟机上的线程,在使用服务器集群部署的情况下,互斥锁就会失效,因此要采用分布式锁来处理不同服务器上的线程访问同一资源的情况。 二.redis的分布式锁是如何…...

音转文工具,9.8k star! 【送源码】
我们经常会遇到将音频转为文字的情况,比如在开会时录音的会议纪要、上课时录下的老师讲课内容。虽然网上也有一些在线的工具可以将音频转为文字,但是考虑到数据安全和费用问题,使用起来也不是很方便。 今天了不起给大家介绍一款开源工具——…...

【首次发布】华为 OD 机试 C卷抽中题库清单(真题库),目前华为OD机考以C卷为主,特殊情况会发送D卷
本篇博客为大家整理华为 OD 考友反馈 C 卷抽中题,经过 1 个的考友复盘,目前已经收录 100 题目,预计在有 2 周可以收集完整。 所有题目,都有考友截图反馈,同时欢迎大家机考过后,提供橡皮擦真题,获…...

【进程等待】waitpid的参数pid | status的位图位操作WIFEXITEDWEXITSTATUS宏
目录 waitpid pid status status位图 status按位操作 输入型参数和输入型参数 宏WIFEXITED&WEXITSTATUS options&非阻塞等待 上篇进程等待我们介绍到怎样去进程等待。我们介绍了wait函数&阻塞等待。本篇我们将介绍waitpid函数的参数pid和status。 waitp…...

unity---常用API
1. Vector3:结构体由x、y、z这3个数值组成,表示一个向量 magnitude变量返回该向量的长度normalized变量返回 magnitude 为 1 时的该向量zero静态变量Vector3(0, 0, 0)one静态变量Vector3(1, 1, 1)forward静态变量Vector3(0, 0, 1)back静态变量Vector3(0…...

设计模式: 模板模式
目录 一,模板模式 二,特点 三,组成部分 四,实现步骤 五,案例 一,模板模式 模板模式(Template Pattern)是一种行为型设计模式,它在超类中定义了一个算法的骨架&#…...

[虚拟机+单机]梦幻契约H5修复版_附GM工具
本教程仅限学习使用,禁止商用,一切后果与本人无关,此声明具有法律效应!!!! 教程是本人亲自搭建成功的,绝对是完整可运行的,踩过的坑都给你们填上了 视频演示 [虚拟机单…...

头文件相互包含 前向声明
当两个类需要相互访问对方的成员或方法时,通常意味着它们之间存在某种依赖关系。这种依赖关系可能源于类的设计或功能需求。以下是一个简单的例子,展示了当两个类需要相互访问对方成员或方法时,如何使用包含对方头文件的方式来解决循环包含的…...

七款好用的上网行为管理软件推荐 |有没有好用的上网行为管理系统
七款好用的上网行为管理软件推荐 |有没有好用的上网行为管理系统 员工上班刷视频! 员工上班炒股! 员工上班干副业! 碰见这种情况怎么办?当然是用电脑监控软件来监视员工的一举一动了,那么这样的软件有哪些呢&#…...

centos7-bcc 安装
检查 内核信息 确保安装的kernel-dev 和内核版本一致!!! rpm -qa|grep kernel kernel-tools-3.10.0-1160.92.1.el7.x86_64 kernel-devel-3.10.0-1160.92.1.el7.x86_64 kernel-headers-3.10.0-1160.92.1.el7.x86_64 kernel-3.10.0-1160.92.1.el7.x86_64 kernel-tools-libs-3.1…...

5.06号模拟前端面试8问
5.06号模拟前端面试8问 1.promise如何实现then处理 在JavaScript中,Promise 是一个代表异步操作最终完成或失败的对象。它有三种状态:pending(等待),fulfilled(完成),rejected&…...

解读Inscode AI:开启代码智能化的新时代
导语: 近年来,人工智能技术的迅猛发展已经深刻地影响着各个行业,而在软件开发领域,Inscode AI的出现无疑将给代码智能化带来一场革命。本文将为大家解读Inscode AI的特点和应用,探索其如何改变我们的软件开发方式。 一…...

快速了解Vuex
Vuex Vuex使用Vuex Vuex 📌vuex 是一个专为 Vue.js 应用程序开发的状态管理库 📌vuex 可以在多个组件之间共享数据,并且共享的数据是响应式的,即数据的变更能及时渲染到模板 📌vuex 采用集中式存储管理所有组件的状态…...

vue管理系统导航中添加新的iconfont的图标
1.在官网上将需要的图标,加入项目中,下载 2.下载的压缩包中,可以选择这两个,复制到项目目录中 3.如果和之前的iconfont有重复,那么就重新命名 4.将这里的.ttf文件,也重命名为自己的 5.在main文件中导入 6.在…...

Docker的介绍及与传统虚拟化技术的区别
Docker是一个开源的应用容器引擎,它使得开发者可以将应用及其依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上。Docker基于Go语言开发,它的出现极大地简化了应用程序的部署、管理和扩展。 以下是Docker…...

06.Git远程仓库
Git远程仓库 #仓库种类,举例说明 github gitlab gitee #以这个仓库为例子操作登录码云 https://gitee.com/projects/new 创建仓库 选择ssh方式 需要配置ssh公钥 在系统上获取公钥输入命令:ssh-keygen 查看文件,复制公钥信息内…...

Anaconda安装和深度学习环境的安装(TensorFlow、Pytorch)
换了新电脑,重新装一下anaconda这些编程环境。好久没装过了,自己也需要查查资料,然后记录一下,分享给别人。 目标,三个环境:1.anaconda基础环境(包含xgboost和lightgbm),…...

元素设置 flex:1,但是会被内部长单词宽度超出拉伸
初始布局如上图,left中是代码编辑器,实际上是个文本域,当输入长文本过长时,left宽度会被拉伸。 右侧容器被挤压。 解决方案:width:0; .left{flex:1; width:0} 当输入长文本过长时,…...

win11 安装oracle11g详细流程及问题总结
1.安装包下载地址 本案例操作系统, Oracle 11g下载-Oracle 11g 64位/32位下载官方版(附详细的安装图解教程) - 多多软件站多多为大家免费提供Oracle 11g下载,包含64位/32位官方版本,并附详细的Oracle 11g安装图解教程,同时希望能…...

自我模拟面试
在面试中,你如何面对面试官呢? 我认为,对于面试官提出的问题,如果你不会,那就是不会。你的思考过程,实际上就是将你平时所学的,所了解的,在脑海中进行一次复习,就像当别…...

头歌java面向对象基础
第一关类的定义 package step1;// ---------------------Begin------------------------ public class Student{String name"李四";int age18;public void speak(){System.out.println("我爱学习");} }// ---------------------End----------------------…...

PMP课程知识点很多,无法入手,该如何学习?
回顾整个学习过程,我花费了不少时间,但也学到了系统的项目管理知识,考试结果也让我感到满意。在学习过程中,我认为以下几点非常重要: 1、需要对课本进行整体阅读,以便对内容有一个整体印象; 2…...

隔离流量优化网络传输
不要将长流和短突发流(或者大象流和老鼠流)混部在一起,我建议用切片或虚通道将它们在全链路范围彻底隔离,而不仅仅在交换机上配合着大肆宣讲的高端包分类算法配置一些排队调度。 也不必扯泊松到达,帕累托分布,这些概念在论文建模…...

【前端热门框架【vue框架】】——事件处理与表单输入绑定以及学习技巧,让学习如此简单
👨💻个人主页:程序员-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...

芒果YOLOv8改进164:检测头篇:ImplicitHead 隐性知识检测头| 即插即用,独家新颖更新,精度高效涨点
💡本篇内容:芒果YOLOv8改进164:检测头篇:ImplicitHead 独家原创检测头 | 即插即用,独家新颖更新,精度高效涨点 芒果专栏提出:原创隐性知识学习检测头 ImplicitHead 结构,改进源码教程 | 详情如下🥇 即插即用 ImplicitHead检测头,包括改进所需的 核心结构代码 文件作…...

学习周报:文献阅读+Fluent案例+有限体积法理论学习
目录 摘要 Abstract 文献阅读:使用带有域分解的PINN求解NS方程 文献摘要 文献讨论|结论 实验设置 NS方程介绍 PINN框架 损失函数 域分解 减轻梯度病理的方法 动态权重方法 新型网络架构 案例证明:2D圆柱尾流 Fluent案例:径向流…...

用户中心(下)
文章目录 计划登录逻辑接口简单说明cookie和session写代码流程后端逻辑层控制层测试用户管理接口 前端简化代码对接后端代理 计划 开发完成后端登录功能 (单机登录 > 后续改造为分布式 / 第三方登录)✔开发后端用户的管理接口 (用户的查询…...

商务分析方法与工具(六):Python的趣味快捷-字符串巧妙破解密码本、身份证号码、词云图问题
Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…...

ftp方式和http方式搭建云仓库
1.搭建阿里云仓库 国外云仓库比较慢,可以使用阿里云仓库代替 1.服务端和客户端切换到 yum.repo.d 目录 将自带的仓库移走 [rootlocalhost ~] cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d] mkdir bak [rootlocalhost yum.repos.d] mv *.repo bak/ [rootloca…...