该模块使用的芯片是:DS1302芯片,DS1302芯片是一个自动计时的时钟模块,有6个时钟寄存器,秒,分,时,日,月,年(其实不止,其它的暂且不管了)
使用不同的命令字来控制相应的寄存器:
0x80 ~ 0x8c ,分别控制秒到年寄存器的读和写

上表中,如果想读当前是多少秒,直接将0x81给read_DS1302()函数作为参数,该函数返回值对应的就是当前的秒
unsigned int current_second = read_DS1302(0x81);current_second 就是返回的秒

DS1302和单片机通过I/0口进行连接:
具体实现两种通信:
单片机通过发送指令,让时钟寄存器获得初始化时间
单片机从DS1302芯片获取时钟信息

DS1302封装图:

下面介绍从DS1302读取时钟的过程:
首先请看时序图:

/*dat是需要读入命令字,函数返回该命令字要求返回的寄存器的数据
*/
u8 Read_DS1302(u8 dat) //
{u8 i,temp,dat1,dat2;DS1302_CE   = 0;DS1302_SCLK = 0;DS1302_CE   = 1;for(i = 8;i>0;i--)   //用8个上升沿把dat中的8位bit送到IO种选择读取的地址{DS1302_SCLK = 0; temp  =  dat;DS1302_IO   =  (bit)(temp&0x01);// temp的最右边一位送到IO上dat >>=1;  //dat右移一位 DS1302_SCLK   = 1; //上升沿触发}for(i =8 ;i>0 ; i--)       //采用先接收IO口数据,再用下降沿触发,循环结束后ACC获得读取数据{ACC_7   =   DS1302_IO;    //从最高位接收DS1302_SCLK  =  1;ACC >>= 1; //ACC为累加器DS1302_SCLK  =  0;}DS1302_SCLK  = 1;DS1302_CE    =  0;dat1 = ACC;dat2 = dat1 /16;dat1 = dat1 %16;dat1 = dat1+dat2*10;return (dat1);
}

往DS1302写数据:
写时序如图:(RST = CE)

/*
addr写入命令字,dat根据写入的命令字把dat数据放入相应的寄存器
*/
void Write_DS1302(u8 addr,u8 dat)
{u8 i,temp;DS1302_CE   = 0;DS1302_SCLK = 0;DS1302_CE   = 1;for(i=8 ; i>0 ; i--){DS1302_SCLK = 0;temp = addr;DS1302_IO = (bit)(temp&0x01);addr >>= 1;DS1302_SCLK = 1;}for(i=8;i>0;i--){DS1302_SCLK = 0;temp  = dat;DS1302_IO = (bit)(temp&0x01);dat >>= 1;DS1302_SCLK = 1;}DS1302_SCLK = 1;    DS1302_CE   = 0;
}

下面是使用DS1302已经封装完成的头文件:
DS1302.h

#ifndef    _DS1302_H_
#define    _DS1302_H_
#include   <reg52.h>sbit DS1302_SCLK = P1^4;
sbit DS1302_IO   = P1^5;
sbit DS1302_CE   = P1^6;#define WRITE_SECOND  0x80    、
#define WRITE_MINUTE  0X82
#define WRITE_HOUR    0X84
#define WRITE_DATE    0X86
#define WRITE_MONTH   0X88
#define WRITE_WEEK    0X8A
#define WRITE_YEAR    0X8C       #define  READ_SECOND  0X81      //读秒
#define  READ_MINUTE  0X83       //读分
#define  READ_HOUR    0X85       //读时
#define  READ_DATE    0X87       //读日
#define  READ_MONTH   0X89       // 读月
#define  READ_WEEK    0X8B       // 读星期
#define  READ_YEAR    0x8D       //  读年#define WRITE_PROTECT           0x8Esbit     ACC_7 = ACC^7;u8 Read_DS1302(u8 dat);
void Write_DS1302(u8 addr,u8 dat);
u8 data time[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};//秒,分,时,日,月、星期、年u8 Read_DS1302(u8 dat)
{u8 i,temp,dat1,dat2;DS1302_CE   = 0;DS1302_SCLK = 0;DS1302_CE   = 1;for(i = 8;i>0;i--)   //写入需要读入数据对应的地址    采用先接受IO口数据,再用{DS1302_SCLK = 0;temp  =  dat;DS1302_IO   =  (bit)(temp&0x01);dat >>=1;DS1302_SCLK   = 1;}for(i =8 ;i>0 ; i--)      //采用先接收IO口数据,再用下降沿触发{ACC_7   =   DS1302_IO;  DS1302_SCLK  =  1;ACC >>= 1;DS1302_SCLK  =  0;}DS1302_SCLK  = 1;DS1302_CE    =  0;dat1 = ACC;dat2 = dat1 /16;dat1 = dat1 %16;dat1 = dat1+dat2*10;return (dat1);
}void Write_DS1302(u8 addr,u8 dat)
{u8 i,temp;DS1302_CE   = 0;DS1302_SCLK = 0;DS1302_CE   = 1;for(i=8 ; i>0 ; i--) //这个循环用于向DS1302写入addr命令字{DS1302_SCLK = 0;temp = addr;DS1302_IO = (bit)(temp&0x01);addr >>= 1;DS1302_SCLK = 1;}for(i=8;i>0;i--)//这个循环用于向DS1302对应的命令字中写dat{DS1302_SCLK = 0;temp  = dat;DS1302_IO = (bit)(temp&0x01);dat >>= 1;DS1302_SCLK = 1;}DS1302_SCLK = 1; DS1302_CE   = 0;
}void DS1302_init()
//给DS1302初始化,其中0x46是当时做闭塞是当时做毕设的时间,DS1302内部接收的是16进制,所     //以直接输入16进制就好了,   { Write_DS1302(WRITE_MINUTE,0x46);Write_DS1302(WRITE_HOUR,0x18);Write_DS1302(WRITE_DATE,0x13);Write_DS1302(WRITE_MONTH,4);Write_DS1302(WRITE_YEAR,0x19);Write_DS1302(WRITE_WEEK,6);Write_DS1302(0x80,0);           }
void Read_time()
{time[0]  =  Read_DS1302(0x81);time[1]  =  Read_DS1302(0x83);time[2]   =  Read_DS1302(0x85);time[3]   =  Read_DS1302(0x87);time[4]   =  Read_DS1302(0x89);time[5]   =  Read_DS1302(0x8b);time[6]   =  Read_DS1302(0x8d);}
#endif

基于单片机的智能窗帘控制系统的设计与实现
单片机各模块设计脑图
时钟模块设计
时钟模块设计详细设计
光照感应模块
光照感应模块详细设计

毕业设计之时钟模块设计DS1302相关推荐

  1. FPGA:时钟模块设计-RTC实时时钟芯片DS1302

    前言 首先我要明确,这个RTC是在干什么,通过查阅DS1302芯片手册,我知道了,要想使用这块芯片,我需要用FPGA生成3个信号,然后用DS1302去实现具体功能,需要实现什么功能我先不用关心,现在需 ...

  2. verilog时钟分频设计

    1.偶分频模块设计 偶分频意思是时钟模块设计最为简单.首先得到分频系数M和计数器值N. M = 时钟输入频率 / 时钟输出频率 N = M / 2 如输入时钟为50M,输出时钟为25M,则M=2,N= ...

  3. java时钟课程设计_JAVA课程设计报告电子钟

    JAVA课程设计报告电子钟 课 程 设 计 报 告( 2012-- 2013 年度第 2 学期)日历记事本专业 计算机科学与技术学生姓名班级 学号指导教师完成日期目 录目 录 .21 概 述 .41. ...

  4. 基于51单片机、DS1302时钟模块的电子闹钟设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...

  5. DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别

    [DIY]DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别 水晶城堡在设计之初,采用全直插设计理念,保证玩家在自行DIY的过程中,不会因为焊接贴片元器件而烦恼.所以水晶 ...

  6. 「雕爷学编程」Arduino动手做(29)——DS1302时钟模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  7. Verilog时钟分频模块设计

    目录 1 偶分频模块 2 奇分频模块 3 任意占空比的任意分频 转载自https://blog.csdn.net/moon9999/article/details/75020355/ 1 偶分频模块 ...

  8. java毕业设计——基于java+JSP+sqlserver的Smart系统-题库及试卷管理模块设计与实现(毕业论文+程序源码)——学生信息管理系统模板2

    基于java+JSP+sqlserver的Smart系统-题库及试卷管理模块设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+sqlserver的Smart系统-题库及试卷 ...

  9. 树莓派基础实验32:DS1302实时时钟模块实验

    一.介绍   现在有很多流行的串行时钟芯片,如DS1302,DS1307,PCF8485等,由于简单的接口,低成本和易用性,他们被广泛应用于电话.传真.便携式仪器等产品领域.在本实验中,我们将使用DS ...

  10. 蓝桥杯单片机之DS1302时钟模块的使用

    蓝桥杯单片机之DS1302时钟模块的使用 DS1302简介 SPI串口简介 BCD码 阅读手册获取寄存器信息 日历时钟寄存器 控制字 将手册中的数据进行分析可得 完整代码示例: 总结 DS1302简介 ...

最新文章

  1. Microsoft Azure部署MYSQL-MMM(3)配置MYSQL-MMM
  2. tcp/ip详解--分层
  3. Google Map API v2 步步为营 (二)----- Location
  4. JVM从入门到精通(三):热加载的实现原理,Java内存模型,缓存行,指令重排,合并写技术等
  5. js获取select标签选中的值
  6. EF获取多个数据集以及MySQL分页数据查询优化
  7. php Access-Control-Allow-Origin 解决跨域问题
  8. 使用ISAPI_Rewrite3规范化目录语法
  9. QQ浏览器、搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie、Session失效问题
  10. IDEA+MAVEN+testNG(reportNG)
  11. 软件著作权算法软件设计说明书_软件详细设计说明书例子.pdf
  12. 【UG NX MCD 机电一体化概念设计】UG NX MCD+PLCSIM Advanced联合仿真实例(二 )仿真序列
  13. windows/ubuntu系统下安装teamview教程
  14. Beta冲刺第二周王者荣耀交流协会第三次会议
  15. 史上最全的WSL安装教程
  16. excel日期转换为周数_VBA将日期转换为周数
  17. 图形处理(八)点云重建(上)点云滤波、尖锐特征边增采样、移除离群点
  18. vmware服务器文件备份,三种VMware数据备份和恢复方法
  19. 基于社交图谱的多层关系挖掘推荐
  20. vxe-table 如何用回车键替换 Tab 键功能,回车切换到右侧单元格,回车切换下一个单元格

热门文章

  1. 算法之线性时间选择(最坏情况下)
  2. 重建大师5.0成为首款支持国产麒麟操作系统的自动实景三维建模软件
  3. JSP程序设计 第2版 pdf
  4. bt5 mysql字典,backtrack5下载
  5. 2016版excel_15个经典Excel技巧,易学易用,收藏备用!
  6. c语言蛮力法实现背包问题
  7. cocos2d-x 2.2 CocoStudio动画和界面编辑器按钮控制以及场景编辑器使用
  8. 海美迪盒子android升级包,海美迪H6官方固件ROM升级包下载_刷机教程
  9. HTML5七夕情人节表白网页制作【生日快乐粒子烟花】HTML+CSS+JavaScript 生日祝福网页代码
  10. html+制作动态主题,动态HTML的制作