概述

PCF8563模块具有实时时钟和日历功能,接入备用电池,掉电后可继续工作。模块基于I2C接口,能方便地与MCU连接。相较于DS1302时钟芯片,PCF8563可编程,具有中断输出功能。

特点

模块原理图

应用

我们将用arduino驱动PCF8563实时时钟模块制作一个闹钟,当时间到后,蜂鸣器响,LED亮起。

电路连接图

软件

1.安装库文件

下载PCF8563实时时钟模块需要的arduino库文件,下载rtc_pcf8563.zip,解压后放到arduino IDE安装目录下的\libraries目录下

2.示例代码

下载闹钟示例代码arlm.zip,解压后用arduino IDE打开arlm.ino,下面对部分代码作简要说明。

#include < Wire.h >
#include < Rtc_Pcf8563.h >
#define INT 3
#define BEEP 4
#define LED 5

添加相关库文件,定义pcf8563模块中断引脚与arduino uno的D3连接在一起,D3是arduino uno的外部中断1;将蜂鸣器和led分别到D4、D5口上。

 volatile int alarm_flag=0;

当闹钟中断标志,当闹钟中断产生时候将alarm_flag置1.

 Rtc_Pcf8563 rtc;

实例化一个pcf8563对象

 /* setup int on pin 3 of Arduino */
  attachInterrupt(1, task, FALLING);
  /* clear out all the registers */
  rtc.initClock();
  /* set a time to start with.
   * day, weekday, month, century, year */
  rtc.setDate(1, 5, 9, 0, 17);
  /* hr, min, sec */
  rtc.setTime(10, 56, 55);
  /* set an alarm for 20 secs later...
   * alarm pin goes low when match occurs
   * this triggers the interrupt routine
   * min, hr, day, weekday 
   * 99 = no alarm value to be set
   */
  rtc.setAlarm(57, 99, 99, 99);

在setup()函数中,完成了下面几件事

 void task()
{
  digitalWrite(LED,LOW),digitalWrite(BEEP,LOW);//open beep and led
  alarm_flag = 1;
}

task是闹钟中断服务函数,触发中断后将会执行这个函数,这个函数负责点亮LED和让蜂鸣器响,并将alarm_flag标志位置1.

 void clr_alarm()
{
  detachInterrupt(1);
  digitalWrite(LED,HIGH),digitalWrite(BEEP,HIGH);//close beep and led
  rtc.clearAlarm();
  delay(1000);
  alarm_flag=0;
  attachInterrupt(1, task, FALLING);
}

上面的函数用于清除闹钟中断,关闭LED和蜂鸣器,并将alarm_flag标志清0

测试

step 1 用USB线把PC和arduino uno连接起来,选择正确的板卡型号和端口号,烧录到arduino

step 2 打开Serial Monitor将会输出实时时间,当时间到后蜂鸣器和LED会打开3s再关闭。