Sound 发表于 2021-3-5 13:22:59

扩展库使用说明——DS3231

本帖最后由 陈哲东 于 2021-7-4 11:05 编辑

http://www.haohaodada.com/video/new/bbs/DS3231.mp4

1-硬件概述

DS3231是一个低成本,非常准确,实时时钟(RTC)。该设备包含一个电池输入,并在主电源中断时保持准确的计时。微机电系统(MEMS)谐振器的集成提高了设备的长期精度,并减少了生产线上的部件计数。DS3231M与流行的DS3231 RTC具有相同的足迹。RTC维护秒、分钟、小时、日、日、月和年信息。月末的日期会自动调整天数少于31天的月份,包括闰年的更正。时钟运行在24小时或12小时的格式与AM/PM指示器。提供了两个可编程的时间报警和1Hz输出。地址和数据通过12C双向总线串行地传送。一个精确的温度补偿电压参考和比较电路监测Vcc的状态,以检测电源故障,提供一个复位输出,并在必要时自动切换到备用电源。此外,将RST引脚监视为产生微处理器复位的按钮输入。请参阅框图了解更多细节。

2-引脚定义






3-电路原理图

4-硬件连接


实物连接


*注:SCL与SDA两根线与开发板的连接需要交叉,详情请参照上图硬件连接或者看开头视频!
5-图形化模块
1.DS3231初始化



2.DS3231读取数据



3.DS3231禁止中断



4.DS3231清除中断



5.DS3231开启温度转换



6.DS3231读取年、月、日、时、分、秒



7.设置年月日



8.DS3231使能中断选择



9.DS3231使能中断时间设置



10.RTC设置日期时间



12.RTC设置周



13.RTC设置时、分、秒



14.DS3231获取温度值




6-范例代码




#define NIXIETUBE_PORT P6
#define NIXIETUBE_PORT_MODE {P6M1=0x00;P6M0=0xff;}//推挽输出
#define NIXIETUBE_LEFT_COLON_PIN P0_7//左侧数码管冒号
#define NIXIETUBE_LEFT_COLON_PIN_MODE {P0M1&=~0x80;P0M0|=0x80;}//推挽输出
#define NIXIETUBE_RIGHT_COLON_PIN P2_1//右侧数码管冒号
#define NIXIETUBE_RIGHT_COLON_PIN_MODE {P2M1&=~0x02;P2M0|=0x02;}//推挽输出

#include <STC8HX.h>
uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数
#include "lib/nixietube.h"
#include "lib/led8.h"
#include "mylib/ds3231.h"

uint16 msecond = 0;
struct DS3231_Time _mytime;

void Timer0Init(void)      //1000微秒@24.000MHz
{
AUXR &= 0x7f;                //定时器时钟12T模式
TMOD &= 0xf0;                //设置定时器模式
TL0 = 0x30;                        //设定定时初值
TH0 = 0xf8;                        //设定定时初值
}

void T_IRQ0(void) interrupt 1 using 1{
nix_scan_callback();//数码管扫描回调函数
msecond = msecond + 1;
}

void setup()
{
nix_init();//数码管初始化
led8_disable();//关闭8个LED流水灯电源
ds3231_init();
Timer0Init();
EA = 1; // 控制总中断
ET0 = 1; // 控制定时器中断
TR0 = 1;// 定时器0开始计时
}

void loop()
{
if(msecond >= 1000){
    msecond = 0;
    ds3231_read_rtc(&_mytime);
    nix_display_time2((_mytime.hour),(_mytime.minute),(_mytime.second));//数码管显示时间
}
}

void main(void)
{
setup();
while(1){
    loop();
}
}



数据手册:









zjp30 发表于 2022-11-23 22:15:43

现在图形模块编程,时间没法更新啊。定时器和变量都没法和例程一样

把悲伤写进心里 发表于 2022-12-6 14:43:28

报错。看起来是分钟的读取和写入有问题,初始化命令写入时间就没问题

把悲伤写进心里 发表于 2023-6-19 21:49:14

“周”功能无法使用,读不到,
页: [1]
查看完整版本: 扩展库使用说明——DS3231