久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1475|回復: 1
打印 上一主題 下一主題
收起左側

STM32三鍵可調RTC源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:620851 發表于 2020-4-10 23:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "oled.h"
  4. #include "bmp.h"
  5. #include "usmart.h"
  6. #include "rtc.h"
  7. #include "usart.h"
  8. #include  "key.h"
  9. #include "beep.h"




  10. int main(void)
  11. {
  12.        
  13.         u8 t;
  14.         u16 i=0;
  15.         u8 key;
  16.         vu8 time_day=1;
  17.         vu8 time_hour=1;
  18.         vu8 time_min=1;
  19.         init_add();
  20.         Stm32_Clock_Init(9);        //系統時鐘設置
  21.         uart_init(72,115200);        //串口初始化為115200
  22.         usmart_dev.init(72);        //初始化USMART                       
  23. delay_init(72);
  24.         OLED_Init();
  25.         OLED_ColorTurn(0);//0正常顯示,1 反色顯示
  26. OLED_DisplayTurn(0);//0正常顯示 1 屏幕翻轉顯示
  27.         KEY_Init();
  28.   BEEP_Init();
  29.         while(RTC_Init())                //RTC初始化        ,一定要初始化成功
  30.         {
  31.                
  32.                 OLED_ShowString(8,16,"RTC ERROR!",16);
  33.                 delay_ms(800);
  34.                 OLED_ShowString(8,32,"RTC Trying...",16);       

  35.        
  36.         }



  37.        
  38.         while(1)
  39.         {       
  40.        
  41.                 end:
  42.                 key=KEY_Scan(0);
  43.                
  44.                 if(key)
  45.                 {
  46.                         switch(key)
  47.                         {
  48.                                 case 1://調時間
  49.                                        
  50.                                 while(1)
  51.                                 {
  52.                                         key=KEY_Scan(0);
  53.                                           switch(key)
  54.                                          {
  55.                                                  case 1://設置day
  56.                                                         OLED_Clear();
  57.                                                                         while(1)
  58.                                                                         {       
  59.                                                                                 delay_ms(1);
  60.                                                                           i++;
  61.                                                                                 OLED_ShowString(16,20,"date:",24);
  62.                                                                                 if(i<66) OLED_ShowNum(80,20,calendar.w_date+add_calendar.day-1,2,24);
  63.                                                                                 OLED_Refresh();
  64.                                                                                 if(i<88&&i>66)
  65.                                                                                 {
  66.                                                                                        
  67.                                                                                         OLED_ShowString(80,20,"    ",24);
  68.                                                                                         OLED_Refresh();
  69.                                                                                        
  70.                                                                                 }
  71.                                                                                 if(i>88)i=0;
  72.                                                                                 key=KEY_Scan(0);
  73.                                                                                 switch(key)
  74.                                                                                 {
  75.                                                                                
  76.                                                                                         case 1: goto end;
  77.                                                                                        
  78.                                                                                         case 2: add_calendar.day++;
  79.                                                                                                
  80.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  81.                                                                                                         RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
  82.                                                                                                                                    calendar.min+add_calendar.min-1,calendar.sec);
  83.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  84.                                                                                                         init_add();                                                                               
  85.                                                                                                         break;               
  86.                                                                                         case 3:
  87.                                                                                                         add_calendar.day--;
  88.                                                                                                        
  89.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  90.                                                                                                         RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
  91.                                                                                                         calendar.min+add_calendar.min-1,calendar.sec);
  92.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  93.                                                                                                         init_add();
  94.                                                                                                         break;                                                                                               
  95.                                                                                 }
  96.                                                                         }
  97.                                                 case 2://設置hour
  98.                                                         OLED_Clear();
  99.                                                                         while(1)
  100.                                                                         {       
  101.                                                                                 delay_ms(1);
  102.                                                                           i++;
  103.                                                                                 OLED_ShowString(16,20,"hour:",24);
  104.                                                                                 if(i<66) OLED_ShowNum(80,20,calendar.hour+add_calendar.hour-1,2,24);
  105.                                                                                 OLED_Refresh();
  106.                                                                                 if(i<88&&i>66)
  107.                                                                                 {
  108.                                                                                        
  109.                                                                                         OLED_ShowString(80,20,"    ",24);
  110.                                                                                         OLED_Refresh();
  111.                                                                                        
  112.                                                                                 }
  113.                                                                                 if(i>88)i=0;
  114.                                                                                 key=KEY_Scan(0);
  115.                                                                                 switch(key)
  116.                                                                                 {
  117.                                                                                        
  118.                                                                                         case 1:
  119.                                                                                                         add_calendar.hour++;
  120.                                                                                                
  121.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  122.                                                                                                         RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
  123.                                                                                                                                    calendar.min+add_calendar.min-1,calendar.sec);
  124.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  125.                                                                                                         init_add();
  126.                                                                                                         break;               
  127.                                                                                         case 2: goto end;       
  128.                                                                                        
  129.                                                                                         case 3:
  130.                                                                                                         add_calendar.hour--;
  131.                                                                                                
  132.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  133.                                                                                                         RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
  134.                                                                                                                                    calendar.min+add_calendar.min-1,calendar.sec);
  135.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  136.                                                                                                 init_add();
  137.                                                                                                         break;               
  138.                                                                                 }       
  139.                                                                          }
  140.                                                                                        
  141.                                                 case 3://設置min
  142.                                                         OLED_Clear();
  143.                                                                         while(1)
  144.                                                                         {
  145.                                                                                 delay_ms(1);
  146.                                                                           i++;
  147.                                                                                 OLED_ShowString(16,20,"min:",24);
  148.                                                                                 if(i<66) OLED_ShowNum(80,20,calendar.min+add_calendar.min-1,2,24);
  149.                                                                                 OLED_Refresh();
  150.                                                                                 if(i<88&&i>66)
  151.                                                                                 {
  152.                                                                                        
  153.                                                                                         OLED_ShowString(80,20,"    ",24);
  154.                                                                                         OLED_Refresh();
  155.                                                                                        
  156.                                                                                 }
  157.                                                                                 if(i>88)i=0;
  158.                                                                                 key=KEY_Scan(0);
  159.                                                                                 switch(key)
  160.                                                                                 {               
  161.                                                                                         case 1:
  162.                                                                                                         add_calendar.min++;
  163.                                                                                                        
  164.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  165.                                                                                                         RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
  166.                                                                                                                                    calendar.min+add_calendar.min-1,calendar.sec);
  167.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  168.                                                                                     init_add();
  169.                                                                                                         break;               
  170.                                                                                         case 2:       
  171.                                                                                                         add_calendar.min--;
  172.                                                                                                        
  173.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  174.                                                                                                         RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date+add_calendar.day-1,calendar.hour+add_calendar.hour-1,
  175.                                                                                                    calendar.min+add_calendar.min-1,calendar.sec);
  176.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  177.                                                                                                 init_add();
  178.                                                                                                         break;               
  179.                                                                                         case 3: goto end;               
  180.                                                                                 }
  181.                                                                         }
  182.                                                                
  183.                                                 default: break;                       
  184.                                        
  185.                                           }
  186.                                         }
  187.                                 case 2://調鬧鐘
  188.          while(1)
  189.                                  {                                         
  190.                                 key=KEY_Scan(0);
  191.                                           switch(key)
  192.                                          {
  193.                                                  case 1://設置day
  194.                                                         OLED_Clear();
  195.                                                                         while(1)
  196.                                                                         {       
  197.                                                                                 delay_ms(1);
  198.                                                                           i++;
  199.                                                                                 OLED_ShowString(16,20,"date:",24);
  200.                                                                                 if(i<66) OLED_ShowNum(80,20,calendar.w_date+time_day-1,2,24);
  201.                                                                                 OLED_Refresh();
  202.                                                                                 if(i<88&&i>66)
  203.                                                                                 {
  204.                                                                                        
  205.                                                                                         OLED_ShowString(80,20,"    ",24);
  206.                                                                                         OLED_Refresh();
  207.                                                                                        
  208.                                                                                 }
  209.                                                                                 if(i>88)i=0;
  210.                                                                                 key=KEY_Scan(0);
  211.                                                                                 switch(key)
  212.                                                                                 {
  213.                                                                                
  214.                                                                                         case 1: goto end;
  215.                                                                                        
  216.                                                                                         case 2: time_day++;
  217.                                                                                                
  218.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  219.                                                                                                         RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
  220.                                                                                                                                    calendar.min+time_min-1,calendar.sec);
  221.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新                                                                                       
  222.                                                                                             time_day=1;
  223.                                                                                            time_hour=1;
  224.                                                                                            time_min=1;
  225.                                                                                                         break;               
  226.                                                                                         case 3:
  227.                                                                                                         time_day--;
  228.                                                                                                        
  229.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  230.                                                                                                         RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
  231.                                                                                                                                    calendar.min+time_min-1,calendar.sec);
  232.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  233.                                                                                             time_day=1;
  234.                                                                                            time_hour=1;
  235.                                                                                            time_min=1;
  236.                                                                                                         break;                                                                                               
  237.                                                                                 }
  238.                                                                         }
  239.                                                 case 2://設置hour
  240.                                                         OLED_Clear();
  241.                                                                         while(1)
  242.                                                                         {       
  243.                                                                                 delay_ms(1);
  244.                                                                           i++;
  245.                                                                                 OLED_ShowString(16,20,"hour:",24);
  246.                                                                                 if(i<66) OLED_ShowNum(80,20,calendar.hour+time_hour-1,2,24);
  247.                                                                                 OLED_Refresh();
  248.                                                                                 if(i<88&&i>66)
  249.                                                                                 {
  250.                                                                                        
  251.                                                                                         OLED_ShowString(80,20,"    ",24);
  252.                                                                                         OLED_Refresh();
  253.                                                                                        
  254.                                                                                 }
  255.                                                                                 if(i>88)i=0;
  256.                                                                                 key=KEY_Scan(0);
  257.                                                                                 switch(key)
  258.                                                                                 {
  259.                                                                                        
  260.                                                                                         case 1:
  261.                                                                                                         time_hour++;
  262.                                                                                                
  263.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  264.                                                                                                         RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
  265.                                                                                                                                    calendar.min+time_min-1,calendar.sec);
  266.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  267.                                                                                          time_day=1;
  268.                                                                                            time_hour=1;
  269.                                                                                            time_min=1;
  270.                                                                                                         break;               
  271.                                                                                         case 2: goto end;       
  272.                                                                                        
  273.                                                                                         case 3:
  274.                                                                                                         add_calendar.hour--;
  275.                                                                                                
  276.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  277.                                                                                                 RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
  278.                                                                                                                                    calendar.min+time_min-1,calendar.sec);
  279.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  280.                                                                                           time_day=1;
  281.                                                                                            time_hour=1;
  282.                                                                                            time_min=1;
  283.                                                                                                         break;               
  284.                                                                                 }       
  285.                                                                          }
  286.                                                                                        
  287.                                                 case 3://設置min
  288.                                                         OLED_Clear();
  289.                                                                         while(1)
  290.                                                                         {
  291.                                                                                 delay_ms(1);
  292.                                                                           i++;
  293.                                                                                 OLED_ShowString(16,20,"min:",24);
  294.                                                                                 if(i<66) OLED_ShowNum(80,20,calendar.min+time_min-1,2,24);
  295.                                                                                 OLED_Refresh();
  296.                                                                                 if(i<88&&i>66)
  297.                                                                                 {
  298.                                                                                        
  299.                                                                                         OLED_ShowString(80,20,"    ",24);
  300.                                                                                         OLED_Refresh();
  301.                                                                                        
  302.                                                                                 }
  303.                                                                                 if(i>88)i=0;
  304.                                                                                 key=KEY_Scan(0);
  305.                                                                                 switch(key)
  306.                                                                                 {               
  307.                                                                                         case 1:
  308.                                                                                                         time_min++;
  309.                                                                                                        
  310.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  311.                                                                                                 RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
  312.                                                                                                                                    calendar.min+time_min-1,calendar.sec);
  313.                                                                                                         RTC->CRL&=~(1<<4);           //配置更新
  314.                                                                                          time_day=1;
  315.                                                                                            time_hour=1;
  316.                                                                                            time_min=1;
  317.                                                                                                         break;               
  318.                                                                                         case 2:       
  319.                                                                                                         time_min--;                                                                                                       
  320.                                                                                                         RTC->CRL|=1<<4;           //允許配置         
  321.                                                                                                 RTC_Alarm_Set(calendar.w_year,calendar.w_month,calendar.w_date+time_day-1,calendar.hour+time_hour-1,
  322.                                                                                                                                    calendar.min+time_min-1,calendar.sec);
  323.                                                                                                 RTC->CRL&=~(1<<4);          //配置更新
  324.                                                                                          time_day=1;
  325.                                                                                            time_hour=1;
  326.                                                                                            time_min=1;
  327.                                                                                                         break;               
  328.                                                                                         case 3: goto end;               
  329.                                                                                 }
  330.                                                                         }                               
  331.                                                                
  332.                                                 default: break;                                                       
  333.                                 }
  334.                         }
  335.                         default: break;                 
  336.                         }
  337.                 }
  338. //鬧鐘設置

  339. //                RTC->CRL|=1<<4;           //允許配置         
  340. //                RTC_Alarm_Set(2020,4,3,12,25,00);
  341. //                RTC->CRL&=~(1<<4);           //配置更新
  342. //       
  343. ……………………

  344. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


三鍵可調RTC1.0.7z

121.5 KB, 下載次數: 10, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:1 發表于 2020-4-11 13:36 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久 | 成人高清视频在线观看 | 国产麻豆一区二区三区 | 99精品免费视频 | 一区二区高清在线观看 | 精品视频在线观看 | 91精品久久久久久久久中文字幕 | 日本黄色影片在线观看 | 97精品国产97久久久久久免费 | 影音av| 精品国产一区二区 | 在线婷婷 | 日本国产一区二区 | 婷婷色网 | 99久久99热这里只有精品 | 一区二区在线 | 亚洲免费在线 | 日韩精品一二三 | 亚洲精品黄 | 在线观看av网站 | 大陆一级毛片免费视频观看 | 99在线免费观看 | 国产精品av久久久久久毛片 | 亚洲 欧美 综合 | 国产精品国产 | 中文字幕视频一区二区 | 青青艹在线视频 | 中文字幕第三页 | 久久成人免费视频 | 综合久久av | 97精品超碰一区二区三区 | 一区二区中文字幕 | 国产精品中文字幕在线观看 | 羞羞网站免费观看 | 一区在线免费视频 | 日韩a v在线免费观看 | 色综合视频| 午夜视频在线观看视频 | 神马影院一区二区三区 | 久久久91| 久久久精品网 |