使用方法
使用三条线与单片机连接:时钟线(SCK)、数据线(SDA)和复位线(RST)
通过RST引脚使能后,移位寄存器单元会在SCLK同步脉冲信号的控制下从I/O上串行接收8位指令字节,然后将8位指令字节进行串并转换并送至ROM指令译码单元。由ROM指令译码单元对8位指令字节进行译码,以决定内部寄存器的地址以及读写状态。然后在接下来的SCLK同步脉冲信号的控制下将8位数据写进或者读出相应的寄存器。数据传送也可以采用多字节方式。
写操作:向 DS1302 的寄存器写入时间数据
读操作:从 DS1302 的寄存器读取时间数据
引脚说明
VCC1:备用电源引脚,用于在主电源失效时维持芯片运行。
VCC2:主电源引脚。
X1、X2:晶振输入引脚,通常连接外部32.768kHz晶振。
RST:复位/使能引脚,用于控制芯片的复位和使能状态。
CE:片选引脚,低电平有效,用于选中芯片。
I/O:数据输入输出引脚,用于传输数据。
SCLK:串行时钟输入引脚,为通信提供时钟源。

代码
#include "SMG.h"
#include <STC15F2K60S2.H>
// 初始化时间值(秒、分、时、日、月、周、年)
unsigned char shijian[7] = {5, 3, 13, 20, 3, 4, 25};
// 存储读取的时间值
unsigned char Get_Time[7];
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;
}
}
// 写入 DS1302 的特定寄存器
void Write_Ds1302_Byte(unsigned char address, unsigned char dat)
{
RST = 0;
SCK = 0;
RST = 1;
Write_Ds1302(address);
Write_Ds1302(dat);
RST = 0;
}
// 从 DS1302 读取单个字节
unsigned char Read_Ds1302_Byte(unsigned char address)
{
unsigned char i, temp = 0x00;
RST = 0;
SCK = 0;
RST = 1;
Write_Ds1302(address);
for (i = 0; i < 8; i++)
{
SCK = 0;
temp >>= 1;
if (SDA)
temp |= 0x80;
SCK = 1;
}
RST = 0;
SCK = 0;
SCK = 1;
SDA = 0;
SDA = 1;
return (temp);
}
// 初始化 DS1302
void DS_init(void)
{
unsigned char i, add;
add = 0x80; // 时间寄存器起始地址
Write_Ds1302_Byte(0x8E, 0x00); // 关闭写保护
for (i = 0; i < 7; i++)
{
Write_Ds1302_Byte(add, (shijian[i] / 10 << 4) | (shijian[i] % 10)); // 写入时间值
add += 2;
}
Write_Ds1302_Byte(0x8E, 0x80); // 开启写保护
}
// 读取 DS1302 的时间
void DS_get(void)
{
unsigned char i, add,dat;
unsigned char Add_Resses[7] = {
0x81, // 秒寄存器地址
0x83, // 分寄存器地址
0x85, // 时寄存器地址
0x87, // 日寄存器地址
0x89, // 月寄存器地址
0x8B, // 星期寄存器地址
0x8D // 年寄存器地址
};
for (i = 0; i < 7; i++)
{
add = Add_Resses[i];
dat = Read_Ds1302_Byte(add); // 读取时间值
Get_Time[i] = ((dat & 0xF0) >> 4) * 10 + (dat & 0x0F); // 转换为十进制格式
}
}
//显示
void DS1302()
{
// 读取时间
DS_get();
SMG_Show_Tiam(Get_Time[2],Get_Time[1],Get_Time[0]);
}
操作视频
https://www.bilibili.com/video/BV1AkXHYuEpJ?vd_source=b10b3445cdc8080c1d316e6f9a6245a0
2655

被折叠的 条评论
为什么被折叠?



