蓝桥杯篇---实时时钟 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的使用。

相关推荐
CS Beginner8 小时前
【单片机】如何理解GPIO的配置寄存器?
单片机·嵌入式硬件
平凡灵感码头9 小时前
第一次做蓝牙产品,从零开发(5)蓝牙音频项目中功放芯片
单片机·嵌入式硬件·音视频
离凌寒12 小时前
一、在freertos上使用esp01s模块并配置使用sta模式进行数据通信传输测试。
单片机·freertos·esp01s
CoderYanger16 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
星期天216 小时前
1.1江科大之LED闪烁&LED流水灯&蜂鸣器
stm32·单片机·嵌入式硬件
梓德原16 小时前
【经验】MSP430编译器使用经验-IAR编辑框分框
单片机·嵌入式硬件·物联网
电子工程师-C5117 小时前
基于51单片机的自动乒乓球发球机
单片机·嵌入式硬件·51单片机
玩转单片机与嵌入式17 小时前
在STM32F103单片机上跑通AI模型:为什么选正弦波作为Hello World?
人工智能·stm32·单片机
老马啸西风17 小时前
成熟企业级技术平台-10-跳板机 / 堡垒机(Bastion Host)详解
人工智能·深度学习·算法·职场和发展
星期天218 小时前
1.2STM32江科大GPIO的输入(电路硬件连接)
单片机·嵌入式硬件·stm32江科大·gpio的输入·硬件电路的链接