查看: 554|回复: 0

扩展库使用说明——DS3231

[复制链接]

22

主题

22

帖子

116

积分

注册会员

Rank: 2

积分
116
发表于 2021-3-5 13:22:59 | 显示全部楼层 |阅读模式
本帖最后由 陈哲东 于 2021-7-4 11:05 编辑



1-硬件概述


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

2-引脚定义


B@%9US(~7Y)1DV9A%@)R_6F.png
%AQXILLIFI7NBF~JZF)_KUS.png
6Q)O])U2%9QG82VYC_C@(NT.png

3-电路原理图
4]F@YK~84}6(WD]3B5]}_1J.png
4-硬件连接
4E41FC06-0215-4282-A1D2-4F07387A618F.png

实物连接

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

GMYE@EM47EGT912P[H84W17.png

2.DS3231读取数据

SA5TY@((3_PTUH{[1WFK4XD.png

3.DS3231禁止中断

VVHEHYRXNN3}9L5P[Z13S5M.png

4.DS3231清除中断

J3KT9()AA3$)XB5)F5M6MH2.png

5.DS3231开启温度转换

6$D`PBTA9L5@GOM_T`(6LA2.png

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

3J@(EIK[T73B]IK0W7E$JG4.png

7.设置年月日

S3U{7EQZ6ZCY47M68M0K)F2.png

8.DS3231使能中断选择

R``HBL(HPZUQTC)`8%W(Q`H.png

9.DS3231使能中断时间设置

B_@LRL927XJ7GUJM)GWM.png

10.RTC设置日期时间

@C}@NF}UO]A9Q7U_GLP8PUR.png

12.RTC设置周

}WVLO_[`7_7N{4D[{7B1OKT.png

13.RTC设置时、分、秒

)GW%7[~NJ_R$DXZNS94OJUW.png

14.DS3231获取温度值


IK76XT@_%)[2)2BD~%OA[Z2.png

6-范例代码

{XA4`5A@3`AX1_9H[7A34M0.png


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

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

  12. uint16 msecond = 0;
  13. struct DS3231_Time _mytime;

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

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

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

  35. void loop()
  36. {
  37.   if(msecond >= 1000){
  38.     msecond = 0;
  39.     ds3231_read_rtc(&_mytime);
  40.     nix_display_time2((_mytime.hour),(_mytime.minute),(_mytime.second));//数码管显示时间
  41.   }
  42. }

  43. void main(void)
  44. {
  45.   setup();
  46.   while(1){
  47.     loop();
  48.   }
  49. }
复制代码



数据手册: DS3231.PDF (828.12 KB, 下载次数: 11)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2022-5-29 16:02 , Processed in 0.308059 second(s), 30 queries .

Powered by Discuz!

© 2001-2022 Comsenz Inc.

快速回复 返回顶部 返回列表