标题:
STM32三键可调RTC源程序
[打印本页]
作者:
派大星就是艺术
时间:
2020-4-10 23:48
标题:
STM32三键可调RTC源程序
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "bmp.h"
#include "usmart.h"
#include "rtc.h"
#include "usart.h"
#include "key.h"
#include "beep.h"
int main(void)
{
u8 t;
u16 i=0;
u8 key;
vu8 time_day=1;
vu8 time_hour=1;
vu8 time_min=1;
init_add();
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,115200); //串口初始化为115200
usmart_dev.init(72); //初始化USMART
delay_init(72);
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
KEY_Init();
BEEP_Init();
while(RTC_Init()) //RTC初始化 ,一定要初始化成功
{
OLED_ShowString(8,16,"RTC ERROR!",16);
delay_ms(800);
OLED_ShowString(8,32,"RTC Trying...",16);
}
while(1)
{
end:
key=KEY_Scan(0);
if(key)
{
switch(key)
{
case 1://调时间
while(1)
{
key=KEY_Scan(0);
switch(key)
{
case 1://设置day
OLED_Clear();
while(1)
{
delay_ms(1);
i++;
OLED_ShowString(16,20,"date:",24);
if(i<66) OLED_ShowNum(80,20,calendar.w_date+add_calendar.day-1,2,24);
OLED_Refresh();
if(i<88&&i>66)
{
OLED_ShowString(80,20," ",24);
OLED_Refresh();
}
if(i>88)i=0;
key=KEY_Scan(0);
switch(key)
{
case 1: goto end;
case 2: add_calendar.day++;
RTC->CRL|=1<<4; //允许配置
RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
calendar.min+add_calendar.min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
init_add();
break;
case 3:
add_calendar.day--;
RTC->CRL|=1<<4; //允许配置
RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
calendar.min+add_calendar.min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
init_add();
break;
}
}
case 2://设置hour
OLED_Clear();
while(1)
{
delay_ms(1);
i++;
OLED_ShowString(16,20,"hour:",24);
if(i<66) OLED_ShowNum(80,20,calendar.hour+add_calendar.hour-1,2,24);
OLED_Refresh();
if(i<88&&i>66)
{
OLED_ShowString(80,20," ",24);
OLED_Refresh();
}
if(i>88)i=0;
key=KEY_Scan(0);
switch(key)
{
case 1:
add_calendar.hour++;
RTC->CRL|=1<<4; //允许配置
RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
calendar.min+add_calendar.min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
init_add();
break;
case 2: goto end;
case 3:
add_calendar.hour--;
RTC->CRL|=1<<4; //允许配置
RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
calendar.min+add_calendar.min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
init_add();
break;
}
}
case 3://设置min
OLED_Clear();
while(1)
{
delay_ms(1);
i++;
OLED_ShowString(16,20,"min:",24);
if(i<66) OLED_ShowNum(80,20,calendar.min+add_calendar.min-1,2,24);
OLED_Refresh();
if(i<88&&i>66)
{
OLED_ShowString(80,20," ",24);
OLED_Refresh();
}
if(i>88)i=0;
key=KEY_Scan(0);
switch(key)
{
case 1:
add_calendar.min++;
RTC->CRL|=1<<4; //允许配置
RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
calendar.min+add_calendar.min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
init_add();
break;
case 2:
add_calendar.min--;
RTC->CRL|=1<<4; //允许配置
RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
calendar.min+add_calendar.min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
init_add();
break;
case 3: goto end;
}
}
default: break;
}
}
case 2://调闹钟
while(1)
{
key=KEY_Scan(0);
switch(key)
{
case 1://设置day
OLED_Clear();
while(1)
{
delay_ms(1);
i++;
OLED_ShowString(16,20,"date:",24);
if(i<66) OLED_ShowNum(80,20,calendar.w_date+time_day-1,2,24);
OLED_Refresh();
if(i<88&&i>66)
{
OLED_ShowString(80,20," ",24);
OLED_Refresh();
}
if(i>88)i=0;
key=KEY_Scan(0);
switch(key)
{
case 1: goto end;
case 2: time_day++;
RTC->CRL|=1<<4; //允许配置
RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
calendar.min+time_min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
time_day=1;
time_hour=1;
time_min=1;
break;
case 3:
time_day--;
RTC->CRL|=1<<4; //允许配置
RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
calendar.min+time_min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
time_day=1;
time_hour=1;
time_min=1;
break;
}
}
case 2://设置hour
OLED_Clear();
while(1)
{
delay_ms(1);
i++;
OLED_ShowString(16,20,"hour:",24);
if(i<66) OLED_ShowNum(80,20,calendar.hour+time_hour-1,2,24);
OLED_Refresh();
if(i<88&&i>66)
{
OLED_ShowString(80,20," ",24);
OLED_Refresh();
}
if(i>88)i=0;
key=KEY_Scan(0);
switch(key)
{
case 1:
time_hour++;
RTC->CRL|=1<<4; //允许配置
RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
calendar.min+time_min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
time_day=1;
time_hour=1;
time_min=1;
break;
case 2: goto end;
case 3:
add_calendar.hour--;
RTC->CRL|=1<<4; //允许配置
RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
calendar.min+time_min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
time_day=1;
time_hour=1;
time_min=1;
break;
}
}
case 3://设置min
OLED_Clear();
while(1)
{
delay_ms(1);
i++;
OLED_ShowString(16,20,"min:",24);
if(i<66) OLED_ShowNum(80,20,calendar.min+time_min-1,2,24);
OLED_Refresh();
if(i<88&&i>66)
{
OLED_ShowString(80,20," ",24);
OLED_Refresh();
}
if(i>88)i=0;
key=KEY_Scan(0);
switch(key)
{
case 1:
time_min++;
RTC->CRL|=1<<4; //允许配置
RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
calendar.min+time_min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
time_day=1;
time_hour=1;
time_min=1;
break;
case 2:
time_min--;
RTC->CRL|=1<<4; //允许配置
RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
calendar.min+time_min-1,calendar.sec);
RTC->CRL&=~(1<<4); //配置更新
time_day=1;
time_hour=1;
time_min=1;
break;
case 3: goto end;
}
}
default: break;
}
}
default: break;
}
}
//闹钟设置
// RTC->CRL|=1<<4; //允许配置
// RTC_Alarm_Set(2020,4,3,12,25,00);
// RTC->CRL&=~(1<<4); //配置更新
//
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
三键可调RTC1.0.7z
2020-4-11 00:43 上传
点击文件名下载附件
下载积分: 黑币 -5
121.5 KB, 下载次数: 10, 下载积分: 黑币 -5
作者:
admin
时间:
2020-4-11 13:36
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1