找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4370|回复: 4
收起左侧

基于stm32f1系列的rtc万年历设计源码

[复制链接]
ID:434410 发表于 2018-11-27 18:49 | 显示全部楼层 |阅读模式
包括整个工程源码,我用的是正点原子f103zet6的板子;如果板子不同,或者自己焊接的话只需改下相关的io口,一般只要改key.c,led.c,的初始化函数就可以了
如有不懂的地方,请联系我解答

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "usmart.h"
  7. #include "rtc.h"
  8. #include "key.h"

  9.          
  10. int main(void)
  11. {
  12.         u8 t,mode=0;        
  13.         u8 t_key=0;
  14.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
  15.         delay_init();                     //延时函数初始化         
  16.         uart_init(9600);                 //串口初始化为9600
  17.         LED_Init();                                //初始化与LED连接的硬件接口
  18.          LCD_Init();                                //初始化LCD
  19.         KEY_Init();
  20.         usmart_dev.init(72);        //初始化USMART                                         
  21.         POINT_COLOR=RED;//设置字体为红色
  22. //        LCD_ShowString(60,50,200,16,16,"Mini STM32");        
  23. //        LCD_ShowString(60,70,200,16,16,"RTC TEST");        
  24. //        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
  25. //        LCD_ShowString(60,110,200,16,16,"2014/3/8");        
  26.         init_add();
  27.         while(RTC_Init())                //RTC初始化        ,一定要初始化成功
  28.         {
  29.                 LCD_ShowString(60,130,200,16,16,"RTC ERROR!   ");        
  30.                 delay_ms(800);
  31.                 LCD_ShowString(60,130,200,16,16,"RTC Trying...");        
  32.         }                                                                    
  33.         //显示时间
  34.         POINT_COLOR=BLUE;//设置字体为蓝色                                         
  35.         LCD_ShowString(60,130,200,16,16,"    -  -     ");           
  36.         LCD_ShowString(60,162,200,16,16,"  :  :  ");                             
  37.         while(1)
  38.         {
  39.                 t_key=KEY_Scan(0);                //得到键值
  40.                 if(t_key!=0)
  41.                 {
  42.                         POINT_COLOR=WHITE;
  43.                         LCD_DrawRectangle(59,129,93,147);
  44.                         LCD_DrawRectangle(99,129,117,147);
  45.                         LCD_DrawRectangle(123,129,141,147);
  46.                         LCD_DrawRectangle(59,161,77,179);
  47.                         LCD_DrawRectangle(83,161,101,179);
  48.                         LCD_DrawRectangle(107,161,125,179);
  49.                         LED1 = !LED1;
  50.                         POINT_COLOR=GRAY;
  51.                         switch(t_key)
  52.                         {                                 
  53.                                 case KEY0_PRES:
  54.                                         switch(mode)
  55.                                         {
  56.                                                 case 1:
  57.                                                         add_calendar.w_year--;
  58.                                                 break;
  59.                                                 case 2:
  60.                                                         add_calendar.w_month--;
  61.                                                 break;
  62.                                                 case 3:
  63.                                                         add_calendar.w_date--;
  64.                                                 break;
  65.         //                                        case 4:
  66.         //                                                add_calendar.week--;
  67.         //                                        break;
  68.                                                 case 5:
  69.                                                         add_calendar.hour--;
  70.                                                 break;
  71.                                                 case 6:
  72.                                                         add_calendar.min--;
  73.                                                 break;
  74.                                                 case 7:
  75.                                                         add_calendar.sec--;
  76.                                                 break;
  77.                                                 default:
  78. //                                                        delay_ms(10);
  79.                                                         break;                                       
  80.                                         }
  81.                                         break;
  82.                                 case KEY1_PRES:
  83.                                         switch(mode)
  84.                                         {
  85.                                                 case 1:
  86.                                                         add_calendar.w_year++;
  87.                                                 break;
  88.                                                 case 2:
  89.                                                         add_calendar.w_month++;
  90.                                                 break;
  91.                                                 case 3:
  92.                                                         add_calendar.w_date++;
  93.                                                 break;
  94.         //                                        case 4:
  95.         //                                                add_calendar.week++;
  96.         //                                        break;
  97.                                                 case 5:
  98.                                                         add_calendar.hour++;
  99.                                                 break;
  100.                                                 case 6:
  101.                                                         add_calendar.min++;
  102.                                                 break;
  103.                                                 case 7:
  104.                                                         add_calendar.sec++;
  105.                                                 break;
  106.                                                 default:
  107. //                                                        delay_ms(10);
  108.                                                         break;                                       
  109.                                         }
  110.                                         break;
  111.                                 case WKUP_PRES:                                
  112.                                         if(mode<8)
  113.                                                 mode++;
  114.                                         else
  115.                                                 mode = 0;
  116.                                         switch(mode)
  117.                                         {
  118.                                                 case 1:
  119.                                                         LCD_DrawRectangle(59,129,93,147);
  120.                                                 break;
  121.                                                 case 2:
  122.                                                         LCD_DrawRectangle(99,129,117,147);
  123.                                                 break;
  124.                                                 case 3:
  125.                                                         LCD_DrawRectangle(123,129,141,147);
  126.                                                 break;
  127.         //                                        case 4:
  128.         //                                                LCD_DrawRectangle(60,130,92,146);
  129.         //                                        break;
  130.                                                 case 5:
  131.                                                         LCD_DrawRectangle(59,161,77,179);
  132.                                                 break;
  133.                                                 case 6:
  134.                                                         LCD_DrawRectangle(83,161,101,179);
  135.                                                 break;
  136.                                                 case 7:
  137.                                                         LCD_DrawRectangle(107,161,125,179);
  138.                                                 break;
  139.                                                 default:
  140. //                                                        delay_ms(10);
  141.                                                         break;                                       
  142.                                         }
  143.                                         break;
  144.                                 default:
  145. //                                        delay_ms(10);
  146.                                         break;                        
  147.                         }
  148.                         RTC_EnterConfigMode();/// 允许配置        
  149.                         RTC_Set(calendar.w_year+add_calendar.w_year-1,calendar.w_month+add_calendar.w_month-1,
  150.                                                         calendar.w_date+add_calendar.w_date-1,calendar.hour+add_calendar.hour-1,
  151.                                                         calendar.min+add_calendar.min-1,calendar.sec+add_calendar.sec-1);  //设置时间        
  152.                         RTC_ExitConfigMode(); //退出配置模式
  153.                         init_add();
  154.                 }
  155.                
  156.                
  157.                 POINT_COLOR=BLUE;
  158.                 if(t!=calendar.sec)
  159.                 {
  160.                         t=calendar.sec;
  161.                         LCD_ShowNum(60,130,calendar.w_year,4,16);                                                                          
  162.                         LCD_ShowNum(100,130,calendar.w_month,2,16);                                                                          
  163.                         LCD_ShowNum(124,130,calendar.w_date,2,16);         
  164.                         switch(calendar.week)
  165.                         {
  166.                                 case 0:
  167.                                         LCD_ShowString(60,148,200,16,16,"Sunday   ");
  168.                                         break;
  169.                                 case 1:
  170.                                         LCD_ShowString(60,148,200,16,16,"Monday   ");
  171.                                         break;
  172.                                 case 2:
  173.                                         LCD_ShowString(60,148,200,16,16,"Tuesday  ");
  174.                                         break;
  175.                                 case 3:
  176.                                         LCD_ShowString(60,148,200,16,16,"Wednesday");
  177.                                         break;
  178.                                 case 4:
  179.                                         LCD_ShowString(60,148,200,16,16,"Thursday ");
  180.                                         break;
  181.                                 case 5:
  182.                                         LCD_ShowString(60,148,200,16,16,"Friday   ");
  183.                                         break;
  184.                                 case 6:
  185.                                         LCD_ShowString(60,148,200,16,16,"Saturday ");
  186.                                         break;  
  187.                         }
  188.                         LCD_ShowNum(60,162,calendar.hour,2,16);                                                                          
  189.                         LCD_ShowNum(84,162,calendar.min,2,16);                                                                          
  190.                         LCD_ShowNum(108,162,calendar.sec,2,16);
  191.                         LED0=!LED0;
  192.                 }        
  193. //                delay_ms(10);                                                                  
  194.         };                                                                                             
  195. }        
复制代码

所有资料51hei提供下载:
STM32 RTC实时实验.rar (415.4 KB, 下载次数: 111)
回复

使用道具 举报

ID:233717 发表于 2018-11-29 08:39 | 显示全部楼层
按键没有修改的吗
回复

使用道具 举报

ID:554588 发表于 2019-6-4 13:55 | 显示全部楼层
为什么蜂鸣器一直响?
回复

使用道具 举报

ID:666336 发表于 2019-12-17 15:38 | 显示全部楼层
请问 add_calendar ,是什么意思
回复

使用道具 举报

ID:777712 发表于 2020-6-22 20:40 | 显示全部楼层
请问有仿真图吗

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表