毕业设计之时钟模块设计DS1302
该模块使用的芯片是: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相关推荐
- FPGA:时钟模块设计-RTC实时时钟芯片DS1302
前言 首先我要明确,这个RTC是在干什么,通过查阅DS1302芯片手册,我知道了,要想使用这块芯片,我需要用FPGA生成3个信号,然后用DS1302去实现具体功能,需要实现什么功能我先不用关心,现在需 ...
- verilog时钟分频设计
1.偶分频模块设计 偶分频意思是时钟模块设计最为简单.首先得到分频系数M和计数器值N. M = 时钟输入频率 / 时钟输出频率 N = M / 2 如输入时钟为50M,输出时钟为25M,则M=2,N= ...
- java时钟课程设计_JAVA课程设计报告电子钟
JAVA课程设计报告电子钟 课 程 设 计 报 告( 2012-- 2013 年度第 2 学期)日历记事本专业 计算机科学与技术学生姓名班级 学号指导教师完成日期目 录目 录 .21 概 述 .41. ...
- 基于51单片机、DS1302时钟模块的电子闹钟设计
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...
- DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别
[DIY]DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别 水晶城堡在设计之初,采用全直插设计理念,保证玩家在自行DIY的过程中,不会因为焊接贴片元器件而烦恼.所以水晶 ...
- 「雕爷学编程」Arduino动手做(29)——DS1302时钟模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- Verilog时钟分频模块设计
目录 1 偶分频模块 2 奇分频模块 3 任意占空比的任意分频 转载自https://blog.csdn.net/moon9999/article/details/75020355/ 1 偶分频模块 ...
- java毕业设计——基于java+JSP+sqlserver的Smart系统-题库及试卷管理模块设计与实现(毕业论文+程序源码)——学生信息管理系统模板2
基于java+JSP+sqlserver的Smart系统-题库及试卷管理模块设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+sqlserver的Smart系统-题库及试卷 ...
- 树莓派基础实验32:DS1302实时时钟模块实验
一.介绍 现在有很多流行的串行时钟芯片,如DS1302,DS1307,PCF8485等,由于简单的接口,低成本和易用性,他们被广泛应用于电话.传真.便携式仪器等产品领域.在本实验中,我们将使用DS ...
- 蓝桥杯单片机之DS1302时钟模块的使用
蓝桥杯单片机之DS1302时钟模块的使用 DS1302简介 SPI串口简介 BCD码 阅读手册获取寄存器信息 日历时钟寄存器 控制字 将手册中的数据进行分析可得 完整代码示例: 总结 DS1302简介 ...
最新文章
- Microsoft Azure部署MYSQL-MMM(3)配置MYSQL-MMM
- tcp/ip详解--分层
- Google Map API v2 步步为营 (二)----- Location
- JVM从入门到精通(三):热加载的实现原理,Java内存模型,缓存行,指令重排,合并写技术等
- js获取select标签选中的值
- EF获取多个数据集以及MySQL分页数据查询优化
- php Access-Control-Allow-Origin 解决跨域问题
- 使用ISAPI_Rewrite3规范化目录语法
- QQ浏览器、搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie、Session失效问题
- IDEA+MAVEN+testNG(reportNG)
- 软件著作权算法软件设计说明书_软件详细设计说明书例子.pdf
- 【UG NX MCD 机电一体化概念设计】UG NX MCD+PLCSIM Advanced联合仿真实例(二 )仿真序列
- windows/ubuntu系统下安装teamview教程
- Beta冲刺第二周王者荣耀交流协会第三次会议
- 史上最全的WSL安装教程
- excel日期转换为周数_VBA将日期转换为周数
- 图形处理(八)点云重建(上)点云滤波、尖锐特征边增采样、移除离群点
- vmware服务器文件备份,三种VMware数据备份和恢复方法
- 基于社交图谱的多层关系挖掘推荐
- vxe-table 如何用回车键替换 Tab 键功能,回车切换到右侧单元格,回车切换下一个单元格
热门文章
- 算法之线性时间选择(最坏情况下)
- 重建大师5.0成为首款支持国产麒麟操作系统的自动实景三维建模软件
- JSP程序设计 第2版 pdf
- bt5 mysql字典,backtrack5下载
- 2016版excel_15个经典Excel技巧,易学易用,收藏备用!
- c语言蛮力法实现背包问题
- cocos2d-x 2.2 CocoStudio动画和界面编辑器按钮控制以及场景编辑器使用
- 海美迪盒子android升级包,海美迪H6官方固件ROM升级包下载_刷机教程
- HTML5七夕情人节表白网页制作【生日快乐粒子烟花】HTML+CSS+JavaScript 生日祝福网页代码
- html+制作动态主题,动态HTML的制作