找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1715|回复: 3
收起左侧

基于STM32单片机感光万年历程序

[复制链接]
ID:701491 发表于 2020-3-3 08:23 | 显示全部楼层 |阅读模式
   做了一个stm32的万年历,具有温度显示,闹钟设置,可以通过感光播放音乐。
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "rtc.h"

  4. #include "oled.h"
  5. #include "bmp.h"
  6. #include "key.h"
  7. #include "adc.h"
  8. #include "ds18b20.h"

  9. u8  timetemp=0;       
  10. u8 Naozhonghour=0;
  11. u8 Naozhongminite=0;
  12. u16 MenueSlect = 0;//0正常,1、2、3、4年4位设置,5月设置,
  13.                    //6日设置, 7时设置, 8分设置, 9秒复位设置
  14.                                                                          //闹钟设置,10时设置, 11分设置, 12闹钟开关设置
  15.                                                                          //感光元件设置:13感光设置

  16. u8 SetFalg = 0; //1为设置状态
  17. u8 FirstFlag = 0;
  18. u8 NaozhongFlag = 0;//1为开状态
  19. u8 GanguangFlag = 0;//1为开状态
  20. u8 NaoxiangFlag = 0;

  21. u8 AllSetNumber = 0;
  22. //u8 Wendu = 0;
  23. short temperature = 0;

  24. u8 Bhour;
  25. u8 Bmin;
  26. u8 Bsec;                       
  27.         //公历日月年周
  28. u16 Bw_year;
  29. u8  Bw_month;
  30. u8  Bw_date;
  31. u8  Bweek;


  32. u16 Number = 1;
  33. u16 NumberBuf1 = 1;
  34. u16 NumberBuf2 = 10;

  35. u16 ActNumber = 0;
  36. u16 ActNumbertemp = 0;
  37. u16 ActNumber1[3] ;
  38. u8  ActNumberLoop = 0;
  39. u16 ActNumberBuf1;
  40. u16 ADBuf;
  41. u16 ADBuf1;
  42. u16 ADBuf2;

  43. u8  NumberBuff[3];

  44. float Xielv =1;
  45. float B =1;




  46. u8  CheckFalg = 0;//0正常模式,1设置步骤1,2设置步骤2
  47. u8  FaultFalg = 0;
  48. u8  FirstFalg = 0;
  49. u8  OKFalg = 0;

  50. void Set_All(void);


  51. void MokuaiInit(void)
  52. {
  53.         GPIO_InitTypeDef  GPIO_InitStructure;
  54.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能B端口时钟
  55.         GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_9;         
  56.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  57.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
  58.         GPIO_Init(GPIOB, &GPIO_InitStructure);          //初始化GPIOD3,6
  59.         GPIO_SetBits(GPIOB,GPIO_Pin_9);



  60.        
  61.        
  62.                 //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能B端口时钟
  63.                 //GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;         
  64.                 //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                  //
  65.                 //GPIO_Init(GPIOB, &GPIO_InitStructure);          //初始化GPIOD3,6       
  66. }



  67. void HexToAsc1(uint8_t HexData,uint8_t  *p)
  68. {
  69.     p[0] = HexData % 10 | 0x30;
  70. }


  71. //数值转换:3位HEX数(1字节)和ASC码转换
  72. void HexToAsc3(uint16_t HexData,uint8_t  *p)
  73. {
  74.     p[0] = HexData / 100 ;
  75.     p[1] = HexData % 100 / 10 ;
  76.     p[2] = HexData % 10 ;
  77. }

  78. void KeyLedHandle(void)                            //键盘和LED处理
  79. {
  80.          static u8  KeyTemp1;    //按键值临时缓存1
  81.          static u8  KeyTemp2;    //按键值临时缓存2
  82.          static u8  KeyCount;
  83.          static u8  KeyValue;
  84.                 u8 tempge =0,tempshi=0,tempbai=0,tempqian=0;
  85.           u16 temp;
  86.                                  
  87.                                

  88.        
  89.        

  90.         KeyTemp1 =KEY_Scan(0);
  91.        
  92.                        
  93.                 if(KeyTemp1 !=0)               //其它按键按下,计数为5,执行相应的按键操作
  94.                         {
  95.                                 //Music=!Music;
  96.                           if(NaoxiangFlag == 1)
  97.                         {
  98.                                   NaoxiangFlag = 0;
  99.                                         Music_OFF;
  100.                                          
  101.                          
  102.                         }
  103.                                 switch(KeyTemp1)
  104.              {
  105.                      case KEY_UP:                                //上+
  106.              LED0=!LED0;
  107.                                     if(SetFalg == 1)
  108.                                                  {
  109.                                                    AllSetNumber++;
  110.                                                          if(MenueSlect == 1)//年第一位设置
  111.                                                          {
  112.                                                                  
  113.                                                                  if(AllSetNumber >=3)
  114.                                                                 {
  115.                                                                  AllSetNumber = 1;
  116.                                                           }
  117.                                                          }
  118.                                                          else if((MenueSlect ==2)||(MenueSlect ==3)||(MenueSlect ==4)) //年第二三四位设置
  119.                                                          {
  120.                                                           if(AllSetNumber >=10)
  121.                                                                 {
  122.                                                                  AllSetNumber = 0;
  123.                                                                 }
  124.                                                          }

  125.                                                          else if(MenueSlect == 5)//月设置
  126.                                                          {
  127.                                                            if(AllSetNumber >=13)
  128.                                                                 {
  129.                                                                  AllSetNumber = 1;
  130.                                                                 }
  131.                                                          }
  132.                                                         else if(MenueSlect == 6)//日设置
  133.                                                          {
  134.                                                            if(AllSetNumber >=32)
  135.                                                                 {
  136.                                                                  AllSetNumber = 1;
  137.                                                                 }
  138.                                                          }
  139.                                                          else if(MenueSlect == 7)//时设置
  140.                                                          {
  141.                                                                  if(AllSetNumber >=24)
  142.                                                                 {
  143.                                                                  AllSetNumber = 0;
  144.                                                                 }
  145.                                                          }
  146.                                                          else if(MenueSlect == 8)//分设置
  147.                                                          {
  148.                                                                  if(AllSetNumber >=60)
  149.                                                                 {
  150.                                                                  AllSetNumber = 0;
  151.                                                                 }
  152.                                                          }
  153.                                                          else if(MenueSlect ==9 )//秒复位
  154.                                                          {
  155.                                                           AllSetNumber = 0;
  156.                                                          }
  157.                                                          else if(MenueSlect == 10)//闹钟时设置
  158.                                                          {
  159.                                                                  if(AllSetNumber >=24)
  160.                                                                 {
  161.                                                                  AllSetNumber = 0;
  162.                                                                 }
  163.                                                          }
  164.                                                          else if(MenueSlect == 11)//闹钟分设置
  165.                                                          {
  166.                                                                  if(AllSetNumber >=60)
  167.                                                                 {
  168.                                                                  AllSetNumber = 0;
  169.                                                                 }
  170.                                                          }
  171.                                                          else if(MenueSlect == 12)//闹钟开关设置
  172.                                                          {
  173.                                                                  if(NaozhongFlag == 0 )
  174.                                                                  {
  175.                                                                    NaozhongFlag = 1;//1为开状态
  176.                                                                  }
  177.                                                                  else
  178.                                                                  {
  179.                                                                   NaozhongFlag = 0;//1为开状态
  180.                                                                  }
  181.                   
  182.                                                          }
  183.                                                          else if(MenueSlect == 13)//感光元件开关设置
  184.                                                          {
  185.                  if(GanguangFlag == 0)
  186.                                                                  {
  187.                                                                    GanguangFlag = 1;//1为开状态
  188.                                                                  }       
  189.                  else
  190.                                                                  {
  191.                                                                    GanguangFlag = 0;//1为开状态
  192.                                                                  }                                                                         
  193.                                                                  

  194.                                                          }
  195.                                                          else
  196.                                                          {
  197.                                                          }
  198.                                                  }                                                         
  199.                                       
  200.                                                         break;

  201.                                 case KEY_DOWN:                                //下-
  202. LED0=!LED0;
  203.              if(SetFalg == 1)
  204.                                                  {
  205.                                                   

  206.                                                          if(MenueSlect == 1)//年第一位设置
  207.                                                          {
  208.                                                                  if(AllSetNumber ==1)
  209.                                                                 {
  210.                                                                  AllSetNumber = 2;
  211.                                                           }
  212.                                                                 else
  213.                                                          {
  214.                                                            AllSetNumber--;
  215.                                                          }
  216.                                                          }
  217.                                                         else if((MenueSlect ==2)||(MenueSlect ==3)||(MenueSlect ==4)) //年第二三四位设置
  218.                                                          {
  219.                                                           if(AllSetNumber ==0)
  220.                                                                 {
  221.                                                                  AllSetNumber = 9;
  222.                                                                 }
  223.                                                                 else
  224.                                                          {
  225.                                                            AllSetNumber--;
  226.                                                          }
  227.                                                          }

  228.                                                          else if(MenueSlect == 5)//月设置
  229.                                                          {
  230.                                                            if(AllSetNumber ==1)
  231.                                                                 {
  232.                                                                  AllSetNumber = 12;
  233.                                                                 }
  234.                                                                 else
  235.                                                          {
  236.                                                            AllSetNumber--;
  237.                                                          }
  238.                                                          }
  239.                                                         else if(MenueSlect == 6)//日设置
  240.                                                          {
  241.                                                            if(AllSetNumber ==1)
  242.                                                                 {
  243.                                                                  AllSetNumber = 31;
  244.                                                                 }
  245.                                                                 else
  246.                                                          {
  247.                                                            AllSetNumber--;
  248.                                                          }
  249.                                                          }
  250.                                                          else if(MenueSlect == 7)//时设置
  251.                                                          {
  252.                                                                  if(AllSetNumber == 0)
  253.                                                                 {
  254.                                                                  AllSetNumber = 23;
  255.                                                                 }
  256.                                                                 else
  257.                                                          {
  258.                                                            AllSetNumber--;
  259.                                                          }
  260.                                                          }
  261.                                                          else if(MenueSlect == 8)//分设置
  262.                                                          {
  263.                                                                  if(AllSetNumber ==0)
  264.                                                                 {
  265.                                                                  AllSetNumber = 59;
  266.                                                                 }
  267.                                                                 else
  268.                                                          {
  269.                                                            AllSetNumber--;
  270.                                                          }
  271.                                                          }
  272.                                                          else if(MenueSlect ==9 )//秒复位
  273.                                                          {
  274.                                                           AllSetNumber = 0;
  275.                                                          }
  276.                                                          else if(MenueSlect == 10)//闹钟时设置
  277.                                                          {
  278.                                                                  if(AllSetNumber ==0)
  279.                                                                 {
  280.                                                                  AllSetNumber = 23;
  281.                                                                 }
  282.                                                                 else
  283.                                                          {
  284.                                                            AllSetNumber--;
  285.                                                          }
  286.                                                          }
  287.                                                          else if(MenueSlect == 11)//闹钟分设置
  288.                                                          {
  289.                                                                  if(AllSetNumber ==0)
  290.                                                                 {
  291.                                                                  AllSetNumber = 59;
  292.                                                                 }
  293.                                                                 else
  294.                                                          {
  295.                                                            AllSetNumber--;
  296.                                                          }
  297.                                                          }
  298.                                                          else if(MenueSlect == 12)//闹钟开关设置
  299.                                                          {
  300.                                                                  if(NaozhongFlag == 0 )
  301.                                                                  {
  302.                                                                    NaozhongFlag = 1;//1为开状态
  303.                                                                  }
  304.                                                                  
  305.                                                                  else
  306.                                                                  {
  307.                                                                   NaozhongFlag = 0;//1为开状态
  308.                                                                  }
  309.                   
  310.                                                          }
  311.                                                          else if(MenueSlect == 13)//感光元件开关设置
  312.                                                          {
  313.                  if(GanguangFlag == 0)
  314.                                                                  {
  315.                                                                    GanguangFlag = 1;//1为开状态
  316.                                                                  }       
  317.                  else
  318.                                                                  {
  319.                                                                    GanguangFlag = 0;//1为开状态
  320.                                                                  }                                                                         
  321.                                                                  

  322.                                                          }
  323.                                                          else
  324.                                                          {
  325.                                                          }
  326.                                                  }
  327.                                
  328.                           break;
  329.                                 case KEY_LEFT:                                //左,菜单切换+
  330.               LED0=!LED0;
  331.                                      if(SetFalg == 1)
  332.                                                         {
  333.                                                                
  334.                                                          if(MenueSlect == 13)
  335.                                                          {
  336.                                                            MenueSlect = 1;
  337.                                                          }
  338.                                                          else
  339.                                                          {
  340.                                                            MenueSlect++;
  341.                                                          }
  342.                                                                  if(MenueSlect == 1)
  343.                                                                  {
  344.                                                                   AllSetNumber = Bw_year/1000;
  345.                                                                  }
  346.                                                                  else if(MenueSlect == 2)
  347.                                                                  {
  348.                                                                   AllSetNumber = (Bw_year%1000)/100;
  349.                                                                  }
  350.                                                                           else if(MenueSlect == 3)
  351.                                                                  {

  352.                                                                   AllSetNumber = ((Bw_year%1000)%100)/10;
  353.                                                                  }
  354.                                                                          else if(MenueSlect == 4)
  355.                                                                  {
  356.                                                                         AllSetNumber = ((Bw_year%1000)%100)%10;
  357.                                                                   
  358.                                                                  }
  359.                                                                  else if(MenueSlect == 5)
  360.                                                                  {
  361.                                                                   AllSetNumber = Bw_month;
  362.                                                                  }                                                                 
  363.                                                                  else if(MenueSlect == 6)
  364.                                                                  {
  365.                                                                   AllSetNumber = Bw_date;
  366.                                                                  }
  367.                                                                  else if(MenueSlect == 7)
  368.                                                                  {
  369.                                                                   AllSetNumber = Bhour;
  370.                                                                  }
  371.                                                                  else if(MenueSlect == 8)
  372.                                                                  {
  373.                                                                   AllSetNumber = Bmin;
  374.                                                                  }
  375.                                                                  else if(MenueSlect == 9)
  376.                                                                  {
  377.                                                                   AllSetNumber = Bsec;
  378.                                                                  }
  379.                                                                          else if(MenueSlect == 10)
  380.                                                                  {
  381.                                                                   AllSetNumber = Naozhonghour;
  382.                                                                  }
  383.                                                                          else if(MenueSlect == 11)
  384.                                                                  {
  385.                                                                   AllSetNumber = Naozhongminite;
  386.                                                                  }
  387.                                                                  else if(MenueSlect == 12)
  388.                                                                  {
  389.                                                                   AllSetNumber = (Bw_year%1000)/100;
  390.                                                                  }
  391.                                                                  else if(MenueSlect == 13)
  392.                                                                  {
  393.                                                                   AllSetNumber = (Bw_year%1000)/100;
  394.                                                                  }

  395.                                                                  
  396.                                                                                                 

  397.                                                        
  398.                                                          
  399.                                                         }

  400.                           break;
  401.                                 case KEY_RIGHT:                                //右,菜单切换-
  402.              LED0=!LED0;
  403.                                      if(SetFalg == 1)
  404.                                                         {
  405.                                                                 if(MenueSlect == 1)
  406.                                                          {
  407.                                                            MenueSlect = 13;  
  408.                                                          }
  409.                                                          else
  410.                                                          {
  411.                                                            MenueSlect--;
  412.                                                          }
  413.                                                                
  414.                                                                  if(MenueSlect == 1)
  415.                                                                  {
  416.                                                                   AllSetNumber = Bw_year/1000;
  417.                                                                  }
  418.                                                                  else if(MenueSlect == 2)
  419.                                                                  {
  420.                                                                   AllSetNumber = (Bw_year%1000)/100;
  421.                                                                  }
  422.                                                                           else if(MenueSlect == 3)
  423.                                                                  {

  424.                                                                   AllSetNumber = ((Bw_year%1000)%100)/10;
  425.                                                                  }
  426.                                                                          else if(MenueSlect == 4)
  427.                                                                  {
  428.                                                                         AllSetNumber = ((Bw_year%1000)%100)%10;
  429.                                                                   
  430.                                                                  }
  431.                                                                  else if(MenueSlect == 5)
  432.                                                                  {
  433.                                                                   AllSetNumber = Bw_month;
  434.                                                                  }                                                                 
  435.                                                                  else if(MenueSlect == 6)
  436.                                                                  {
  437.                                                                   AllSetNumber = Bw_date;
  438.                                                                  }
  439.                                                                  else if(MenueSlect == 7)
  440.                                                                  {
  441.                                                                   AllSetNumber = Bhour;
  442.                                                                  }
  443.                                                                  else if(MenueSlect == 8)
  444.                                                                  {
  445.                                                                   AllSetNumber = Bmin;
  446.                                                                  }
  447.                                                                  else if(MenueSlect == 9)
  448.                                                                  {
  449.                                                                   AllSetNumber = Bsec;
  450.                                                                  }
  451.                                                                          else if(MenueSlect == 10)
  452.                                                                  {
  453.                                                                   AllSetNumber = Naozhonghour;
  454.                                                                  }
  455.                                                                          else if(MenueSlect == 11)
  456.                                                                  {
  457.                                                                   AllSetNumber = Naozhongminite;
  458.                                                                  }
  459.                                                                  else if(MenueSlect == 12)
  460.                                                                  {
  461.                                                                   AllSetNumber = (Bw_year%1000)/100;
  462.                                                                  }
  463.                                                                  else if(MenueSlect == 13)
  464.                                                                  {
  465.                                                                   AllSetNumber = (Bw_year%1000)/100;
  466.                                                                  }

  467.                                                         }                                     
  468.                                
  469.                                
  470.                                
  471.                                
  472.                           break;
  473.                                 case KEY_SURE:                                //确定
  474.         LED0=!LED0;     
  475.                                     if(SetFalg ==0)//1为设置状态
  476.                                                  {
  477.                                                    SetFalg = 1;
  478.                                                          FirstFlag = 1;
  479.                                                          MenueSlect = 1;
  480.                                                          Bw_year = calendar.w_year;
  481.                                                          AllSetNumber = Bw_year/1000;
  482.                                                          
  483.                                                  }
  484.                                                  else
  485.                                                  {
  486.                                                    SetFalg = 0;
  487.                                                          MenueSlect = 0;
  488.                                                          FirstFlag = 0;
  489.                                                          Set_All();
  490.                                                  }

  491.                            break;
  492.                                 //case KEY_MENU:                                //菜单,设置ok

  493.                

  494.         //                  break;
  495.                                         default:
  496.                                         break;       
  497.                                                        

  498.             }                 

  499.                         }
  500.                

  501.        
  502. }

  503. void MainDisplay(void)
  504. {
  505.                   u8 t;
  506.        
  507.                 //OLED_ShowPicture(0,0,128,8,BMP1);
  508.                 //delay_ms(500);
  509.                 OLED_Clear();
  510.         //电(0) 子(1) 万(2) 年(3) 历(4) 时(5) 间(6) 闹(7) 钟(8) 感(9) 光(10) 状(11) 态(12) 开(13) 关(14)
  511.                

  512.        
  513.         if(DS18B20_Init())        //DS18B20初始化       
  514.         {
  515.                 OLED_ShowString(16,16,"DS18B20 Error",16);//8*16
  516.                
  517.                 //delay_ms(200);
  518.                 //OLED_Refresh();
  519.         }
  520.         else
  521.         {
  522.            OLED_ShowString(16,16,"DS18B20 OK",16);//8*16
  523.         }
  524.        
  525.           //OLED_Clear();
  526.           OLED_ShowChinese(0,1,0,16);//电
  527.                 OLED_ShowChinese(18,1,1,16);//子
  528.                 OLED_ShowChinese(36,1,2,16);//计
  529.                 OLED_ShowChinese(54,1,3,16);//万
  530.                 OLED_ShowChinese(72,1,4,16);//年               
  531.                 //OLED_ShowChinese(90,1,5,16);//历
  532.           
  533.                 OLED_Refresh();
  534.           delay_ms(60000);
  535.           delay_ms(60000);
  536.           delay_ms(60000);
  537.           OLED_Clear();
  538.        
  539.                   
  540.                 //OLED_ShowChinese(0,16,5,16);//时
  541.                 //OLED_ShowChinese(18,16,6,16);//间
  542.           OLED_ShowChinese(26,16,15,16);//℃
  543.        
  544.                 OLED_ShowChinese(0,32,7,16);//闹
  545.                 OLED_ShowChinese(18,32,8,16);//钟
  546.                 //OLED_ShowChinese(90,32,13,16);// 开
  547.                 //OLED_ShowChinese(90,32,14,16);//关
  548.                 OLED_ShowChinese(0,48,9,16);//感
  549.                 OLED_ShowChinese(18,48,10,16);//光
  550.                 OLED_ShowChinese(36,48,11,16);//状
  551.                 OLED_ShowChinese(54,48,12,16);//态       
  552.                 //OLED_ShowChinese(90,48,13,16);// 开
  553.                 //OLED_ShowChinese(90,48,14,16);//关
  554.                
  555.                
  556.                
  557. //时间现实       

  558.                 OLED_ShowString(2,0,"    -  -  ",12);//6*12
  559.                 OLED_ShowString(62,0,"Sunday   ",12);
  560.                
  561.                 OLED_ShowString(42,16,"  :  :  ",16);//8*16
  562.                
  563. //闹钟显示               
  564.                 OLED_ShowString(42,32,"  :  ",16);//8*16
  565.                
  566.                
  567.                
  568.                         OLED_ShowNum(2,0,calendar.w_year,4,12);                                                                          
  569.                         OLED_ShowNum(32,0,calendar.w_month,2,12);                                                                          
  570.                         OLED_ShowNum(50,0,calendar.w_date,2,12);       

  571.       OLED_ShowNum(8,16,temperature/10,2,16);        //显示正数部分         
  572.       //OLED_ShowNum(0,16,Wendu,2,16);                //8*16                
  573.                         OLED_ShowNum(42,16,calendar.hour,2,16);                //8*16                                                           
  574.                         OLED_ShowNum(66,16,calendar.min,2,16);                                                                          
  575.                         OLED_ShowNum(90,16,calendar.sec,2,16);
  576.                        
  577.                        
  578.                         OLED_ShowNum(42,32,Naozhonghour,2,16);                //8*16                                                           
  579.                         OLED_ShowNum(66,32,Naozhongminite,2,16);
  580.                        
  581.       OLED_ShowChar(90,32,'N',16);//关                       
  582.       OLED_ShowChar(90,48,'N',16);//关
  583.                         //OLED_ShowChar(90,32,"Y",16);//关                       
  584.       //OLED_ShowChar(90,48,"Y",16);//关
  585.       
  586.                 //OLED_ShowString(40,16,": 000",12);
  587.           //OLED_ShowNum(40,16,Number,3,16);
  588.                 //OLED_ShowString(40,32,": 000",12);
  589.                 //OLED_ShowNum(40,32,ActNumber,3,16);
  590.                 //OLED_ShowString(0,48,"AD:0000",16);
  591.                 //OLED_ShowNum(24,48,ADBuf,4,16);
  592.                    

  593.                 /*OLED_ShowChar(48,48,t,16);//显示ASCII字符          
  594.                 t++;
  595.                 if(t>'~')t=' ';
  596.                 OLED_ShowNum(103,48,t,3,16);
  597.                 OLED_Refresh();
  598.                 delay_ms(500);
  599.                 OLED_Clear();
  600.                 OLED_ShowChinese(0,0,0,16);  //16*16 中
  601.           OLED_ShowChinese(16,0,0,24); //24*24 中
  602.                 OLED_ShowChinese(24,20,0,32);//32*32 中
  603.           OLED_ShowChinese(64,0,0,64); //64*64 中
  604.                 OLED_Refresh();
  605.           delay_ms(500);
  606.           OLED_Clear();
  607.                 OLED_ShowString(0,0,"ABC",12);//6*12 “ABC”
  608.           OLED_ShowString(0,12,"ABC",16);//8*16 “ABC”
  609.                 OLED_ShowString(0,28,"ABC",24);//12*24 “ABC”
  610.           OLED_Refresh();
  611.                 delay_ms(500);
  612.                 OLED_ScrollDisplay(11,4);*/
  613.                 OLED_Refresh();
  614.                 delay_ms(500);
  615. }       







  616. void FunDataRun(void)
  617. {

  618.        
  619.                         //PBout(5)=!PBout(5);
  620.                 //}               
  621.                         if(SetFalg == 1)                       

  622.                          {
  623.                                  
  624.                          u8 tempge =0,tempshi=0,tempbai=0,tempqian=0;
  625.              u16 temp;
  626.                                  if(FirstFlag == 1)       
  627.                                  {
  628.                                     FirstFlag = 0;
  629.                                                 Bw_year = calendar.w_year;                                                 
  630.                                                 Bw_month = calendar.w_month;
  631.                                                 Bw_date = calendar.w_date;
  632.                                                 Bhour = calendar.hour;
  633.                                                 Bmin = calendar.min;
  634.                                                 Bsec = calendar.sec;
  635.                                        
  636.                                  }
  637.                                                 OLED_ShowNum(2,0,Bw_year,4,12);                                                                          
  638.                                                 OLED_ShowNum(32,0,Bw_month,2,12);                                                                          
  639.                                                 OLED_ShowNum(50,0,Bw_date,2,12);                 
  640.                                                 OLED_ShowNum(42,16,Bhour,2,16);                //8*16                                                           
  641.                                                 OLED_ShowNum(66,16,Bmin,2,16);                                                                          
  642.                                                 OLED_ShowNum(90,16,Bsec,2,16);
  643.                                                 OLED_ShowNum(42,32,Naozhonghour,2,16);                //8*16                                                           
  644.                                                 OLED_ShowNum(66,32,Naozhongminite,2,16);

  645.                                                 if(NaozhongFlag == 1)
  646.                                                 {
  647.                                                 OLED_ShowChar(90,32,'Y',16);//开
  648.                                                 }
  649.                                                 else
  650.                                                 {
  651.                                                 OLED_ShowChar(90,32,'N',16);//关                       
  652.                                                 }
  653.                                                 if(GanguangFlag == 1)
  654.                                                 {
  655.                                                         OLED_ShowChar(90,48,'Y',16);//
  656.                                                 }
  657.                                                 else
  658.                                                 {
  659.                                                         OLED_ShowChar(90,48,'N',16);//
  660.                                                 }
  661.                                  
  662.                                  
  663.                                  
  664.                                                  tempqian = Bw_year/1000;
  665.                                                 tempbai = (Bw_year%1000)/100;
  666.                                                 tempshi = ((Bw_year%1000)%100)/10;
  667.                                                 tempge = ((Bw_year%1000)%100)%10;
  668.                                  
  669.                                  if(MenueSlect == 1)//年第一位设置
  670.                                  {
  671.                                          
  672.                                         tempqian = AllSetNumber;
  673.                                         OLED_ShowNumKong(2,0,tempqian,1,12);       
  674.            
  675.                                  }
  676.                                  else if(MenueSlect == 2) //年第二三四位设置
  677.                                  {
  678.            tempbai = AllSetNumber;
  679.                                          OLED_ShowNumKong(8,0,tempbai,1,12);
  680.                                  }
  681.                                  else if(MenueSlect == 3) //年第二三四位设置
  682.                                  {
  683.            tempshi = AllSetNumber;
  684.                                          OLED_ShowNumKong(14,0,tempshi,1,12);
  685.                                  }
  686.                                  else if(MenueSlect == 4) //年第二三四位设置
  687.                                  {
  688.            tempge = AllSetNumber;
  689.                                          OLED_ShowNumKong(20,0,tempge,1,12);
  690.                                  }

  691.                                  else if(MenueSlect == 5)//月设置
  692.                                  {
  693.                                           Bw_month = AllSetNumber;
  694.                                                                           
  695.                               OLED_ShowNumKong(32,0,Bw_month,2,12);                                                                          

  696.                                  }
  697.                                 else if(MenueSlect == 6)//日设置
  698.                                  {
  699.                    Bw_date = AllSetNumber;                                                          
  700.                                                                   
  701.                               OLED_ShowNumKong(50,0,Bw_date,2,12);
  702.                                  }
  703.                                  else if(MenueSlect == 7)//时设置
  704.                                  {
  705.                                          Bhour = AllSetNumber;
  706.                                          OLED_ShowNumKong(42,16,Bhour,2,16);                //8*16                                                           
  707.        

  708.                                  }
  709.                                  else if(MenueSlect == 8)//分设置
  710.                                  {
  711.            Bmin = AllSetNumber;
  712.                                          OLED_ShowNumKong(66,16,Bmin,2,16);                                                                          
  713.                        
  714.                                  }
  715.                                  else if(MenueSlect ==9 )//秒复位
  716.                                  {
  717.                                            Bsec = AllSetNumber;
  718.                                          OLED_ShowNumKong(90,16,Bsec,2,16);
  719.                                  }
  720.                                  else if(MenueSlect == 10)//闹钟时设置
  721.                                  {
  722.           Naozhonghour = AllSetNumber;
  723.                                          
  724.                                         OLED_ShowNumKong(42,32,Naozhonghour,2,16);                //8*16
  725.                                  }
  726.                                  else if(MenueSlect == 11)//闹钟分设置
  727.                                  {
  728.           Naozhongminite = AllSetNumber;
  729.                                         OLED_ShowNumKong(66,32,Naozhongminite,2,16);
  730.                                  }
  731.                                  else if(MenueSlect == 12)//闹钟开关设置
  732.                                  {
  733.                                                 if(NaozhongFlag == 1)
  734.                                                 {
  735.                                            OLED_ShowCharKong(90,32,'Y',16);//开
  736.                                                 }
  737.                                                 else
  738.                                                 {
  739.                                                 OLED_ShowCharKong(90,32,'N',16);//关                       
  740.                                                 }

  741.                                                
  742.                                  }
  743.                                  else if(MenueSlect == 13)//感光元件开关设置
  744.                                  {
  745.                                                 if(GanguangFlag == 1)
  746.                                                 {
  747.                                                         OLED_ShowCharKong(90,48,'Y',16);//
  748.                                                 }
  749.                                                 else
  750.                                                 {
  751.                                                         OLED_ShowCharKong(90,48,'N',16);//
  752.                                                 }                                                                         
  753.                                          

  754.                                  }
  755.                                  else
  756.                                  {
  757.                                  }
  758.                                  

  759.                                  Bw_year = (tempqian*1000)+(tempbai*100)+(tempshi*10)+tempge;
  760.                                  //OLED_ShowNum(0,48,AllSetNumber,1,16);
  761.                                  //OLED_ShowNum(32,48,Bw_year,4,16);
  762.                                  //RTC_Set(Bw_year,Bw_month,Bw_date,Bhour,Bmin,Bsec);  //设置时间
  763.                      //RTC_Set(2023,3,3,3,3,3);  //设置时间
  764.                                  
  765.                          }
  766.                          else
  767.                          {
  768.                          
  769.                                                                                  //if (RTC_GetITStatus(RTC_IT_SEC) != RESET)//秒钟中断
  770.                                                         //if(SetFalg == 0)       
  771.                                                         //{                                                       
  772.                                                         //        RTC_ClearITPendingBit(RTC_IT_SEC|RTC_IT_OW);                //清闹钟中断
  773.                                                                 RTC_Get();//更新时间   
  774.                                                         //}
  775.                                                        
  776.                                                        
  777.                                                                 //if(timetemp!=calendar.sec)
  778.                                                                 //{
  779.                                                                         //timetemp=calendar.sec;
  780.                                                                         OLED_ShowNum(2,0,calendar.w_year,4,12);                                                                          
  781.                                                                         OLED_ShowNum(32,0,calendar.w_month,2,12);                                                                          
  782.                                                                         OLED_ShowNum(50,0,calendar.w_date,2,12);                 
  783.                                                                        
  784.                                                                         switch(calendar.week)
  785.                                                                         {       
  786.                                                                                 case 0:
  787.                                                                                         OLED_ShowString(62,0,"Sunday   ",12);
  788.                                                                                         break;
  789.                                                                                 case 1:
  790.                                                                                  OLED_ShowString(62,0,"Monday   ",12);
  791.                                                                                         break;
  792.                                                                                 case 2:
  793.                                                                                         OLED_ShowString(62,0,"Tuesday  ",12);
  794.                                                                                         break;
  795.                                                                                 case 3:
  796.                                                                                 OLED_ShowString(62,0,"Wednesday",12);
  797.                                                                                         break;
  798.                                                                                 case 4:
  799.                                                                                 OLED_ShowString(62,0,"Thursday ",12);
  800.                                                                                         break;
  801.                                                                                 case 5:
  802.                                                                                 OLED_ShowString(62,0,"Friday   ",12);
  803.                                                                                         break;
  804.                                                                                 case 6:
  805.                                                                                 OLED_ShowString(62,0,"Saturday ",12);
  806.                                                                                         break;  
  807.                                                                         }
  808.                                                                         OLED_ShowNum(42,16,calendar.hour,2,16);                //8*16                                                           
  809.                                                                         OLED_ShowNum(66,16,calendar.min,2,16);                                                                          
  810.                                                                         OLED_ShowNum(90,16,calendar.sec,2,16);
  811.                                                                         OLED_ShowNum(42,32,Naozhonghour,2,16);                //8*16                                                           
  812.                                                                         OLED_ShowNum(66,32,Naozhongminite,2,16);

  813.                                                                         if(NaozhongFlag == 1)
  814.                                                                         {
  815.                                                                          OLED_ShowChar(90,32,'Y',16);//开
  816.                                                                          if((calendar.hour == Naozhonghour)&&(calendar.min == Naozhongminite)&&(NaoxiangFlag == 0))
  817.                                                                          {
  818.                                                                                  //if(NaoxiangFlag == 0)
  819.                                                                                 // {
  820.                                                                                      Music_ON;
  821.                                                                                      NaoxiangFlag = 1;
  822.                                                                                  //}
  823.                                                                           
  824.                                                                          }
  825.                                                                          //else
  826.                                                                          //{
  827.                                                                          //  NaoxiangFlag = 0;
  828.                                                                          //}
  829.                                                                         }
  830.                                                                         else
  831.                                                                         {
  832.                                                                         OLED_ShowChar(90,32,'N',16);//关                       
  833.                                                                         }
  834.                                                                         if(GanguangFlag == 1)
  835.                                                                         {
  836.                                                                                 OLED_ShowChar(90,48,'Y',16);//
  837.                                                                                 if(GanGuang == 0)
  838.                                                                                 {
  839.                                                                                   Music_ON;
  840.                                                                                         LED0=!LED0;
  841.                                                                                 }
  842.                                                                                 else if(NaoxiangFlag == 0)
  843.                                                                                 {
  844.                                                                                   Music_OFF;
  845.                                                                                 }
  846.                                                                         }
  847.                                                                         else
  848.                                                                         {
  849.                                                                                 OLED_ShowChar(90,48,'N',16);//
  850.                                                                         }
  851.                          
  852.                          
  853.                          
  854.                          
  855.                          }
  856.                          
  857.                         temperature=DS18B20_Get_Temp();       
  858.                         if(temperature<0)
  859.                         {
  860.                                 OLED_ShowChar(0,16,'-',16);                        //显示负号
  861.                                 temperature=-temperature;                                        //转为正数
  862.                         }else OLED_ShowChar(0,16,' ',16);                        //去掉负号
  863.                        
  864.                         OLED_ShowNum(8,16,temperature/10,2,16);        //显示正数部分            
  865.                            //OLED_ShowNum(60+40+32,150,temperature%10,1,16);        //显示小数部分                   
  866.                
  867.        
  868.        
  869.                
  870.                
  871. }
  872. void Naozhong_Set(void)
  873. {

  874. }
  875. void Set_All(void)
  876. {
  877.     RTC_Set(Bw_year,Bw_month,Bw_date,Bhour,Bmin,Bsec);  //设置时间
  878.     Naozhong_Set();
  879.            
  880. }

  881. void FunDataShow(void)
  882. {
  883.                  OLED_ShowNum(40,16,Number,3,16);
  884.                  OLED_ShowNum(40,32,ActNumber,3,16);
  885.                  OLED_ShowNum(24,48,ADBuf,4,16);

  886. }



  887. int main(void)
  888. {
  889.        
  890.         u8 t;
  891.   
  892.         delay_init();
  893.         NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  894.         //usmart_dev.init(SystemCoreClock/1000000);        //初始化USMART
  895.         RTC_Init();
  896.        
  897.         //Adc_Init();
  898.         OLED_Init();
  899.         KEY_Init();
  900.         MokuaiInit();
  901.         OLED_ColorTurn(0);//0正常显示,1 反色显示
  902.   OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
  903.        
  904. //        OLED_DrawPoint(0,0);
  905. //        OLED_DrawLine(20,0,50,60);
  906. //        OLED_DrawCircle(64,32,20);
  907.         OLED_Refresh();
  908.         t=' ';
  909.         LED_ON;
  910.         //OLED_ShowString(72,0,"Sunday   ",12);
  911.                 //OLED_Refresh();
  912.        
  913.         MainDisplay();
  914.         while(1)
  915.         {
  916.                 /*if(KEY_Scan(1) == KEY_UP)
  917.                 {
  918.                 OLED_ShowString(96,0,"HHH",16);//6*12
  919.                        
  920.                 }
  921.                 else
  922.                 {
  923.                 OLED_ShowString(96,0,"RRR",16);//6*12
  924.                 }

  925.                 OLED_ShowNum(0,16,KEY_Scan(1),1,16);
  926.                 OLED_ShowNum(16,16,KEY_Scan(1),1,16);
  927.                 OLED_ShowNum(32,16,KEY_Scan(1),1,16);
  928.                 OLED_ShowNum(48,16,KEY_Scan(1),1,16);
  929.                 OLED_ShowNum(64,16,KEY_Scan(1),1,16);
  930.                 OLED_ShowNum(80,16,KEY_Scan(1),1,16);*/
  931.                 /*if(FaultFalg == 0)
  932.                 {
  933.                   KeyLedHandle();
  934.                 }*/
  935.                 KeyLedHandle();
  936.                 //LinData();
  937.                 FunDataRun();
  938.                 //FunDataShow();
  939.                 OLED_Refresh();

  940.                
  941.                
  942.         }
  943. }
复制代码


软件.7z

223.6 KB, 下载次数: 10, 下载积分: 黑币 -5

软件源码

回复

使用道具 举报

ID:1 发表于 2020-3-4 18:52 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:780228 发表于 2020-6-20 18:38 | 显示全部楼层
有没有proteus仿真
回复

使用道具 举报

ID:779799 发表于 2020-6-22 16:56 | 显示全部楼层
感光用的什么传感器?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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