查看: 3576|回复: 0

【BananaPI】老邓的模块--DS3231

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-8-4 07:07:48 | 显示全部楼层 |阅读模式
    分享到:
        老邓的又一个小模块,DS3231。
        这是一个为树莓派香蕉派扩展的高精度时钟模块。因为香蕉派有BUG,本身内部的RTC不能正常使用,所以如果想在断电后时间不丢失,需要插上一个这样的扩展模块。
    DS3231_1.JPG

    近照
    DS3231_2.JPG

    unit Uit_DS3231;
    {$mode objfpc}{$H+}
    interface
    uses
      Classes, SysUtils, TWI;
    const
      DS3231_WriteAddress 0xD0 //器件写地址
      DS3231_ReadAddress 0xD1 //器件读地址
      DS3231_SECOND 0x00 //秒
      DS3231_MINUTE 0x01 //分
      DS3231_HOUR 0x02 //时
      DS3231_WEEK 0x03 //星期
      DS3231_DAY 0x04 //日
      DS3231_MONTH 0x05 //月
      DS3231_YEAR 0x06 //年
      DS3231_SALARM1ECOND 0x07 //秒
      DS3231_ALARM1MINUTE 0x08 //分
      DS3231_ALARM1HOUR 0x09 //时
      DS3231_ALARM1WEEK 0x0A //星期/日
      DS3231_ALARM2MINUTE 0x0b //分
      DS3231_ALARM2HOUR 0x0c //时
      DS3231_ALARM2WEEK 0x0d //星期/日
      DS3231_CONTROL 0x0e //控制寄存器
      DS3231_STATUS 0x0f //状态寄存器
      BSY 2 //忙
      OSF 7 //振荡器停止标志
      DS3231_XTAL 0x10 //晶体老化寄存器
      DS3231_TEMPERATUREH 0x11 //温度寄存器高字节(8位)
      DS3231_TEMPERATUREL 0x12 //温度寄存器低字节(高2位)

    type
      TDS3231 = class
      private
        class var FInstance: TDS3231;
        class function GetInstance: TDS3231; static;
      public
        class procedure Release;
        class property Instance: TDS3231 read GetInstance;
      private
        FTWI0: TTWI;
        constructor Create;
        destructor Destroy; override;
      public
        function GetByte(Addr, Reg: Byte): Byte;
      end;
    implementation
      const TDS3231ADDR = $34;
    class function TDS3231.GetInstance: TDS3231;
    begin
      if FInstance = nil then FInstance:= TDS3231.Create;
      Result:= FInstance;
    end;
    class procedure TDS3231.Release;
    begin
      FreeAndNil(FInstance);
    end;
    (******************************************************************************)
    constructor TDS3231.Create;
    begin
      inherited Create;
      FTWI0:= TTWI.Create(TWI_0);
    end;
    destructor TDS3231.Destroy;
    begin
      FTWI0.Free;
      inherited Destroy;
    end;
    function TDS3231.GetByte(Addr, Reg: Byte): Byte;
    begin
      FTWI0.Read(TDS3231ADDR, Reg, Result);
    end;
    end.

    评分

    参与人数 1与非币 +5 收起 理由
    loveeeboard + 5 三周年铜板双倍!

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 18:14 , Processed in 0.136891 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.