【DIY】STM8的实时时钟PCF8563与红外进出门提醒器

注:本文仅用于学习分享,分享自己DIY红外进出门提醒计数器+语音+RTC[第一次发CSDN[后期整理],若有不妥之处,请指正,感谢]

用到的工具有

  • 程序 IAR编译器环境
  • altium designer 原理图
  • altium designer PCB

实现的小功能有:
①能通过外部两个红外对管记人数并在OLED上显示 粗略计数人数
②能通过外部两个红外对 判断人进入或出去,并发出语音提示
ag:人进门:[语音]欢迎光临;人出门:[语音]谢谢惠顾

③语音整点报时
④OLED上显示实时时间包括:年-月-日-星期-时-分-秒
在这里插入图片描述

总体设计

1.基础硬件DIY设计
2.单片机程序设计
3.效果展示

1.基础硬件DIY设计

电路硬件:
[MCU]STM8S003P
[外部RTC]PCF8563
[语音模块]MY2490
[屏幕]0.96寸12864 OLED

1)整体原理图

在这里插入图片描述

2)外部RTC[PCF8563]电路

PCF8563芯片为IIC通信,SDA[5]与SCL[6]引脚需要上拉

RTC模块 多接一纽扣电池[3.0V],当整机断电时,纽扣电池为其提供电源,保证时钟还在运行。当单片机供上电时,读取数据为实时的时间,保证了断电时间还在继续运行。
在这里插入图片描述

3)PCB电路

在这里插入图片描述

4)3D_PCB

  • TOP层在这里插入图片描述
  • BOTTOM层在这里插入图片描述

2.单片机程序设计

1)PCF8563 I2C通信程序

//pcf8563.c       [PCF8563 I2C通信]
#include "pbdata.h"
u8 time_buf[7];

typedef struct Time //时间信息 结构体全局变量
{
   
  u8 year;
    u8 month;
      u8 week;
        u8 day;
          u8 hour;
            u8 minite;
              u8 second;
};
void PCF8563_WriteByte(u8 addr,u8 dt)
{
   
    I2C_Start();//启动信号
    I2C_Send_Byte(PCF8563_ADDRESS);
    I2C_Wait_Ack();
    I2C_Send_Byte((u8)(addr));
    I2C_Wait_Ack();
    I2C_Send_Byte(dt);
    I2C_Wait_Ack();
    I2C_Stop();    
}

void PCF8563_SetTime(void)//PCF8563初始化设定初始时间
{
      
    struct Time TIME={
   0x18,0x10,0x06,0x21,0x21,0x53,0x30};//设置时间: 年->月->周->日->时->分->秒
    //定义时间寄存器地址
    PCF8563_WriteByte(0x02,TIME.second);
    PCF8563_WriteByte(0x03,TIME.minite);
    PCF8563_WriteByte(0x04,TIME.hour);
    PCF8563_WriteByte(0x05,TIME.day);
    PCF8563_WriteByte(0x06,TIME.week);
    PCF8563_WriteByte(0x07,TIME.month);
    PCF8563_WriteByte(0x08,TIME.year);
}

void PCF8563_GetTime(u8 *buf)//得到时间数据包
{
   
    I2C_Start();
    I2C_Send_Byte(PCF8563_ADDRESS);
    I2C_Wait_Ack();
    I2C_Send_Byte(0x02);
    I2C_Wait_Ack();
    I2C_Start();    
    I2C_Send_Byte(PCF8563_ADDRESS+1);//A3
    I2C_Wait_Ack();
    
    buf[0]=I2C_Read_Byte(
  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值