查看: 986|回复: 0

【BananaPI】老邓的模块--DS3231

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

    连续签到: 1 天

    [LV.10]以坛为家III

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

    近照

       
    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.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 12:04 , Processed in 0.112974 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.