2022年特别讲解时钟芯片DS实用 .pdf
Lzh 电子论坛http:/lzhbbs.top-特别讲解时钟芯片 DS1302现在讲解如何操作DS1302 ,有配套的视频教程请到lzh 电子论坛 视频教程专区查看, 所讲的程序均是用模块化编程,如果不懂模块化编程的童鞋可以在视频专区里查看相应的教程。有问题请在论坛51 版块提问或者视频教程下跟帖提问。下面开始介绍时钟芯片:连接单片机的就有引脚SCLK,IO,CE(RST). 所以我们只需要对三个引脚来控制。硬件的连接这里不讲,我们以程序为主,硬件的连接可以看仿真图里的连接方式!现在与 DS1302的通信是采用 SPI 通信方式。看下面的时序图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - Lzh 电子论坛http:/lzhbbs.top-上面的时序是从 DS1302的一个寄存器里读出一个数据,大致就是先写地址再读数据。 现在开始写出读写寄存器的函数。就根据上面的时序来完成。在时钟上升沿就写入数据,在下降沿读出数据。而且是先写低位,先读低位,这点很重要。现在对照着程序来理解:一些引脚的定义和宏定义看ds1302.h 文件/*写一个字节 */void DS1302WriteByte(uint8Dat)uint8 i;for(i = 0;i 1;/数据右移一位进行下一位的检测/*读一个字节 */uint8 DS1302ReadByte()uint8 i,temp = 0;for(i = 0;i 1;/让最高位为0,右移是因为从低位开始if(DS1302ReadDSIO)/如果数据引脚是高电平temp |= 0 x80;/将最高位置1return temp;/返回读出的值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - Lzh 电子论坛http:/lzhbbs.top- 转为十进制 */uint8 DS1302ReadRegister(uint8 Addr)/在 DS1302 里读出的数据是BCD 码所以要转换uint8 tmp = 0;uint8 tmp1 = 0,tmp2 = 0;DS1302SetRST();/根据时序来要拉高这个脚DS1302WriteByte(Addr);/写地址,在ds1302.h 里面都定义了的tmp = DS1302ReadByte();/读出数据DS1302ClearRST();/拉低tmp1 = tmp & 0 x0f;/开始转换tmp2 = tmp 4;tmp = tmp2 * 10 + tmp1;return tmp;/*写寄存器 */void DS1302WriteRegister(uint8 Addr,uint8 Dat)/写寄存器就是先写地址后写数据DS1302SetRST();DS1302WriteByte(Addr);DS1302WriteByte(Dat);DS1302ClearRST();上面提到了读写地址,那到底是什么呢,看这个表:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - Lzh 电子论坛http:/lzhbbs.top-更加上面的表格整理出下面的宏定义:#define R_Second0 x81#define W_Second 0 x80#define R_Minute 0 x83#define W_Minute 0 x82#define R_Hour 0 x85#define W_Hour 0 x84#define R_Day 0 x87#define W_Day 0 x86#define R_Month 0 x89#define W_Month 0 x88#define R_Week 0 x8B#define W_Week 0 x8A#define R_Year 0 x8D#define W_Year 0 x8C#define R_Control 0 x8F#define W_Control 0 x8E我们现在写一个初始化时钟芯片的函数让大家理解:void DS1302Init()DS1302ClearRST();DS1302ClearSCLK();/两个引脚初始化状态名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - Lzh 电子论坛http:/lzhbbs.top-DS1302WriteRegister(W_Control,0 x00);/解除保护DS1302WriteRegister(W_Year,0 x13);DS1302WriteRegister(W_Week,0 x07);DS1302WriteRegister(W_Month,0 x02);DS1302WriteRegister(W_Day,0 x3);DS1302WriteRegister(W_Hour,0 x08);DS1302WriteRegister(W_Minute,0 x44);DS1302WriteRegister(W_Second,0 x23);DS1302WriteRegister(W_Control,0 x80);/启动保护初始化的时间是2013,2,3;星期 7, , ,时间是: 8:44:23读取时间函数如下:读取时分秒void ReadTime()Hour =DS1302ReadRegister(R_Hour);Minuter = DS1302ReadRegister(R_Minute);Second= DS1302ReadRegister(R_Second);完整的程序请到论坛的视频专区下载。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -