找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4946|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

基于stm32f1系列的rtc萬年歷設(shè)計(jì)源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:434410 發(fā)表于 2018-11-27 18:49 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
包括整個(gè)工程源碼,我用的是正點(diǎn)原子f103zet6的板子;如果板子不同,或者自己焊接的話只需改下相關(guān)的io口,一般只要改key.c,led.c,的初始化函數(shù)就可以了
如有不懂的地方,請(qǐng)聯(lián)系我解答

單片機(jī)源程序如下:
  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);// 設(shè)置中斷優(yōu)先級(jí)分組2
  15.         delay_init();                     //延時(shí)函數(shù)初始化         
  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;//設(shè)置字體為紅色
  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.         //顯示時(shí)間
  34.         POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色                                         
  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);  //設(shè)置時(shí)間        
  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. }        
復(fù)制代碼

所有資料51hei提供下載:
STM32 RTC實(shí)時(shí)實(shí)驗(yàn).rar (415.4 KB, 下載次數(shù): 113)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:233717 發(fā)表于 2018-11-29 08:39 | 只看該作者
按鍵沒有修改的嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:554588 發(fā)表于 2019-6-4 13:55 | 只看該作者
為什么蜂鳴器一直響?
回復(fù)

使用道具 舉報(bào)

地板
ID:666336 發(fā)表于 2019-12-17 15:38 | 只看該作者
請(qǐng)問 add_calendar ,是什么意思
回復(fù)

使用道具 舉報(bào)

5#
ID:777712 發(fā)表于 2020-6-22 20:40 | 只看該作者
請(qǐng)問有仿真圖嗎

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表