DS1302实时时钟

这篇具有很好参考价值的文章主要介绍了DS1302实时时钟。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础知识

实时时钟就是一个可以用来计时的芯片,Y3是一个晶振,提供一个时钟基准给DS1302,让DS1302每一秒走时一次。有的实时时钟不需要外接晶振,直接在内部集成了,但蓝桥杯板载的有。

使用的是3线SPI协议,与前面的单总线和IIC协议不一样

DS1302实时时钟

电路原理

DS1302实时时钟

VCC1:备用电源,可以在板子断电是依然工作,但蓝桥杯板上没有电池,所以就不用管了。蓝桥杯 板重新上电时,必须重新设置时间,让它重新开始走时。

SCLK:串行时钟管脚

I/O:双向通信管脚

RST:控制通讯管脚,低电平时,51板与DS1302不可以进行通讯

DS1302实时时钟

芯片特性

DS1302实时时钟
  1. 实时时钟:计时秒、时、分、日期、月份、星期、年、闰月,可计时到2100年

  1. 21个字节的RAM

  1. 串行IO空

  1. 工作电压2.0V~5.5V

  1. 在2.0V,电流小于300nA(低功耗)

  1. 单字节或多字节(突发模式)数据传输,可用于读写时钟和RAM,突发模式可解决时间错误问题,蓝桥杯比赛不考,比赛只用单字节传输就可以了。

  1. 8脚直插封装或8脚贴片封装

  1. 三线通讯接口(三线SPI协议)

  1. TTL兼容

  1. 工作温度:-40~+85摄氏度

  1. 和DS1202兼容

  1. UL认证

寄存器与指令

DS1302实时时钟
DS1302实时时钟

SPI协议

DS1302实时时钟

写操作:51向DS1302发送数据,在时钟信号SCLK上升沿时,IO的数据被发送给DS1302,上升沿 前,数据要保持稳定。

读操作:51读取DS1302数据,在时钟信号SCLK下降沿时,DS1302发来的数据可以被52单片机IO空 读取,发送下降沿后,51单片机进行读取。

SIP协议也是会提供底层驱动代码的,以下时比赛中会提供的代码

/*
  程序说明: DS1302驱动程序
  软件环境: Keil uVision 4.10 
  硬件环境: CT107单片机综合实训平台 8051,12MHz
  日    期: 2011-8-9
*/

#include <reg52.h>
#include <intrins.h>

sbit SCK=P1^7;        
sbit SDA=P2^3;        
sbit RST = P1^3;   // DS1302复位                                                

void Write_Ds1302(unsigned  char temp) 
{
    unsigned char i;
    for (i=0;i<8;i++)         
    { 
        SCK=0;
        SDA=temp&0x01;
        temp>>=1; 
        SCK=1;
    }
}   

void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{
     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;i<8;i++)     
     {        
        SCK=0;
        temp>>=1;    
         if(SDA)
         temp|=0x80;    
         SCK=1;
    } 
     RST=0;    _nop_();
     SCK=0;    _nop_();
    SCK=1;    _nop_();
    SDA=0;    _nop_();
    SDA=1;    _nop_();
    return (temp);            
}
#ifndef __DS1302_H
#define __DS1302_H

void Write_Ds1302(unsigned char temp);
void Write_Ds1302_Byte( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302_Byte( unsigned char address );
#endif

设置时间与读取时间

DS1302的数据是采取BCD码来进行编码的,用16进制来表示十进制,例如0x25表示十进制25

设置时间流程:

  1. 关闭写保护

  1. 写入时钟数据(寄存地址为偶数,并且要记得把十进制转换成BCD

  1. 打开写保护

读取时间流程

直接调用读取DS1302函数(寄存器地址为奇数,并且要记得把BCD转换成十进制文章来源地址https://www.toymoban.com/news/detail-445585.html

#define DecToBCD(dec) (dec/10*16)+(dec%10)//十进制转BCD码
#define BCDToDec(bcd) (bcd/16*10)+(bcd%16)//BCD码转十进制
void vClock_Set(u8 hour,u8 minute,u8 second)
{
    Write_Ds1302_Byte(0x8e,0x00);    //关闭写保护
    Write_Ds1302_Byte(0x80,DecToBCD(second));
    Write_Ds1302_Byte(0x82,DecToBCD(minute));
    Write_Ds1302_Byte(0x84,DecToBCD(hour));
    Write_Ds1302_Byte(0x8e,0x80);    //打开写保护
}
//将DS1302的时间初值设置为23:59:55,然后读取DS1302的时间,并显示在数码管上

#include "system.h"
HexToBin led_ctrl,uln_ctrl;

/*
  * @brief  系统初始化函数:关闭继电器、蜂鸣器
  * @param  None
  * @retval None
  * @author dianshe.taobao.com
  */
void vSystem_Init(void)
{
    vDevice_Ctrl(0xa0,0);                 /* 关闭蜂鸣器、继电器*/
    led_ctrl.hex=0xff;
    vDevice_Ctrl(0x80,led_ctrl.hex);     /* 关闭LED*/
}

//DS1302时间读取
u8 hour,minute,second;
void vDS1302_Process()
{
    second = BCDToDec(Read_Ds1302_Byte(0x81));
    minute = BCDToDec(Read_Ds1302_Byte(0x83));
    hour = BCDToDec(Read_Ds1302_Byte(0x85));
}


//数码管操作函数
void vSMG_Process()
{
    smg_buf[0]=smg_code[hour/10];            //旋转电位器的电压值
    smg_buf[1]=smg_code[hour%10];    
    smg_buf[2]=0x00;
    smg_buf[3]=smg_code[minute/10];
    smg_buf[4]=smg_code[minute%10];
    smg_buf[5]=0x00;        
    smg_buf[6]=smg_code[second/10];
    smg_buf[7]=smg_code[second%10];
}

void main(void)
{
    vSystem_Init();
    vClock_Set(23,59,55);
    vTimer2_Init();
    while(1)
    {
        vSMG_Process();
        vDS1302_Process();
    }
}


//中断服务程序
void vTimer2_ISR() interrupt 12         //中断入口
{
    vSMG_Display();
}

到了这里,关于DS1302实时时钟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【mcuclub】时钟模块DS1302

      编号 名称 功能 1 VCC2 双供电配置中的主电源供应引脚。DS1302工作于 VCC1和VCC2中较大者.当VCC2比VCC1高0.2V 时,VCC2 给 DS1302供电。当VCC1比VCC2高时, VCC1给DS1302供电 2 X1 32.768kHz晶振引脚 3 X2 4 GND 电源地 5 CE 使能引脚。输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第

    2024年04月09日
    浏览(42)
  • 『51单片机』 DS1302时钟

    🚩 WRITE IN FRONT 🚩     🔎 介绍:\\\"謓泽\\\"正在路上朝着\\\"攻城狮\\\"方向\\\"前进四\\\" 🔎 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量7w+、全网访问量100w+🏅 🆔 本文章内容由 謓泽

    2024年02月08日
    浏览(53)
  • 51单片机——DS1302时钟

    目录 1.前言 1.1 实验现象 2. DS1302的介绍 2.1 DS1302的引脚定义以及应用电路 2.2 DS1302内部结构 2.21  DS1302内部特殊寄存器 2.22 时序 2.3 BCD码 3.源码 3.1 main.c 3.2 DS1302.c 3.3 DS1302.h 3.4 LCD1602.c 3.5 Delay.c 3.6 Delay.h 之前我们已经使用了定时器做过了简易的时钟了,为什么还要用DS1302制作时钟

    2024年01月16日
    浏览(50)
  • stm32-DS1302时钟模块驱动

    DS1302是时钟芯片 DS1302的寄存器地址定义如下:   单字节读写时序如下图,均为上升沿触发:  由于DS1302时钟芯片不是常用的SPI协议,与SPI协议很像,所以需要初始化普通GPIO口手工实现该协议通信。 设置分别连接DS1302的CE、SCLK、Data口的GPIO,PB8PB9PB10: 打开gpio.h文件,定义结

    2024年02月02日
    浏览(40)
  • 51单片机——DS1302可调时钟

    目录 一、功能介绍 二、主要模块介绍 2.1 DS1302模块 2.1.1 DS1302芯片介绍 2.1.2  DS1302的使用 三、程序汇总 3.1测试文件test.c 3.2 LCD1602模块程序 3.2.1 LCD1602.h 3.2.2 LCD1602.c 3.3 DS1302模块程序 3.3.1 DS1302.h 3.3.2 DS1302.c 3.4 独立按键模块程序 3.4.1 Independentkey.h 3.4.2 Independentkey.c 3.5 T0定时器模

    2024年02月02日
    浏览(71)
  • 时钟芯片DS1302时序分析、读写代码解析

    引脚名称 功能 X1、X2 外接32.768kHz 晶振,用于内部计时 SCLK 和主控通信的时钟线 I/O 数据输入输出引脚 CE 使能引脚 VCC1 接电池供电,保证主板掉电时间能继续走 VCC2 主板的电源供电 (1)DS1302芯片的通信接口是SPI协议接口,只有一根数据线,所以是半双工通信; (2)SPI协议可参考博

    2024年02月06日
    浏览(54)
  • 【51单片机系列】DS1302时钟模块

    本文是关于DS1302时钟芯片的相关介绍。 DS1302是DALLAS公司推出的涓流充电时钟芯片,内部含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。该芯片是3线SPI接口。 实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天

    2024年02月03日
    浏览(70)
  • 【Arduino30】DS1302时钟芯片模拟值实验

    DS1302芯片:1片 32.768kHz晶振:1个 面包板:1个 杜邦线:若干 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,并且具有闰年补偿等多种功能。 DS1302常用于以下场景: 电子时钟和钟表: DS1302可以通过

    2024年02月09日
    浏览(52)
  • 使用51单片机和DS1302时钟芯片做一个简易的电子时钟

    今天给大家推荐一个51单片机小实验,带你使用51单片机做一款简易的电子时钟,其中计时模块采用DS1302硬件模块,显示采用LCD显示屏,具体怎么实现开来一起看看吧! DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟和31字节静态 RAM,通过简单的串行接口与

    2024年02月11日
    浏览(49)
  • FPGA通过读写突发对DS1302时钟的配置&驱动

    环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE6F17C8 4、实时时钟模块:DS1302 要求: 使用 EP4CE6F17C8开发板驱动 实时时钟模块(DS1302 ),并将配置完后的时钟传回到上位机。我们上电后直接对实时时钟进行配置,在按键按下后,向上位机发送我们的时钟数据。 这里我们会先对

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包