DS1302时钟模块介绍及与USRAT HMI通信

news/2025/2/10 22:24:51/

一、DS1302时钟模块

现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力,该芯片采用普通32.768kHz晶振,DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW。

                                                                            图1 DS1302时钟模块实物图

                                                                                       图2 DS1302时钟模块封装

                                                                                表1  DS1302芯片引脚功能介绍表

VCC1

后备电源

GND

电源地

VCC2

工作电源

X1

晶振32.768kHz输入

X2

SCLK

时钟信号

I/O

数据输入输出

RST

复位信号|片选信号

 

   DS1302时钟模块的引脚功能介绍如表1所示,而时序不再做陈述,需要再自行查找资料。

二、DS1302时钟模块驱动代码

1.头文件

#ifndef _DS1302_H_#define _DS1302_H_#include "STC15F2K60S2.h"#ifndef UINT8#define UINT8 unsigned char#endif#ifndef DS1302_READ_BURST#define DS1302_READ_BURST 0xBF#endif#ifndef DS1302_WRITE_BURST#define DS1302_WRITE_BURST 0xBE#endifsbit DS1302_IO   = P1^4;sbit DS1302_RST  = P1^5;sbit DS1302_SCLK = P1^3;extern UINT8 xdata time[9];extern UINT8 xdata date[11];extern UINT8 xdata current_day[2];//声明全局变量void DS1302_WriteByte(UINT8 data_byte);//向ds1302写一个字节void DS1302_ReadByte(UINT8 *data_byte);//从ds1302读一个字节void DS1302_Start();//操作起始信号void DS1302_Over();//操作结束信号void DS1302_ClearWriteProtection();//清除写保护void DS1302_SetWriteProtection();//设置写保护void DS1302_SetTime(UINT8 *ds1302_set_buffer);//设置ds1302的时间void DS1302_ReadTime(UINT8 *ds1302_build_buffer);//读取ds1302的时间void Time_Build();//系统从ds1302读取时间void Time_Set();//系统向ds1302设置时间void Time_Init();//系统时间初始化#endif

2.主程序

#include "ds1302.h"void DS1302_WriteByte(UINT8 data_byte)//向ds1302写一个字节{UINT8 i;for (i=0;i<8;i++){DS1302_IO = data_byte & 0x01;DS1302_SCLK = 1;data_byte >>= 1;DS1302_SCLK = 0;}}void DS1302_ReadByte(UINT8 *data_byte) //从ds1302读一个字节{UINT8 i;for (i=0;i<8;i++){      *data_byte >>= 1;if (DS1302_IO){*data_byte |= 0x80;}DS1302_SCLK = 1;DS1302_SCLK = 0;}}void DS1302_Start()//操作起始信号{DS1302_RST  = 0;DS1302_SCLK = 0;DS1302_RST  = 1;}void DS1302_Over()//操作结束信号{DS1302_IO  = 0;DS1302_RST = 0;}void DS1302_ClearWriteProtection()//清除写保护{DS1302_Start();DS1302_WriteByte(0x8E);DS1302_WriteByte(0x00);DS1302_Over();}void DS1302_SetWriteProtection()//设置写保护{DS1302_Start();DS1302_WriteByte(0x8E);DS1302_WriteByte(0x80);DS1302_Over();}void DS1302_SetTime(UINT8 *ds1302_set_buffer)//突发模式下设置时间{UINT8 i;DS1302_ClearWriteProtection();DS1302_Start();DS1302_WriteByte(DS1302_WRITE_BURST);for (i=0; i<7; i++){DS1302_WriteByte(ds1302_set_buffer[i]);}DS1302_WriteByte(0x80);//突发模式一次要写8个字节,第八个字节是写保护字节DS1302_Over();}void DS1302_ReadTime(UINT8 *ds1302_read_buffer)//突发模式下读取时间{UINT8 i,Temp;DS1302_ClearWriteProtection();DS1302_Start();DS1302_WriteByte(DS1302_READ_BURST);for (i=0; i<7; i++){DS1302_ReadByte(ds1302_read_buffer+i);}DS1302_ReadByte(&Temp);//突发模式一次读8个字节,最后一字节读出来没用DS1302_Over();DS1302_SetWriteProtection();}void Time_Build()//读取时间后转换成需要的格式{UINT8 xdata ds1302_build_buffer[7];DS1302_ReadTime(ds1302_build_buffer);time[7] = (ds1302_build_buffer[0]&0x0f)+'0';time[6] = ((ds1302_build_buffer[0]&0x70)>>4)+'0';time[4] = (ds1302_build_buffer[1]&0x0f)+'0';time[3] = ((ds1302_build_buffer[1]&0x70)>>4)+'0';time[1] = (ds1302_build_buffer[2]&0x0f)+'0';time[0] = ((ds1302_build_buffer[2]&0x30)>>4)+'0';date[9] = (ds1302_build_buffer[3]&0x0f)+'0';date[8] = ((ds1302_build_buffer[3]&0x30)>>4)+'0';date[6] = (ds1302_build_buffer[4]&0x0f)+'0';date[5] = ((ds1302_build_buffer[4]&0x10)>>4)+'0';date[3] = (ds1302_build_buffer[6]&0x0f)+'0';date[2] = ((ds1302_build_buffer[6]&0xf0)>>4)+'0';}void Time_Set()//将时间转化为对应格式存入ds1302{UINT8 xdata ds1302_set_buffer[7];ds1302_set_buffer[0]  = time[7]-'0';ds1302_set_buffer[0] |= ((time[6]-'0')&0x07)<<4;ds1302_set_buffer[1]  = time[4]-'0';ds1302_set_buffer[1] |= ((time[3]-'0')&0x07)<<4;ds1302_set_buffer[2]  = time[1]-'0';ds1302_set_buffer[2] |= ((time[0]-'0')&0x03)<<4;ds1302_set_buffer[3]  = date[9]-'0';ds1302_set_buffer[3] |= ((date[8]-'0')&0x03)<<4;ds1302_set_buffer[4]  = date[6]-'0';ds1302_set_buffer[4] |= ((date[5]-'0')&0x01)<<4;ds1302_set_buffer[6]  = date[3]-'0';ds1302_set_buffer[6] |= ((date[2]-'0')&0x0f)<<4;ds1302_set_buffer[5] = 0x01;DS1302_SetTime(ds1302_set_buffer);}void Time_Init()//开机时间初始化{Time_Build();current_day[0] = date[8];current_day[1] = date[9];//保存当前日期,用于检测日期变化}

三、DS1302时钟模块与USRAT HMI通信

    uchar a=0,b=0,c=0,d=0,e=0,f=0;/**********显示时间**********/			a = date[2];	//发送年数据b = date[3];c = date[5];	//发送月数据d = date[6];e = date[8];	//发送日数据f = date[9];write_txt("t0.txt=");   //发送文本write_COM(34);			//双引号write_COM(a);write_COM(b);write_COM(34);write_END();				//结束符 write_txt("t1.txt=");   //发送文本write_COM(34);			//双引号write_COM(c);write_COM(d);write_COM(34);write_END();				//结束符 write_txt("t2.txt=");   //发送文本write_COM(34);			//双引号write_COM(e);write_COM(f);write_COM(34);write_END();				//结束符 a = time[0];	//发送时数据b = time[1];c = time[3];	//发送分钟数据d = time[4];e = time[6];	//发送秒钟数据f = time[7];write_txt("t3.txt=");   //发送文本write_COM(34);			//双引号write_COM(a);write_COM(b);write_COM(34);write_END();				//结束符 write_txt("t4.txt=");   //发送文本write_COM(34);			//双引号write_COM(c);write_COM(d);write_COM(34);write_END();				//结束符write_txt("t5.txt=");   //发送文本write_COM(34);			//双引号write_COM(e);write_COM(f);write_COM(34);write_END();				//结束符write_txt("t9.txt=");   //发送文本write_COM(34);if(week==1)							//发送星期数据write_txt("一");if(week==2)write_txt("二");if(week==3)write_txt("三");if(week==4)write_txt("四");if(week==5)write_txt("五");if(week==6)write_txt("六");if(week==7)write_txt("日"); write_COM(34);write_END();

 


http://www.ppmy.cn/news/173758.html

相关文章

51单片机15单片机 DS1302时钟芯片

目录 前言 一、DS18B20芯片介绍 二、芯片引脚定义与应用电路 三、寄存器定义 四、命令字 五、数据流 六、时序图与数据读写 6.1 单字节写&#xff08;Write&#xff09; 6.2 单字节读&#xff08;Read&#xff09; 6.3 DS1302时钟实现部分 参考资料&#xff1a; 前言…

树莓派54/100 - Pico连接DS1307时钟模块,做个实时数字钟

我一开始以为树莓派Pico没有时钟模块&#xff0c;但查了相关资料&#xff0c;Pico仍有基本的RTC支持&#xff0c;只不过它在掉电的时候&#xff0c;无法再维护精确的时间。 这里的RTC&#xff0c;是实时时钟&#xff08;Real Time Clock&#xff09;的缩写&#xff0c;MicroPy…

Ds918 ds3615 ds3617区别_iPhone12和iPhone12pro的区别有什么?

一、iPhone12和iPhone12pro哪个好&#xff1f; iPhone12更值得推荐&#xff0c;无论是从外观、屏幕、材质、像素、电池各方面都和iPhone12pro差不多&#xff0c;区别不大&#xff0c;最重要iPhone12和iPhone12pro同样内存&#xff0c;价格比iPhone12pro便宜1700元。 iPhone12 i…

Autodesk 3ds Max 系统要求和电脑硬件建议

3ds Max 官方系统要求 摘自Autodesk官网&#xff0c;这些是3ds Max最新的系统硬件要求&#xff1a; 软件 操作系统 64 位 Microsoft Windows 11 和 Windows 10。有关支持信息&#xff0c;请参阅 Autodesk 的产品支持生命周期。 浏览器 Autodesk 建议使用以下 Web 浏览器的…

3ds max最佳插件推荐,值得了解

3ds max本身就是一个功能非常复杂的3d软件。各种建模、动画、仿真工具应有尽有。但是&#xff0c;有外部作者创建的插件或脚本。 这些插件可以显着改进和促进 3ds max 的工作。在许多情况下&#xff0c;它们超出了该应用程序的基本工具&#xff0c;并引入了原始创建者未提供的…

nsdl连主机_日本购入 New 3DS 游戏主机开箱晒物

日本购入 New 3DS 游戏主机开箱晒物 2015-06-11 09:22:48 25点赞 23收藏 50评论 小编注&#xff1a;此篇文章来自即可瓜分10万金币&#xff0c;周边好礼达标就有&#xff0c;邀新任务奖励无上限&#xff0c;点击查看活动详情 长草掌机很久&#xff0c;正好在日本留学的同学要回…

ds 5 linux驱动下载,ARM DS-5 Development Studio 5.27.0 Win/Linux

所属分类&#xff1a;工程专家 最后更新&#xff1a;2018年04月14日 描述 ARM DS-5是全功能 C / C编程工具的集合&#xff0c;使得为SoC或可编程芯片编写程序变得更加容易。SoC或片上系统实际上是一台小型计算机。该程序针对特定类别的基于ARM的SoC提供。由于ARM处理器的低功耗…

【RGB3DS道路检测车智慧运维解决方案】助力城市道路运维数字化转型

随着数字城市建设的全面推进&#xff0c;交通运维数字化转型也逐步进入新的层次。道路表观病害检测作为养护运维的基础和关键环节&#xff0c;亟待投入更多关注。 针对国家对交通运维数字化转型的相关要求与及时有效评估路面健康情况的需求&#xff0c;博雅弘拓科技力推【RGB3…