轻松学51单片机--基于普中科技开发板练习蓝桥杯及机器人大赛等(8-DS1302实时时钟)
1、DS1302
DS1302是一款实时时钟芯片,可以用于实时计时和日期显示等应用。它具有低功耗、精度高、芯片体积小等特点,非常适合嵌入式系统和小型电子设备中使用。
DS1302具有多个功能和特性,包括:
-
时钟功能:可以显示年、月、日、时、分、秒,并支持12小时和24小时制。
-
计时功能:可以计时长达99小时59分59秒,并支持计时暂停和复位。
-
闹钟功能:可以设置闹钟时间,并在闹钟时间到达时触发中断。
-
电源监控功能:可以监测电池电压,并在电池电压低于设定阈值时触发中断。
-
数据存储功能:可以存储时钟和计时数据,断电后仍能保持数据不丢失。
-
串行接口:可以通过SPI或I2C接口与主控芯片通信。
DS1302的引脚布局简单明了,包括VCC、GND、RST、CLK、DAT等。
使用DS1302时,需要先通过SPI或I2C接口与主控芯片建立通信,然后通过写入和读取寄存器的方式来控制和获取DS1302的各种功能。
总之,DS1302是一款功能丰富、易于使用的实时时钟芯片,可以广泛应用于各种嵌入式系统和电子设备中。
2、DS1302驱动代码解读
(1)引脚定义
DS1302 与单片机之间能简单地采用同步串行的方式进行通信 仅需用到三个口线 :(1)RES 复位(2)I/O 数据线(3)SCLK串行时钟。
//引脚定义
sbit DS1302_SCLK=P3^6;
sbit DS1302_IO=P3^4;
sbit DS1302_CE=P3^5;
(2)寄存器定义

#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
这里定义的寄存器为读寄存器的地址,如果是写需要将命令地址参数最后一位置1。Command|=0x01; //将指令转换为读指令
写命令用于设置时间日期,读命令用于显示时间日期。
(3)定义全局变量时间数组
//时间数组,索引0~6分别为年、月、日、时、分、秒、星期
unsigned char DS1302_Time[]={24,05,16,12,00,00,6};
这里的定义只是本文件内有效,如果要在main文件中的函数中也生效,需要在头文件中加extern进行声明。

(4)DS1302字节读写时序
我们需要根据DS1302的数据手册关于读写时序的定义来完成读写字节函数的代码

读写开始前,CE和SCLK保持低电平。
void DS1302_Init(void)
{DS1302_CE=0;DS1302_SCLK=0;
}
单字节读,先给寄存器的地址,表明读哪个寄存器的值,然后再把寄存器的值读到IO口P3^4上。
unsigned char DS1302_ReadByte(unsigned char Command)
{unsigned char i,Data=0x00;Command|=0x01; //将指令转换为读指令DS1302_CE=1;for(i=0;i<8;i++){DS1302_IO=Command&(0x01<<i);DS1302_SCLK=0;DS1302_SCLK=1;}for(i=0;i<8;i++){DS1302_SCLK=1;DS1302_SCLK=0;if(DS1302_IO){Data|=(0x01<<i);}}DS1302_CE=0;DS1302_IO=0; //读取后将IO设置为0,否则读出的数据会出错return Data;
}
单字节写,先给要写的寄存器地址,然后将数据从IO端口发给DS1302。
void DS1302_WriteByte(unsigned char Command,Data)
{unsigned char i;DS1302_CE=1;for(i=0;i<8;i++){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;
}
(4)DS1302的读写时间日期
DS1302寄存器存储的时间和日期是以BCD码的形式存储的,因此在设置时间和读出时间的时候需要将十进制转BCD写入DS1302或将BCD转十进制后读取。有一点要注意就是设置时间日期的时候,要把DS1302写保护寄存器0x8E的WP为清零才能进行写入,写完后置1。
void DS1302_SetTime(void)
{DS1302_WriteByte(DS1302_WP,0x00);DS1302_WriteByte(DS1302_YEAR,DS1302_Time[0]/10*16+DS1302_Time[0]%10);//十进制转BCD码后写入DS1302_WriteByte(DS1302_MONTH,DS1302_Time[1]/10*16+DS1302_Time[1]%10);DS1302_WriteByte(DS1302_DATE,DS1302_Time[2]/10*16+DS1302_Time[2]%10);DS1302_WriteByte(DS1302_HOUR,DS1302_Time[3]/10*16+DS1302_Time[3]%10);DS1302_WriteByte(DS1302_MINUTE,DS1302_Time[4]/10*16+DS1302_Time[4]%10);DS1302_WriteByte(DS1302_SECOND,DS1302_Time[5]/10*16+DS1302_Time[5]%10);DS1302_WriteByte(DS1302_DAY,DS1302_Time[6]/10*16+DS1302_Time[6]%10);DS1302_WriteByte(DS1302_WP,0x80);
}void DS1302_ReadTime(void)
{unsigned char Temp;Temp=DS1302_ReadByte(DS1302_YEAR);DS1302_Time[0]=Temp/16*10+Temp%16;//BCD码转十进制后读取Temp=DS1302_ReadByte(DS1302_MONTH);DS1302_Time[1]=Temp/16*10+Temp%16;Temp=DS1302_ReadByte(DS1302_DATE);DS1302_Time[2]=Temp/16*10+Temp%16;Temp=DS1302_ReadByte(DS1302_HOUR);DS1302_Time[3]=Temp/16*10+Temp%16;Temp=DS1302_ReadByte(DS1302_MINUTE);DS1302_Time[4]=Temp/16*10+Temp%16;Temp=DS1302_ReadByte(DS1302_SECOND);DS1302_Time[5]=Temp/16*10+Temp%16;Temp=DS1302_ReadByte(DS1302_DAY);DS1302_Time[6]=Temp/16*10+Temp%16;
}
3、DS1302实现电子钟
(1)实现要求
开机显示设定的时间12:00:00。
矩阵键盘key1被按下为切换数码管显示(数码管显示模式 0-时钟显示,1-闹钟显示,2-日期显示,3-时钟设置,4-闹钟设置5-日期设置)时钟设置,日期设置:将当前时钟读进来进行设置。
在设置界面3-4-5,数码管对应位闪烁。
矩阵键盘key2按下为切换时钟闹钟设置的时分秒,日期的年月日。按一下则切换下一个。
矩阵键盘key3按下是闪烁的时分秒年月日数码管数字加一。
矩阵键盘key4按下是闪烁的时分秒年月日数码管数字减一。
矩阵键盘key5按下为确认键,设置确认后返回到对应的显示界面。
如果时钟走到闹钟的时间,则led0闪烁,按下key6关闭闪烁。
(2)键盘抖动与数码管闪烁
由于在按键驱动里面并没有使用软件消抖,因此如果不进行按键消抖处理,会出现在调整时间闹钟日期按键盘的时候出现按一下数字跳动的厉害。数码管如果不减速,也会出现在设置界面的时候,时、分、秒对应的数码管频闪,不正常。
unsigned char Key_Slow_Down;//按键减速专用变量 防抖动
unsigned char Seg_Slow_Down;//数码管减速专用变量 防闪烁
在定时器0中断服务函数里面
if(++Key_Slow_Down == 10) Key_Slow_Down = 0;
if(++Seg_Slow_Down == 600) Seg_Slow_Down = 0;
对变量累加,1ms一次,按键加到10ms,Key_Slow_Down=0,而在按键处理函数中。

只有Key_Slow_Down=0的时候才会执行按键相应的动作,否则由于return的存在,后面的代码将不会执行。同理数码管也是这样。具体到Key_Slow_Down与Seg_Slow_Down在定时器里的值是多少最合适,可以根据具体场景以及使用的传感器情况来进行设置。
(3)Seg_Disp_Mode数码管显示模式
本实验有6个显示模式, 0-时钟显示,1-闹钟显示,2-日期显示,3-时钟设置,4-闹钟设置5-日期设置。注意对应关系。这个实验和上一个定时器实现电子钟比较类似。就不再赘述了。代码以及仿真图附上,请同学们下载到开发板或者仿真图上验证。

相关文章:
轻松学51单片机--基于普中科技开发板练习蓝桥杯及机器人大赛等(8-DS1302实时时钟)
1、DS1302 DS1302是一款实时时钟芯片,可以用于实时计时和日期显示等应用。它具有低功耗、精度高、芯片体积小等特点,非常适合嵌入式系统和小型电子设备中使用。 DS1302具有多个功能和特性,包括: 时钟功能:可以显示年…...
《Java核心技术II》并行流
并行流 从集合中获取并行流:Stream paralleWords words.parallelStream(); parallel方法将任意顺序流转换为并行流:Stream paralleWords Stream.of(wordArray).parallel(); 以下是不好的示范,假设对字符串的所有短单词计数: …...
Vue 3前端与Python(Django)后端接口简单示例
项目 后端(Django)前端(Vue 3) 后端(Django) 创建Django项目和应用: 确保你已经安装了Django。如果没有安装,可以使用以下命令安装: pip install django创建一个新的Dja…...
《拉依达的嵌入式\驱动面试宝典》—操作系统篇(二)
《拉依达的嵌入式\驱动面试宝典》—操作系统篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…...
STM32和国民技术(N32)单片机串口中断接收数据及数据解析
一、串口配置 根据单片机不同,串口IO口配置也不同,像STM32单片机,RX脚可以配置为复用输出,也可以配置为浮空输入模式。但是国民技术单片机(N32)的RX是不能配置为复用输出模式的,这样是收不到数…...
【人工智能】大语言模型的微调:让模型更贴近你的业务需求
大语言模型的微调:让模型更贴近你的业务需求 随着大语言模型(LLM, Large Language Model)如 GPT-4、BERT 和 T5 等的广泛应用,模型的微调(Fine-tuning)技术成为实现领域专属任务的重要手段。通过微调&…...
大语言模型的稀疏性:提升效率与性能的新方向
大语言模型的稀疏性:提升效率与性能的新方向 大语言模型(LLM, Large Language Model)随着参数规模的不断扩大,其性能得到了显著提升,但也带来了巨大的计算和存储开销。稀疏性(Sparsity)作为一种…...
Linux Bridge与Open vSwitch的工作原理及协作
在虚拟化和云计算环境中,Linux Bridge和Open vSwitch(OVS)都是用于构建虚拟网络的关键组件。它们提供了二层交换功能,并且能够将虚拟机或容器连接到物理网络中。然而,两者在实现细节和技术特性上有所不同,下…...
async++源码阅读——task模块
1、task_base.h 本人将自己的理解以注释的形式添加的代码中,方便需要的时候重新复习。该文件中用到的一些技术: 该文件中的类并没有使用virtual,而是自定义了需函数表,但是并没有放到每个对象的开始位置,而是通过指针…...
项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(五)
文章目录 一、学生管理模块功能实现1、添加学生功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、学生管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码…...
EF Core一对一和多对多
目录 EF Core一对一 关系属性 关系配置 使用 EF Core多对多 关系属性 关系配置 使用 EF Core一对一 关系属性 必须显式的在其中一个实体类中声明一个外键属性,可以在Order建立Delivery,也可以在Delivery建立OrderId class Order {public long…...
记一次sealos部署k8s集群之delete了第一台master如何恢复
记一次sealos部署k8s集群之delete了第一台master如何恢复 一、背景描述 使用sealos部署了一套K8S集群 master信息:172.27.100.1、172.27.100.2、172.27.100.3 node信息:172.27.100.4、172.27.100.5 sealos安装在172.27.100.1节点,根目录下/root/.sealos/文件还在! [root…...
vue3+vite+ts集成第三方js
npm run dev可以正常运行和测试。但是npm run build会报错。 要实现引入静态js,避免使用全局变量报错。 1. HTML 引入第三方 JS 在你的 HTML 文件中,通过 <script> 标签引入一个本地第三方 JS 文件,例如: <script sr…...
android framework.jar 在应用中使用
在开发APP中,有时会使用系统提供的framework.jar 来替代 android.jar, 在gradle中配置如下: 放置framework.jar 依赖配置 3 优先级配置 gradle.projectsEvaluated {tasks.withType(JavaCompile) {Set<File> fileSet options.bootstrapClasspat…...
FFmpeg入门
在音视频处理领域,有一款神器级的工具横扫开发者圈,那就是 FFmpeg。它被誉为“音视频处理的瑞士军刀”,凭借强大的功能和开源的特性成为众多开发者和媒体从业者的首选。今天,我们就来聊聊 FFmpeg 的入门使用,带你轻松开…...
云平台一键部署【Video-Background-Removal】视频换背景,无任何限制,随意换
Video-Background-Removal 是一款革命性的视频背景替换工具,旨在让用户轻松实现视频背景的快速更换。无论你是专业创作者还是普通用户,这款软件都能让你在几秒钟内改变背景,完全消除限制,随心所欲,随时随地想换就换&am…...
量子计算:从薛定谔的猫到你的生活
文章背景 说到量子计算,不少人觉得它神秘又遥不可及。其实,它只是量子物理学的一个“应用小分支”。它的核心在于量子比特的“叠加”和“纠缠”,这些听上去像科幻小说的概念,却为计算世界开辟了一片全新的天地。如果经典计算是“…...
51单片机——I2C-EEPROM
I2C:总线标准或通信协议 EEPROM:AT24C02芯片 开发板板载了1个EEPROM模块,可实现IIC通信 1、EEPROM模块电路(AT24C02) 芯片的SCL和SDA管脚是连接在单片机的P2.1和P2.0上 2、I2C介绍 I2C(Interÿ…...
R语言的语法糖
R语言的语法糖 引言 在编程语言中,所谓的“语法糖”是指那些使得程序员能够以更简洁、直观的方式书写代码的语法形式。R语言作为一种用于统计分析和数据可视化的编程语言,具有丰富的功能和灵活的语法。本文将深入探讨R语言中的语法糖,帮助读…...
【算法学习笔记】30:埃氏筛(Sieve of Eratosthenes)和线性筛(Linear Sieve)
测试题目:AcWing 868. 筛质数 埃氏筛(Sieve of Eratosthenes) 如果 i i i是素数,每次把 i i i的倍数都筛掉,存在重复筛选,时间复杂度 n ⋅ l o g ( l o g n ) n \cdot log(logn) n⋅log(logn)。 #includ…...
【海洋空间信息工程概论 实验报告4】空间数据投影变换
上一篇:【海洋空间信息工程概论 实验报告3】海洋数据矢量化 目录 一、实验目的 二、实验环境 三、实验内容 实验步骤 编辑 实验心得 一、实验目的 由于数据源的多样性,当数据与我们研究、分析问题的空间参考系统(坐标系统、投影方式…...
小说下载与数字图书馆构建:开源工具novel-downloader完全指南
小说下载与数字图书馆构建:开源工具novel-downloader完全指南 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代,读者常面临三大困境:…...
二进制逆向新选择:Binary Ninja核心功能与实战指南
二进制逆向新选择:Binary Ninja核心功能与实战指南 【免费下载链接】deprecated-binaryninja-python Deprecated Binary Ninja prototype written in Python 项目地址: https://gitcode.com/gh_mirrors/de/deprecated-binaryninja-python 一、定位解析&#…...
3个实战技巧让你的QQ空间数据实现永久备份
3个实战技巧让你的QQ空间数据实现永久备份 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间里的青春记忆会随着时间消失?那些承载着成长点滴的说说、珍贵的照…...
游戏开发实战:Unity中合并带材质的.obj模型文件全攻略
Unity游戏开发实战:高效合并带材质的.obj模型文件全流程解析 在游戏开发中,资源优化始终是提升性能的关键环节。当项目涉及大量.obj格式的3D模型时,合并这些文件不仅能减少Draw Call,还能显著简化资源管理流程。本文将深入探讨如何…...
Windows 11终极优化指南:用Win11Debloat免费提升系统性能51%
Windows 11终极优化指南:用Win11Debloat免费提升系统性能51% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...
Win11Debloat:三步焕新Windows系统,让老电脑性能提升50%的开源神器
Win11Debloat:三步焕新Windows系统,让老电脑性能提升50%的开源神器 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other chan…...
手把手教程:Qwen-Image快速部署,小白也能轻松玩转AI绘画
手把手教程:Qwen-Image快速部署,小白也能轻松玩转AI绘画 1. 教程介绍 今天我们要一起探索的是阿里云通义千问团队推出的Qwen-Image图像生成模型。这个模型最大的特点就是能精准理解你的文字描述,生成包含复杂文本的高质量图像。想象一下&am…...
重磅!GPT-6曝光了
就在刚刚,有知情人士爆料:GPT-6正在内测,预计4月16日正式发布。消息源头,是X平台上的科技大V 草莓哥iruletheworldmo。他说,最近OpenAI内部将有大动作,他从中搞到了不少猛料。草莓哥说了一些关键信息&#…...
5分钟终极指南:在Windows上完美使用苹果触控板的完整方案
5分钟终极指南:在Windows上完美使用苹果触控板的完整方案 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpad…...
