蓝桥杯篇---实时时钟 DS1302


文章目录


前言

以上就是今天要讲的内容,本文简单介绍了实时时钟 DS1302的使用。


特点简介

DS1302 是一款由 Maxim Integrated 生产的实时时钟(RTC)芯片,具有以下特点:

1.低功耗

低功耗:适合电池供电的应用。

2.时钟/日历功能

时钟/日历功能:提供秒、分、时、日、月、星期和年的信息。

3.32字节的额外RAM

31字节的额外RAM:可用于存储用户数据

4.串行接口

串行接口:通过简单的三线接口(CE、I/O、SCLK)微控制器通信。

DS1302 引脚说明

1.VCC1

VCC1:主电源引脚。

2.VCC2

VCC2:备用电源 引脚(通常接电池)。

3.GND

GND:

4.CE

CE:芯片使能 引脚(高电平有效)。

5.I/O

I/O:数据输入/输出引脚。

6.SCLK

SCLK:串行时钟引脚。

DS1302 寄存器

DS1302 内部有多个寄存器,用于存储时间和控制信息。主要寄存器包括:

1.秒寄存器

秒寄存器(0x80):存储秒数。

2.分钟寄存器

分钟寄存器(0x82):存储分钟数。

3.小时寄存器

小时寄存器(0x84):存储小时数。

4.日寄存器

日寄存器(0x86):存储日期。

5.月寄存器

月寄存器(0x88):存储月份。

6.星期寄存器

星期寄存器(0x8A):存储星期几。

7.年寄存器

年寄存器(0x8C):存储年份。

8.控制寄存器

控制寄存器(0x8E):用于控制写保护等功能。

DS1302 与 IAP25F2K61S2 的连接

假设 IAP25F2K61S2 的 GPIO 引脚与 DS1302 连接如下:

1.CE连接

CE 连接到 P1.0

2.I/O连接

I/O 连接到 P1.1

3.SCLK连接

SCLK 连接到 P1.2

DS1302 示例代码

以下是一个简单的示例代码,展示如何使用 IAP25F2K61S2 与 DS1302 进行通信,读取和设置时间。

c 复制代码
#include <reg52.h>

sbit CE = P1^0;  // 芯片使能引脚
sbit IO = P1^1;  // 数据输入/输出引脚
sbit SCLK = P1^2; // 串行时钟引脚

// 向DS1302写入一个字节
void DS1302_WriteByte(unsigned char addr, unsigned char data) {
    unsigned char i;
    CE = 1;  // 使能DS1302

    // 发送地址字节
    for (i = 0; i < 8; i++) {
        IO = addr & 0x01;
        SCLK = 1;
        SCLK = 0;
        addr >>= 1;
    }

    // 发送数据字节
    for (i = 0; i < 8; i++) {
        IO = data & 0x01;
        SCLK = 1;
        SCLK = 0;
        data >>= 1;
    }

    CE = 0;  // 禁用DS1302
}

// 从DS1302读取一个字节
unsigned char DS1302_ReadByte(unsigned char addr) {
    unsigned char i, data = 0;
    CE = 1;  // 使能DS1302

    // 发送地址字节
    for (i = 0; i < 8; i++) {
        IO = addr & 0x01;
        SCLK = 1;
        SCLK = 0;
        addr >>= 1;
    }

    // 读取数据字节
    for (i = 0; i < 8; i++) {
        data >>= 1;
        if (IO) data |= 0x80;
        SCLK = 1;
        SCLK = 0;
    }

    CE = 0;  // 禁用DS1302
    return data;
}

// 设置DS1302的时间
void DS1302_SetTime(unsigned char year, unsigned char month, unsigned char day, 
                    unsigned char hour, unsigned char minute, unsigned char second) {
    DS1302_WriteByte(0x8E, 0x00);  // 关闭写保护
    DS1302_WriteByte(0x8C, year);  // 设置年
    DS1302_WriteByte(0x88, month); // 设置月
    DS1302_WriteByte(0x86, day);   // 设置日
    DS1302_WriteByte(0x84, hour);  // 设置小时
    DS1302_WriteByte(0x82, minute);// 设置分钟
    DS1302_WriteByte(0x80, second);// 设置秒
    DS1302_WriteByte(0x8E, 0x80);  // 打开写保护
}

// 读取DS1302的时间
void DS1302_GetTime(unsigned char *year, unsigned char *month, unsigned char *day, 
                    unsigned char *hour, unsigned char *minute, unsigned char *second) {
    *year = DS1302_ReadByte(0x8D);  // 读取年
    *month = DS1302_ReadByte(0x89); // 读取月
    *day = DS1302_ReadByte(0x87);   // 读取日
    *hour = DS1302_ReadByte(0x85);  // 读取小时
    *minute = DS1302_ReadByte(0x83);// 读取分钟
    *second = DS1302_ReadByte(0x81);// 读取秒
}

void main() {
    unsigned char year, month, day, hour, minute, second;

    // 设置时间
    DS1302_SetTime(0x23, 0x10, 0x15, 0x12, 0x30, 0x00);  // 2023年10月15日12:30:00

    // 读取时间
    DS1302_GetTime(&year, &month, &day, &hour, &minute, &second);

    while (1) {
        // 在这里可以添加代码来显示时间
    }
}

代码说明

  1. DS1302_WriteByte:向 DS1302 写入一个字节的数据。
  2. DS1302_ReadByte:从 DS1302 读取一个字节的数据。
  3. DS1302_SetTime:设置 DS1302 的时间。
  4. DS1302_GetTime:读取 DS1302 的时间。

注意事项

电源:确保 **DS1302 的主电源和备用电源连接正确,**以保证在断电时时钟继续运行。

写保护:在写入时间数据之前,需要关闭写保护写入 0x00 到控制寄存器 ),写入完成后重新打开写保护(写入 0x80 到控制寄存器)。

总结

通过上述代码,您可以轻松地在 IAP25F2K61S2 上使用 DS1302 实时时钟芯片。您可以根据需要扩展代码,例如添加时间显示功能或使用 DS1302 的额外 RAM 存储数据。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了实时时钟 DS1302的使用。

相关推荐
某林2128 小时前
ROS2与STM32通信详解
stm32·单片机·嵌入式硬件
EVERSPIN10 小时前
MCU微控制器,N32H47x高性能MCU机器人关节控制方案
单片机·嵌入式硬件·机器人·mcu微控制器
0南城逆流010 小时前
【STM32】知识点介绍三:哈希算法详解
stm32·嵌入式硬件·哈希算法
云山工作室10 小时前
基于STM32单片机的正激式开关电源设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·课程设计·毕设
芯希望11 小时前
芯伯乐700mA线性稳压器XBLW L78M05H/L78M12H:稳定可靠,简化电源设计
单片机·嵌入式硬件
程序猿_极客11 小时前
【2025】16届蓝桥杯 Java 组全题详解(省赛真题 + 思路 + 代码)
java·开发语言·职场和发展·蓝桥杯
lingzhilab11 小时前
零知IDE——STM32F407VET6驱动SHT40温湿度传感器与ST7789实现智能环境监测系统
stm32·单片机·嵌入式硬件
贝塔实验室13 小时前
Altium Designer 6.3 PCB LAYOUT教程(四)
驱动开发·嵌入式硬件·硬件架构·硬件工程·信息与通信·基带工程·pcb工艺
星辰pid14 小时前
stm32的gpio模式到底该怎么选择?(及iic,spi,定时器原理介绍)
stm32·单片机·嵌入式硬件
brave and determined15 小时前
可编程逻辑器件学习(day3):FPGA设计方法、开发流程与基于FPGA的SOC设计详解
嵌入式硬件·fpga开发·soc·仿真·电路·时序·可编程逻辑器件