DS1302时钟模块使用讲解附带完整程序

您所在的位置:网站首页 实时时钟电路的作用 DS1302时钟模块使用讲解附带完整程序

DS1302时钟模块使用讲解附带完整程序

2023-09-06 07:24| 来源: 网络整理| 查看: 265

AT24C02时钟模块使用附带完整程序 DS1302引脚说明DS1302相关寄存器时序说明代码讲解DS1302初始化读取当前时间参考程序

DS1302引脚说明

引脚说明Vcc2主电源Vcc1后备电源(断电后保证时钟正常运行)x1,x2外接32.768KHZ晶振GND接地RST复位引脚(低电平有效)I/O数据输入/输出引脚SCLK串行时钟输入引脚

参考电路: 在这里插入图片描述

如果是直接买的时钟模块的话,会直接引出VCC,GND,CLK,DAT,RST这四个引脚

DS1302相关寄存器

在这里插入图片描述 DS1302内部含有8位控制寄存器用于存放DS1302控制命令字,例:如果为0x81就是读秒寄存器,如果为0x80就是对秒寄存写入数据,初始化时需要令wp为0,才可以写入初始时间。

时序说明

在这里插入图片描述

1.DS1302是通过串行总线跟单片机通信的,当进行一次读写操作是最少得读写两个字节,第一个字节就是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还对CLOK寄存器操作。第二个字节就是要读写的数据了。 2.单字节读写:只有在SCLK为低电平时才能将RST置为高电平。所以在进行操作之前先将SCLK置低电平,然后将RST置为高电平,接着开始在IO上面放入要传输的电平信号,然后跳变SCLK。数据在SCLK上升沿时,DS1302读写数据,在SCLK下降沿时,DS1302放在数据到IO上

代码讲解

完整程序已附带在最后。

DS1302初始化 //执行写操作的地址 秒 分 时 日 月 周 年 u8 code write_addr[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //2020年10月16日 周5 23时59分55秒; u8 timer[]={0x55,0x59,0x23,0x16,0x10,0x05,0x20}; void ds1302_init() { u8 i; Write_Ds1302_Byte(0x8e,0x00);//0x8e是写的地址,0x00是写入的数据 for(i=0;i0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; void ds1302_read() { u8 i; for(i=0;i unsigned char i; for (i=0;i RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); Write_Ds1302(address); Write_Ds1302(dat); RST=0; } unsigned char Read_Ds1302_Byte ( unsigned char address ) { unsigned char i,temp=0x00; RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); Write_Ds1302(address); for (i=0;i0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; u8 code write_addr[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //2020年10月16日 周5 23时59分55秒; u8 timer[]={0x55,0x59,0x23,0x16,0x10,0x05,0x20}; u8 smg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main() { ds1302_init(); while(1) { ds1302_read(); diplay(); } } void delay(u16 n) { u16 i,j; for(i=n;i>0;i--) for(j=110;j>0;j--); } void smg_display(u8 n, u8 num) { //在第n个数码管上显示num } void ds1302_init() { u8 i; Write_Ds1302_Byte(0x8e,0x00);//0x8eÊÇдµÄµØÖ·,0x00ÊÇдµÄÊý¾Ý for(i=0;i u8 i; for(i=0;i smg_display(1, timer[2]/16); delay(10); smg_display(2, timer[2]%16); delay(10); smg_display(3, timer[1]/16); delay(10); smg_display(4, timer[1]%16); delay(10); smg_display(5, timer[6]/16); delay(10); smg_display(6, timer[6]%16); delay(10); smg_display(7, timer[0]/16); delay(10); smg_display(8, timer[0]%16); delay(10); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3