查看: 852|回复: 0

【ClassA20类库分析】7.实时时钟控制RTC类的使用

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

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-11-14 09:10:00 | 显示全部楼层 |阅读模式
    分享到:
    这一节要说的是RTC类的使用,请先在https://github.com/tjCFeng/ClassA20下载ClassA20类库。
       
    RTC,实时时钟控制,如果有备份电池的存在,那么在系统关机断电后时间是不丢失的,并且还在走时。开机后可以直接读取出当前值,并设置为系统时间,这也是嵌入式开发中常常用到的东西。不过由于有了网络的介入,为了节省成本,一般也就使用网络的时间同步功能而忽略RTC了。不过在某些场合下还是可能会用到。
       
    RTC中一般会分为两个部分:一是日期时间的设置和读取,二是闹钟的设置和中断响应。不过目前暂没有实现中断,所以闹钟功能没有添加。
       
    RTC自成一体,不再需要连接其他外部设备就可以展示出来,所以本节完全由程序实现使用过程。但是由于香蕉派的电源管理部分可能有一些小问题,造成断电后备份电池掉电很快,所以我目前尝试的结果只实现了对备份电池的充电,而设置时间值再关机开机后仍然不能正确读出时间,所以这里只作为参考,如果真正需要使用断电走时的话,还是外接个其他芯片吧。
       
    还是先打开RTC.pas来看一下类:

       
    系统中只有一个RTC单元的存在,所以它理所当然的是个单例类,而且目前只用它来设置和读取时间值,只用到最后一个public里的DateTime属性就够了。
    这个DateTime是TYMDHNSW类型,TYMDHNSW是一个结构体,为方便起见,我没有使用pascal自带的TDateTime类,也没有使用操作系统提供的类型,减少系统的依赖性。
       
    界面设置:
    两个Button,一个读取一个设置,其他的组件用于显示和输入日期时间,简单明了。不过有一点需要说明,Lazarus上居然没有DateTimePicker,只有Date的,没有Time的,这点可不如Delphi了。

       
    代码编写:
    因为是单例,直接在两个Button的点击事件里写就好了,别忘了在最上面的uses引用DateUitls单元

       
    因为太简单就不作说明了,看一下运行效果。运行后直接获取时间会显示0,因为还没有给RTC设置值。设置后连续点击获取,会发现秒数在变化,调用成功。

       
    需要注意一点,更改RTC的值后是不会改变系统时间的,因为是直接对底层硬件的操作而没有通过操作系统。比如设置个其他日期并设置

       

       
    要使RTC和系统时间关联起来,直接调用系统的API来完成吧,这里就不多说了。
       
    请在https://github.com/tjCFeng/ClassA20下载ClassA20类库。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-3-28 20:36 , Processed in 0.135831 second(s), 16 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.