基于DS3231实时时钟模块的stm32简易闹钟

基于DS3231实时时钟模块的stm32简易闹钟
豆袋弹
stm32简易闹钟
设计、制作⼀个简易的闹钟。要求如下:
(1)作品需设有电源指⽰灯(绿),上电后,指⽰灯亮;
(2)该闹钟能够显⽰当前的⽇期和时间,显⽰界⾯如下:
Alarm Clock
Date:年-⽉-⽇ (⽇期)
Time:时:分:秒 (时间)
Alm: 时:分:秒 (报警时间)
(3)报警时间可调。设4个按键,分别为调时、调分、调秒、确定
(4)当报警时间到达时,采⽤蜂鸣器报警,蜂鸣器要求响5S钟。
系统系统
时钟模块设计与论证
⽅案⼀:直接采⽤STM32单⽚机⾃⾝集成的RTC实时时钟,使⽤程序实现年、⽉、⽇、星期、时、分
、秒计数。采⽤此种⽅案虽然减少芯⽚的使⽤,节约成本,但是单⽚机掉电会丢失数据,需要外部32.768KHz晶振和纽扣电池供电。 
⽅案⼆:采⽤DS1302为计时时钟芯⽚ 
该芯⽚是串⾏电路,与单⽚机接⼝简单,但需另备电池和32.768kHz晶振,因焊接⼯艺和晶振质量等原因会导致精度降低。
⽅案三:采⽤DS3231实时时钟模块
该芯⽚与单⽚机通过IIC串⾏通信,传递速度⽐较快。⾃带有电池,不需要外部晶振,完整的时钟⽇历功能包括秒、分、时、星期、⽇期、⽉和年计时,并提供有效期到2100年的闰年补偿,两个⽇历闹钟。还有集成了温度传感器,成本低。
由于DS3231时钟芯⽚模块精度⾼,⽽且具有闰年补偿功能且价格经济实惠等优点,故采⽤⽅案三。
本设计采⽤模块
采⽤STM32F103C8T6作为控制器,采⽤独⽴按键输⼊,0.96⼨OLED显⽰屏spi四线通信作为显⽰模块,DS3231M模块作为实时时钟模块,发声模块采⽤有源蜂鸣器模块。
原理图如下:
主程序:
#include"system.h"
#include"SysTick.h"
#include"led.h"
#include"usart.h"
#include"oled.h"
#include"picture.h"
#include"ds3231.h"
#include"key.h"
_calendar_part calendar;//声明时钟结构体
_Alarmclock_part Alarmclock;//声明闹钟结构体
typedef struct
{
u8 sure_flag;
u8 stop_flag;
}_Alarm_flag;//标志结构体
_Alarm_flag flag;
void display(void);
void Key_Control(void);
int main()
{
SysTick_Init(72);//系统时钟初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组分2组LED_Init();//led初始化
OLED_Init();//OLED初始化
DS3231_Init();//DS3231初始化
KEY_Init();//按键初始化
Alarmclock.hour =8;//闹钟初始值
Alarmclock.min =50;
Alarmclock.sec =0;
Alarmclock1_close();//初始先将闹钟关闭并清除闹钟标志位
Alarmclock1_cmd(0);
beep =1;
while(1)
{
get_time();
display();//oled显⽰
Key_Control();//按键控制
if(flag.sure_flag)
{
Alarmclock1_cmd(1);//闹钟使能
SetAlarmclock(Alarmclock.hour,Alarmclock.min,Alarmclock.sec);//设置闹钟if(Alarmclock1state()==1&&!flag.stop_flag)//检测闹钟标志位
{
beep =0;//蜂鸣器打开
Alarmclock1_cmd(0);//闹钟失能
Alarmclock1_close();//关闭闹钟并清理标志位
flag.stop_flag =1;
}
}
else
{
beep =1;//蜂鸣器关闭
}
if(flag.stop_flag)//使闹钟5秒钟后停⽌
{
Alarmclock1_cmd(1);
SetAlarmclock(Alarmclock.hour,Alarmclock.min,Alarmclock.sec+5);
if(Alarmclock1state()==1)萃取装置
{
beep =1;
Alarmclock1_cmd(0);
Alarmclock1_close();
flag.stop_flag =0;
flag.sure_flag =0;
}
}
}
}
void display(void)//OLED显⽰
{
/*****⽇期显⽰****/
OLED_ShowNum(0,0,ar,4,16);
OLED_ShowFontHZ(16*2,0,0,16,1);//年
OLED_ShowNum(16*3,h,2,16);
OLED_ShowFontHZ(16*4,0,1,16,1);//⽉
OLED_ShowNum(16*5,0,calendar.day,2,16);
OLED_ShowFontHZ(16*6,0,2,16,1);//⽇
/*****时间显⽰*****/
/
*****时间显⽰*****/
OLED_ShowChar(24*0,16,calendar.hour/10+'0',24,1);//时OLED_ShowChar(12*1,16,calendar.hour%10+'0',24,1);//时OLED_ShowChar(6*5,16,':',24,1);
OLED_ShowChar(24*2,16,calendar.min/10+'0',24,1);//分OLED_ShowChar(12*5,16,calendar.min%10+'0',24,1);//分OLED_ShowChar(6*13,16,':',24,1);
OLED_ShowChar(24*4,16,calendar.sec/10+'0',24,1);//秒OLED_ShowChar(12*9,16,calendar.sec%10+'0',24,1);//秒/******闹钟******/
if(flag.sure_flag)OLED_ShowString(16*0,48,"A",16);
else OLED_ShowString(16*0,48," ",16);
OLED_ShowChar(16*1,48,Alarmclock.hour/10+'0',16,1);//时OLED_ShowChar(8*3,48,Alarmclock.hour%10+'0',16,1);//时OLED_ShowChar(4*9,48,':',16,1);全自动打胶机
OLED_ShowChar(16*3,48,Alarmclock.min/10+'0',16,1);//分OLED_ShowChar(8*7,48,Alarmclock.min%10+'0',16,1);//分OLED_ShowChar(4*17,48,':',16,1);
OLED_ShowChar(16*5,48,Alarmclock.sec/10+'0',16,1);//秒OLED_ShowChar(8*11,48,Alarmclock.sec%10+'0',16,1);//秒OLED_Refresh_Gram();//刷新GRAM数组
}
void Key_Control(void)//按键控制
{
u8 temp =0;
temp =KEY_Scan(0);
导游扩音器
switch(temp)
{
case1: Alarmclock.hour+=1;
if(Alarmclock.hour>=24) Alarmclock.hour=0;
break;
case2: Alarmclock.min+=1;
if(Alarmclock.min>=60) Alarmclock.min=0;
break;
case3: Alarmclock.sec+=1;
if(Alarmclock.sec>=60) Alarmclock.sec=0;
break;
case4: flag.sure_flag =~ flag.sure_flag;
工业氯化钙break;
}
}
纸币清分机

本文发布于:2024-09-22 16:35:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/191336.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:闹钟   模块   时钟   蜂鸣器   晶振   报警
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议