查看: 390|回复: 2

[原创] 【赚周年币】Fireduino A8.RTC测试以及OLED显示

[复制链接]

32

主题

13

好友

2272

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    开心
    52 秒前
  • 签到天数: 275 天

    连续签到: 49 天

    [LV.8]以坛为家I

    爱板会员勋章 活跃会员勋章

    发表于 2016-12-31 14:20:07 |显示全部楼层
    本帖最后由 limale 于 2017-1-17 20:23 编辑

    Fireduino开发板板载一款RTC芯片HYM8563就是如图左下角所指示的芯片,今天我们就来测试一下它的功能。从官方的例程来看操作起来很是方便,主要就是一个时间的结构体,然后就是getTime()和setTime()操作这两个函数即可。
    QQ截图20161222163635.jpg

    RTC -- HYM5863
    HYM8563是一款低功耗CMOS实时时钟/日历芯片,它提供一个可编程的时钟输出,一个中断输出和一个掉电检测器,所有的地址和数据都通过I2C总线接口串行传递。最大总线速度为400Kbit/s,每次读写数据后,内嵌的字地址寄存器会自动递增。


    Fireduino RTC
    Fireduino RTC 使用外接设备为I2C 接口的HYM5863,挂接在Wire1 接口

    Fireduino RTCTime 相关结构体
    //datetimeInfo struct
    typedef struct
    {
        unsigned short year;//year (1900 ~ 2099)
        unsigned char  mon;//month,begin from 1 to 12
        unsigned char  week;//week (0:Sunday 1:Monday ... 6:Saturday)
        unsigned char  day;//day,begin from 1 to 31
        unsigned char  hour;//hour,24-hour
        unsigned char  min;//minute
        unsigned char  sec;//second
    }RTCTime;

    Fireduino RTC API
    getTime(RTCTime *time)
       说明
            获取RTCTime
       语法
            RTC.getTime(&time);
       参数
            RTCTime 类型指针
       返回
            无   
    setTime(RTCTime *time)
       说明
             设置RTCTime
       语法
             RTC.setTime(&time);
       参数
             RTCTime 类型指针
       返回
             无

    初始化的时候设置一个时间点
    QQ截图20161231140829.jpg

    然后主循环里边得到时间显示出来
    QQ截图20161231140857.jpg

    主要的初始化和循环代码:
    1. #include <Arduino.h>
    2. #include "Wire.h"
    3. #include "oled.h"
    4. #include "oledfont.h"
    5. #include "RTC.h"

    6. RTCTime time;

    7. //板载led
    8. #define LED_GREEN   13
    9. #define LED_BLUE    3

    10. #define Trigger_T_measuremnet_hold_master         0xe3
    11. #define Trigger_RH_measuremnet_hold_master        0xe5
    12. extern int16_t SHT20_Read_value(uint8_t value);
    13. uint16_t SHT20_val;
    14. float SHT20_val_temp;
    15. float SHT20_val_humi;
    16. char str[15] = {};

    17. void Sys_Init(void)
    18. {
    19.   pinMode(OLED_GND, OUTPUT);
    20.   pinMode(OLED_VCC, OUTPUT);
    21.   pinMode(OLED_CLK, OUTPUT);
    22.   pinMode(OLED_DIN, OUTPUT);
    23.   pinMode(OLED_RES, OUTPUT);
    24.   pinMode(OLED_DC, OUTPUT);
    25.   pinMode(OLED_CS, OUTPUT);
    26.   digitalWrite(OLED_GND,LOW);
    27.   digitalWrite(OLED_VCC,HIGH);
    28.   
    29.   pinMode(LED_GREEN, OUTPUT);
    30.   digitalWrite(LED_GREEN,HIGH);
    31.   Wire.begin();
    32.   OLED_Init();
    33.   OLED_Clear();
    34.   
    35.   Serial.begin(115200);
    36.   Serial.print("\r\n FireDuino Setup ...\r\n");
    37.   time.year  = 2016;//year (1900 ~ 2099)
    38.   time.mon   = 12;//month,begin from 1 to 12
    39.   time.week  = 6 ;//week (0:Sunday 1:Monday ... 6:Saturday)
    40.   time.day   = 31;//day,begin from 1 to 31
    41.   time.hour  = 14;//hour,24-hour
    42.   time.min   = 10;//minute
    43.   time.sec   = 50;//second
    44.   Wire1.begin();
    45.   RTC.setTime(&time);
    46. }

    47. void Main(void)
    48. {
    49.   uint8_t i = 4;
    50.   while(1)
    51.   {
    52.       RTC.getTime(&time);
    53.       OLED_ShowString_4DEC(0, 0, time.year, 16);
    54.       OLED_ShowChar(32, 0, '/', 16);
    55.       OLED_ShowString_2DEC(40, 0, time.mon, 16);
    56.       OLED_ShowChar(56, 0, '/', 16);
    57.       OLED_ShowString_2DEC(64, 0, time.day, 16);

    58.       OLED_ShowString_2DEC(96, 0, time.week, 16);
    59.       
    60.       OLED_ShowString_2DEC(16, 2, time.hour, 16);
    61.       OLED_ShowChar(32, 2, ':', 16);
    62.       OLED_ShowString_2DEC(40, 2, time.min, 16);
    63.       OLED_ShowChar(56, 2, ':', 16);
    64.       OLED_ShowString_2DEC(64, 2, time.sec, 16);
    65.       
    66.       SHT20_val = SHT20_Read_value(Trigger_RH_measuremnet_hold_master);
    67.       SHT20_val &= ~0x0003;
    68.       SHT20_val_humi = -6.0 + 125.0 / 65536 * (float)SHT20_val;
    69.       sprintf(str, "= %5.2f RH ", SHT20_val_humi);
    70.       OLED_ShowCHinese(0, 4, 4);
    71.       OLED_ShowCHinese(16, 4, 5);
    72.       OLED_ShowString(32, 4, str, 16);
    73.       
    74.       SHT20_val = SHT20_Read_value(Trigger_T_measuremnet_hold_master);
    75.       SHT20_val &= ~0x0003;
    76.       SHT20_val_temp = -46.85 + 175.72 / 65536 * (float)SHT20_val;
    77.       sprintf(str, "= %5.2f C ", SHT20_val_temp);
    78.       OLED_ShowCHinese(0, 6, 6);
    79.       OLED_ShowCHinese(16, 6, 7);
    80.       OLED_ShowString(32, 6, str, 16);   
    81.     }  
    82. }
    复制代码
    显示效果图,可以看到秒数已经在递增了,加到60之后分钟递增。
    IMG_20161231_141356.jpg

    RTC操作起来还是很容易的,后边加了按键之后就可以对时间进行校准了。
    程序源码: RTC.rar (7.56 KB, 下载次数: 4)


    已有 1 人评分 收起 理由
    loveeeboard + 20

    总评分:  + 20   查看全部评分

    回复

    使用道具 举报

    176

    主题

    4

    好友

    6326

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    开心
    前天 20:29
  • 签到天数: 755 天

    连续签到: 13 天

    [LV.10]以坛为家III

    发表于 2016-12-31 15:04:48 |显示全部楼层
    OLED库是官方提供还是?如果是自己的分享一下
    回复

    使用道具 举报

    32

    主题

    13

    好友

    2272

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    开心
    52 秒前
  • 签到天数: 275 天

    连续签到: 49 天

    [LV.8]以坛为家I

    爱板会员勋章 活跃会员勋章

    发表于 2016-12-31 15:11:45 |显示全部楼层
    suoma 发表于 2016-12-31 15:04
    OLED库是官方提供还是?如果是自己的分享一下

    自己移植的不是官方的,帖子最下边的程序源码附件里边都有呢,你可以看看。
    回复

    使用道具 举报

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

    关闭

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

    手机版|爱板网 |网站地图  

    GMT+8, 2017-9-24 00:34 , Processed in 0.136600 second(s), 13 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部