学好了或许可以结合OLED、KEY、DS1302做个小闹钟哦
概述
一句话介绍DS1302:可以理解为一个电子手表,里面有31字节的RAM静态内存(只要有电,数据就不会丢失) 关键词:高性能 低功耗 SPI 31字节静态ROM 实时时钟 SPI:一种传输方式 静态ROM:只要有电,数据就不会丢失
采用SPI三线接口与MCU同步通信,可采用突发方式一次传送多个字节的时钟参数和RAM数据 附加31字节的静态RAM0 两个存储器: 日历时钟寄存器 + 静态RAM存储器 寄存器: ● 在任何对时钟或RAM读写操作之前,WP位必须为0。当WP位为1时,不能对任何时钟日历寄存器或RAM进行写操作(写寄存器:0x80 = 1000 0000,0x00 = 0000 0000)
读地址:READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; //秒分时日月周年 写地址:WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //秒分时日月周年 存时间:TIME[7] = {0x45, 0x59, 0x23, 0x17, 0x02, 0x06, 0x18}; //存储格式是用BCD码:2018年2月17日周六23时59分45秒
实操
底层驱动参考蓝桥杯官方提供的代码,并不需要掌握,调库!!!
初始化函数 void Ds1302_Init(); // 初始化时间日期 / 更新更改后的日期 读取当前时间:void Ds1302_ReadTime(); // 读取实时变化的时间
void Ds1302Init()
{
unsigned char n;
Write_Ds1302_Byte(0x8e,0x00);
for(n = 0; n < 7; n ++)
{
Write_Ds1302_Byte(WRITE_RTC_ADDR[n],TIME[n]);
}
Write_Ds1302_Byte(0x8e,0x80);
}
void Ds1302_ReadTime()
{
unsigned char i;
for(i = 0; i < 7; i ++)
{
TIME[i] = Read_Ds1302_Byte(READ_RTC_ADDR[i]);
}
}
|