扩展库使用说明——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();
}
}
数据手册:
现在图形模块编程,时间没法更新啊。定时器和变量都没法和例程一样 报错。看起来是分钟的读取和写入有问题,初始化命令写入时间就没问题
“周”功能无法使用,读不到,
页:
[1]