标题:
基于stm32f1系列的rtc万年历设计源码
[打印本页]
作者:
wwllaowang
时间:
2018-11-27 18:49
标题:
基于stm32f1系列的rtc万年历设计源码
包括整个工程源码,我用的是正点原子f103zet6的板子;如果板子不同,或者自己焊接的话只需改下相关的io口,一般只要改key.c,led.c,的初始化函数就可以了
如有不懂的地方,请联系我解答
单片机源程序如下:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "usmart.h"
#include "rtc.h"
#include "key.h"
int main(void)
{
u8 t,mode=0;
u8 t_key=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init(); //初始化LCD
KEY_Init();
usmart_dev.init(72); //初始化USMART
POINT_COLOR=RED;//设置字体为红色
// LCD_ShowString(60,50,200,16,16,"Mini STM32");
// LCD_ShowString(60,70,200,16,16,"RTC TEST");
// LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
// LCD_ShowString(60,110,200,16,16,"2014/3/8");
init_add();
while(RTC_Init()) //RTC初始化 ,一定要初始化成功
{
LCD_ShowString(60,130,200,16,16,"RTC ERROR! ");
delay_ms(800);
LCD_ShowString(60,130,200,16,16,"RTC Trying...");
}
//显示时间
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,130,200,16,16," - - ");
LCD_ShowString(60,162,200,16,16," : : ");
while(1)
{
t_key=KEY_Scan(0); //得到键值
if(t_key!=0)
{
POINT_COLOR=WHITE;
LCD_DrawRectangle(59,129,93,147);
LCD_DrawRectangle(99,129,117,147);
LCD_DrawRectangle(123,129,141,147);
LCD_DrawRectangle(59,161,77,179);
LCD_DrawRectangle(83,161,101,179);
LCD_DrawRectangle(107,161,125,179);
LED1 = !LED1;
POINT_COLOR=GRAY;
switch(t_key)
{
case KEY0_PRES:
switch(mode)
{
case 1:
add_calendar.w_year--;
break;
case 2:
add_calendar.w_month--;
break;
case 3:
add_calendar.w_date--;
break;
// case 4:
// add_calendar.week--;
// break;
case 5:
add_calendar.hour--;
break;
case 6:
add_calendar.min--;
break;
case 7:
add_calendar.sec--;
break;
default:
// delay_ms(10);
break;
}
break;
case KEY1_PRES:
switch(mode)
{
case 1:
add_calendar.w_year++;
break;
case 2:
add_calendar.w_month++;
break;
case 3:
add_calendar.w_date++;
break;
// case 4:
// add_calendar.week++;
// break;
case 5:
add_calendar.hour++;
break;
case 6:
add_calendar.min++;
break;
case 7:
add_calendar.sec++;
break;
default:
// delay_ms(10);
break;
}
break;
case WKUP_PRES:
if(mode<8)
mode++;
else
mode = 0;
switch(mode)
{
case 1:
LCD_DrawRectangle(59,129,93,147);
break;
case 2:
LCD_DrawRectangle(99,129,117,147);
break;
case 3:
LCD_DrawRectangle(123,129,141,147);
break;
// case 4:
// LCD_DrawRectangle(60,130,92,146);
// break;
case 5:
LCD_DrawRectangle(59,161,77,179);
break;
case 6:
LCD_DrawRectangle(83,161,101,179);
break;
case 7:
LCD_DrawRectangle(107,161,125,179);
break;
default:
// delay_ms(10);
break;
}
break;
default:
// delay_ms(10);
break;
}
RTC_EnterConfigMode();/// 允许配置
RTC_Set(calendar.w_year+add_calendar.w_year-1,calendar.w_month+add_calendar.w_month-1,
calendar.w_date+add_calendar.w_date-1,calendar.hour+add_calendar.hour-1,
calendar.min+add_calendar.min-1,calendar.sec+add_calendar.sec-1); //设置时间
RTC_ExitConfigMode(); //退出配置模式
init_add();
}
POINT_COLOR=BLUE;
if(t!=calendar.sec)
{
t=calendar.sec;
LCD_ShowNum(60,130,calendar.w_year,4,16);
LCD_ShowNum(100,130,calendar.w_month,2,16);
LCD_ShowNum(124,130,calendar.w_date,2,16);
switch(calendar.week)
{
case 0:
LCD_ShowString(60,148,200,16,16,"Sunday ");
break;
case 1:
LCD_ShowString(60,148,200,16,16,"Monday ");
break;
case 2:
LCD_ShowString(60,148,200,16,16,"Tuesday ");
break;
case 3:
LCD_ShowString(60,148,200,16,16,"Wednesday");
break;
case 4:
LCD_ShowString(60,148,200,16,16,"Thursday ");
break;
case 5:
LCD_ShowString(60,148,200,16,16,"Friday ");
break;
case 6:
LCD_ShowString(60,148,200,16,16,"Saturday ");
break;
}
LCD_ShowNum(60,162,calendar.hour,2,16);
LCD_ShowNum(84,162,calendar.min,2,16);
LCD_ShowNum(108,162,calendar.sec,2,16);
LED0=!LED0;
}
// delay_ms(10);
};
}
复制代码
所有资料51hei提供下载:
STM32 RTC实时实验.rar
(415.4 KB, 下载次数: 113)
2018-11-28 00:47 上传
点击文件名下载附件
整个工程源码
下载积分: 黑币 -5
作者:
123@w
时间:
2018-11-29 08:39
按键没有修改的吗
作者:
HuuuLaa
时间:
2019-6-4 13:55
为什么蜂鸣器一直响?
作者:
yetu12
时间:
2019-12-17 15:38
请问 add_calendar ,是什么意思
作者:
lxflxy
时间:
2020-6-22 20:40
请问有仿真图吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1