wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

紅外按鍵可調遙控萬年歷單片機課程設計 帶仿真 源碼 已做出實物

[復制鏈接]
跳轉到指定樓層
樓主
給大家分享一個單片機課程設計,已經調試成功而且做出實物了如下圖
紅外遙控萬年歷的實物圖:

     設計要求:
      1 具備在液晶上顯示年、月、日、星期、時、分、秒的功能;
   2 具備年、月、日、時、分、秒校準功能(星期可以自動調整,用函數算出來)        
   3 具有與即時時間同步的功能紅外按鍵調時;
   4 具有顯示溫度的功能,可設置鬧鐘;

紅外遙控萬年歷課程設計proteus仿真圖(51hei附件中可下載proteus仿真工程文件):


課程設計ppt文檔:


¤難度系數:100

¤設計要求:

用LCD1602顯示,紅外遙控器輸入,揚聲器報警,DS18B20測量溫度,DS1302計時

設計程序實現如下功能

   - 實時顯示當前日期時間溫度信息

   - 用遙控器設置日期時間和鬧鐘

¤需要器件:

51hei單片機開發板

LCD1602,紅外遙控器,DS18B20

完成硬件設計,焊接,調試
編寫軟件,完成題目要求的功能
實物演示,答辯驗收
完成設計報告
周一:12講解題目,34查閱資料,56定題并給出設計方案,元件清單。
周二:上午檢查硬件電路,領取元器件,下午完成硬件電路制作。
周三:程序設計,調試。
周四:程序設計,調試。
周五:上午完成設計報告,下午提交作品和設計報告。(實物、照片、錄像)

萬年歷的單片機源程序:
  1. /*
  2. *************************************************************************************************************
  3. *                                                                                                                                                                        clock.c
  4. * 說                明:時鐘
  5. * 作    者:Jonelec
  6. * 首發:51黑電子論壇
  7. *                 修改者:                                修改內容:                                修改日期:                               
  8. *           Jonelec       第一版          2017-04-20
  9. *                       Copyright(c) 2015-2025 skytech.org Inc.
  10. *************************************************************************************************************
  11. */
  12. #include "clock.h"
  13. #include "display.h"

  14. /* 時鐘計時閃爍設置 */
  15. bit FlashTimeFlag = 0;           /*閃爍冒號*/
  16. #define FlashTimeTMR_ID   0      /*冒號閃爍定時器ID*/
  17. #define FlashTimeTIME     1000   /*冒號閃爍定時時間*/
  18. /* 切換界面參數設置*/
  19. bit SwitchDisplayFlag = 0;
  20. #define SwitchDispTMR_ID  1     /*切換顯示方式定時器ID*/
  21. #define SwitchDispTIME    3000  /*切換顯示方式定時時間*/

  22. extern float idata CurTemp; /*獲取溫度值,3s采集一次*/

  23. uint8_t idata DispSetIndex = 0; /*光標索引*/
  24. uint8_t idata AlarmSetIndex = 0;

  25. AlarmSetInitTypeDef RingTime,SetRing;
  26. RealTimeInitTypeDef CurTime,SetTime;

  27. void DispNormalClock(void);

  28. /*
  29. *************************************************************************************************************
  30. *                                  main()
  31. *函數功能:主函數,執行程序入口
  32. *函數參數:無
  33. *返 回 值:無
  34. *************************************************************************************************************
  35. */
  36. int main(void)
  37. {       
  38.         bsp_Init();
  39.           RingTime = SetRing;
  40.         while(1)
  41.         {
  42.                 DispNormalClock();
  43.         }
  44. }
  45. /*
  46. *************************************************************************************************************
  47. *                                  RefreshTime()
  48. *函數功能:時間顯示刷新
  49. *函數參數:_ucFlag 【為0時正常顯示時間,為1時顯示鬧鈴時間,不影響日期溫度等顯示】
  50. *返 回 值:無
  51. *************************************************************************************************************
  52. */
  53. void RefreshTime(uint8_t _ucFlag)
  54. {       
  55.         if(_ucFlag != 1) /*正常顯示時間*/
  56.         {
  57.                 bsp_GetTime(&CurTime);
  58.        
  59.                 if(bsp_CheckTimer(FlashTimeTMR_ID))
  60.                 {
  61.                         FlashTimeFlag = !FlashTimeFlag;  /*冒號閃爍*/
  62.                 }
  63.                 Lcd1602_DispNum(1,0,CurTime.Hour>>4);
  64.                 Lcd1602_DispNum(1,1,CurTime.Hour&0xF);
  65.                 Lcd1602_DispNum(1,3,CurTime.Minute>>4);
  66.                 Lcd1602_DispNum(1,4,CurTime.Minute&0xF);
  67.                 Lcd1602_DispNum(1,6,CurTime.Second>>4);
  68.                 Lcd1602_DispNum(1,7,CurTime.Second&0xF);
  69.                
  70.                 Lcd1602_DispStr(1,8,"  ");
  71.                 if(FlashTimeFlag)
  72.                 {
  73.                         Lcd1602_DispChar(1,2,':');
  74.                         Lcd1602_DispChar(1,5,':');
  75.                 }
  76.                 else
  77.                 {
  78.                         Lcd1602_DispChar(1,2,' ');
  79.                         Lcd1602_DispChar(1,5,' ');
  80.                 }
  81.         }
  82.         else  /*顯示鬧鈴時間*/
  83.         {
  84.                 if(RingTime.OpenFlag != 1)
  85.                 {
  86.                         Lcd1602_DispStr(1,0,"OFF");
  87.                 }
  88.                 else
  89.                 {
  90.                         Lcd1602_DispStr(1,0,"ON ");
  91.                 }
  92.                 Lcd1602_DispChar(1,3,' ');
  93.                 Lcd1602_DispNum(1,4,RingTime.Hour>>4);
  94.                 Lcd1602_DispNum(1,5,RingTime.Hour&0xF);
  95.                 Lcd1602_DispChar(1,6,':');
  96.                 Lcd1602_DispNum(1,7,RingTime.Minute>>4);
  97.                 Lcd1602_DispNum(1,8,RingTime.Minute&0xF);
  98.                 Lcd1602_DispChar(1,9,' ');
  99.         }
  100. }
  101. /*
  102. *************************************************************************************************************
  103. *                                  RefreshDate()
  104. *函數功能:日期顯示刷新
  105. *函數參數:_ucFlag 【為0時如果日期有變化則會刷新,為1時則立即刷新】
  106. *返 回 值:無
  107. *************************************************************************************************************
  108. */
  109. void RefreshDate(uint8_t _ucFlag)
  110. {
  111.         uint8_t pdata week;
  112.         static uint8_t day_backup = 0;
  113.        
  114.         week = bsp_CulateDate(CurTime); /*計算星期*/
  115.        
  116.         if(day_backup != CurTime.Day || _ucFlag != 0)
  117.         {
  118.                 Lcd1602_DispNum(0,0,CurTime.YearH>>4);
  119.                 Lcd1602_DispNum(0,1,CurTime.YearH&0xF);
  120.                 Lcd1602_DispNum(0,2,CurTime.YearL>>4);
  121.                 Lcd1602_DispNum(0,3,CurTime.YearL&0xF);
  122.                 Lcd1602_DispChar(0,4,'-');
  123.                 Lcd1602_DispNum(0,5,CurTime.Month>>4);
  124.                 Lcd1602_DispNum(0,6,CurTime.Month&0xF);
  125.                 Lcd1602_DispChar(0,7,'-');
  126.                 Lcd1602_DispNum(0,8,CurTime.Day>>4);
  127.                 Lcd1602_DispNum(0,9,CurTime.Day&0xF);
  128.                        
  129.                 Lcd1602_DispStr(0,12,"W:");
  130.                 Lcd1602_DispNum(0,14,week>>4);
  131.                 Lcd1602_DispNum(0,15,week&0xF);
  132.                 day_backup = CurTime.Day;
  133.         }
  134. }
  135. /*
  136. *************************************************************************************************************
  137. *                                  RefreshTemp()
  138. *函數功能:溫度顯示刷新
  139. *函數參數:_ucFlag 【為0時如果溫度有變化則會刷新,為1時則立即刷新】
  140. *返 回 值:無
  141. *************************************************************************************************************
  142. */
  143. void RefreshTemp(uint8_t _ucFlag)
  144. {
  145.         int16_t pdata temp;
  146.         static int16_t tmp_backup = 0;
  147.        
  148.         temp = CurTemp*10;
  149.         temp >>= 4; /*保留整數部分*/
  150.        
  151.         if((tmp_backup != temp) || (_ucFlag != 0))
  152.         {
  153.                 Lcd1602_DispStr(1,10,"T:");
  154.                 if(temp < 0)
  155.                 {
  156.                         Lcd1602_DispChar(1,12,'-');
  157.                 }
  158.                 else
  159.                 {
  160.                         Lcd1602_DispChar(1,12,'+');
  161.                 }
  162.                 Lcd1602_DispNum(1,13,temp/10);
  163.                 Lcd1602_DispNum(1,14,temp%10);
  164.                 Lcd1602_WriteGram();
  165.                 Lcd1602_DispChar(1,15,0x00);
  166.                 tmp_backup = temp;
  167.         }
  168. }
  169. /*
  170. *************************************************************************************************************
  171. *                                  DispNormalClock()
  172. *函數功能:正常顯示時鐘
  173. *函數參數:無
  174. *返 回 值:無
  175. *************************************************************************************************************
  176. */
  177. void DispNormalClock(void)
  178. {       
  179.         uint8_t  ucKeyCode;
  180.                                                   
  181.         Lcd1602_ClearScreen();     /*清屏*/
  182.         Lcd1602_OpenCursor(0);     /*關閉光標閃爍*/
  183.         RefreshDate(1);            /*立即更新日期和溫度*/
  184.         RefreshTemp(1);
  185.         bsp_StartAutoTimer(FlashTimeTMR_ID,FlashTimeTIME);  /*秒閃爍定時器*/
  186.         bsp_StartAutoTimer(SwitchDispTMR_ID,SwitchDispTIME);/*切換顯示定時器*/
  187.         while(1)
  188.         {
  189.                 ucKeyCode = bsp_GetIRKey();
  190.                
  191.                 if(bsp_CheckTimer(SwitchDispTMR_ID))
  192.           {
  193.                   SwitchDisplayFlag = !SwitchDisplayFlag;
  194.           }
  195.                  RefreshTime(SwitchDisplayFlag);/*時間顯示,即刻刷新,每秒更新*/
  196.                  RefreshDate(0);/*年份及日期顯示,只有當日期變化的時候才會刷新*/
  197.                  RefreshTemp(0);/*溫度顯示,只有當溫度變化的時候才會刷新*/
  198.                
  199.                 if(ucKeyCode != IR_KEY_NONE)
  200.                 {
  201.                         switch(ucKeyCode)
  202.                         {        case IR_KEY_POWER:
  203.                              {
  204.                                         RingTime.OpenFlag = !RingTime.OpenFlag;
  205.                                 }break;
  206.                                 case IR_KEY_MENU:
  207.                                 {
  208.                                         bsp_StopTimer(SwitchDispTMR_ID);
  209.                                         bsp_StopTimer(FlashTimeTMR_ID);
  210.                                         LCD_ChangeMenu();
  211.                                 }break;
  212.                                 default :break;
  213.                         }                       
  214.                 }
  215.         }
  216. }
  217. /*
  218. *************************************************************************************************************
  219. *                                  ShiftRightCursor()
  220. *函數功能:光標索引右移
  221. *函數參數:_ucFlag : 0【設置鬧鐘】 1【設置時鐘】
  222. *返 回 值:無
  223. *************************************************************************************************************
  224. */
  225. void ShiftRightCursor(uint8_t _ucFlag)
  226. {
  227.         if(_ucFlag != 0) //設置時鐘
  228.         {
  229.                 switch(DispSetIndex)
  230.                 {
  231.                         case 0: DispSetIndex = 1;Lcd1602_SetPos(0,1);break;
  232.                         case 1: DispSetIndex = 2;Lcd1602_SetPos(0,2);break;
  233.                         case 2: DispSetIndex = 3;Lcd1602_SetPos(0,3);break;
  234.                         case 3: DispSetIndex = 4;Lcd1602_SetPos(0,5);break;
  235.                         case 4: DispSetIndex = 5;Lcd1602_SetPos(0,6);break;
  236.                         case 5: DispSetIndex = 6;Lcd1602_SetPos(0,8);break;
  237.                         case 6: DispSetIndex = 7;Lcd1602_SetPos(0,9);break;
  238.                         case 7: DispSetIndex = 8;Lcd1602_SetPos(1,0);break;
  239.                     case 8:  DispSetIndex = 9; Lcd1602_SetPos(1,1);break;
  240.                         case 9:  DispSetIndex = 10;Lcd1602_SetPos(1,3);break;
  241.                         case 10: DispSetIndex = 11;Lcd1602_SetPos(1,4);break;
  242.                         case 11: DispSetIndex = 12;Lcd1602_SetPos(1,6);break;
  243.                         case 12: DispSetIndex = 13;Lcd1602_SetPos(1,7);break;
  244.                         default :DispSetIndex = 0;Lcd1602_SetPos(0,0);break;
  245.                 }
  246.         }
  247.         else  /*設置鬧鐘*/
  248.         {
  249.                 switch(AlarmSetIndex)
  250.                 {
  251.                         case 0:AlarmSetIndex = 1;Lcd1602_SetPos(1,1);break;
  252.                         case 1:AlarmSetIndex = 2;Lcd1602_SetPos(1,3);break;
  253.                         case 2:AlarmSetIndex = 3;Lcd1602_SetPos(1,4);break;
  254.                         case 3:AlarmSetIndex = 4;Lcd1602_SetPos(1,10);break;
  255.                         default :AlarmSetIndex = 0;Lcd1602_SetPos(1,0);break;
  256.                 }
  257.         }
  258. }
  259. /*
  260. *************************************************************************************************************
  261. *                                  ShiftLeftCursor()
  262. *函數功能:光標索引左移
  263. *函數參數:_ucFlag : 0【設置鬧鐘】 1【設置時鐘】
  264. *返 回 值:無
  265. *************************************************************************************************************
  266. */
  267. void ShiftLeftCursor(uint8_t _ucFlag)
  268. {
  269.         if(_ucFlag != 0) //設置時鐘
  270.         {
  271.                 switch(DispSetIndex)
  272.                 {
  273.                         case 0: DispSetIndex = 13;Lcd1602_SetPos(1,7);break;
  274.                        
  275.                         case 1: DispSetIndex = 0;Lcd1602_SetPos(0,0);break;
  276.                         case 2: DispSetIndex = 1;Lcd1602_SetPos(0,1);break;
  277.                         case 3: DispSetIndex = 2;Lcd1602_SetPos(0,2);break;
  278.                         case 4: DispSetIndex = 3;Lcd1602_SetPos(0,3);break;
  279.                        
  280.                         case 5: DispSetIndex = 4;Lcd1602_SetPos(0,5);break;
  281.                         case 6: DispSetIndex = 5;Lcd1602_SetPos(0,6);break;
  282.                        
  283.                         case 7: DispSetIndex = 6;Lcd1602_SetPos(0,8);break;
  284.                     case 8: DispSetIndex = 7;Lcd1602_SetPos(0,9);break;
  285.                        
  286.                         case 9:  DispSetIndex = 8;Lcd1602_SetPos(1,0);break;
  287.                         case 10: DispSetIndex = 9;Lcd1602_SetPos(1,1);break;
  288.                        
  289.                         case 11: DispSetIndex = 10;Lcd1602_SetPos(1,3);break;
  290.                         case 12: DispSetIndex = 11;Lcd1602_SetPos(1,4);break;
  291.                         default :DispSetIndex = 12;Lcd1602_SetPos(1,6);break;
  292.                 }
  293.         }
  294.         else
  295.         {
  296.                 switch(AlarmSetIndex)
  297.                 {
  298.                         case 0:AlarmSetIndex = 4;Lcd1602_SetPos(1,10);break;
  299.                         case 1:AlarmSetIndex = 0;Lcd1602_SetPos(1,0);break;
  300.                         case 2:AlarmSetIndex = 1;Lcd1602_SetPos(1,1);break;
  301.                         case 3:AlarmSetIndex = 2;Lcd1602_SetPos(1,3);break;
  302.                         default :AlarmSetIndex = 3;Lcd1602_SetPos(1,4);break;
  303.                 }
  304.         }
  305. }
  306. /*
  307. *************************************************************************************************************
  308. *                                  InputSetNumber()
  309. *函數功能:將輸入數字進行判斷賦值
  310. *函數參數:_ucFlag : 0【設置鬧鐘】 1【設置時鐘】
  311. *返 回 值:無
  312. *************************************************************************************************************
  313. */
  314. void InputSetNumber(uint8_t _ucFlag,uint8_t _ucNum)
  315. {
  316.         if(_ucFlag != 0)
  317.         {
  318.                 switch(DispSetIndex)
  319.                 {
  320.                         case 0: /*設置年份的最高位*/
  321.                         {
  322.                                 SetTime.YearH = (SetTime.YearH&0x0F)|(_ucNum<<4);
  323.                                 Lcd1602_DispNum(0,0,_ucNum);
  324.                         }break;
  325.                         case 1:
  326.                         {
  327.                                 SetTime.YearH = (SetTime.YearH&0xF0)|_ucNum; /*年份第三位數字*/
  328.                                 Lcd1602_DispNum(0,1,_ucNum);
  329.                         }break;
  330.                         case 2:
  331.                         {
  332.                                 SetTime.YearL = (SetTime.YearL&0x0F)|(_ucNum<<4); /*年份第二位數字*/
  333.                                 Lcd1602_DispNum(0,2,_ucNum);
  334.                         }break;
  335.                         case 3:
  336.                         {
  337.                                 SetTime.YearL = (SetTime.YearL&0xF0)|_ucNum;     /*年份第一位數字*/
  338.                                 Lcd1602_DispNum(0,3,_ucNum);
  339.                         }break;
  340.                         case 4:
  341.                         {       
  342.                                 if(_ucNum > 1)
  343.                                 {
  344.                                         Lcd1602_DispChar(0,5,'E');                    /*月份輸入有誤*/
  345.                                 }       
  346.                                 else
  347.                                 {
  348.                                         SetTime.Month = (SetTime.Month&0x0F)|(_ucNum<<4); /*設置月份*/
  349.                                         Lcd1602_DispNum(0,5,_ucNum);
  350.                                 }
  351.                                        
  352.                         }break;
  353.                         case 5:
  354.                         {
  355.                                 if((SetTime.Month>>4) == 1)
  356.                                 {
  357.                                         if(_ucNum > 2)
  358.                                         {
  359.                                                 Lcd1602_DispChar(0,6,'E');
  360.                                         }
  361.                                         else
  362.                                         {
  363.                                                 SetTime.Month = (SetTime.Month&0xF0)|_ucNum;
  364.                                     Lcd1602_DispNum(0,6,_ucNum);
  365.                                         }
  366.                                 }
  367.                                 else
  368.                                 {
  369.                                         SetTime.Month = (SetTime.Month&0xF0)|_ucNum;
  370.                                   Lcd1602_DispNum(0,6,_ucNum);
  371.                                 }
  372.                         }
  373.                         case 6:  /*設置 天數*/         
  374.                         {
  375.                                 if(_ucNum > 3)
  376.                                 {
  377.                                         Lcd1602_DispChar(0,8,'E');
  378.                                 }
  379.                                 else
  380.                                 {
  381.                                         SetTime.Day   = (SetTime.Day&0x0F)|(_ucNum<<4);
  382.                                         Lcd1602_DispNum(0,8,_ucNum);
  383.                                 }
  384.                         }break;
  385.                         case 7:
  386.                         {
  387.                                 if((SetTime.Day>>4)==3)  /*判斷是否為3,最多只有31天*/
  388.                                 {
  389.                                         if(_ucNum > 1)
  390.                                         {
  391.                                                 Lcd1602_DispChar(0,9,'E');
  392.                                         }
  393.                                         else
  394.                                         {
  395.                                                 SetTime.Day = (SetTime.Day&0xF0)|_ucNum;
  396.                                                 Lcd1602_DispNum(0,9,_ucNum);
  397.                                         }
  398.                                 }
  399.                                 else
  400.                                 {
  401.                                         SetTime.Day = (SetTime.Day&0xF0)|_ucNum;
  402.                                         Lcd1602_DispNum(0,9,_ucNum);
  403.                                 }
  404.                         }break;
  405.                         case 8:  /*設置小時*/
  406.                         {
  407.                                 if(_ucNum > 2)
  408.                                 {
  409.                                         Lcd1602_DispChar(1,0,'E');
  410.                                 }
  411.                                 else
  412.                                 {
  413.                                         SetTime.Hour = (SetTime.Hour&0x0F)|(_ucNum<<4);
  414.                                         Lcd1602_DispNum(1,0,_ucNum);
  415.                                 }
  416.                         }break;
  417.                         case 9:
  418.                         {
  419.                                 if((SetTime.Hour>>4) == 2)
  420.                                 {
  421.                                         if(_ucNum > 3)
  422.                                         {
  423.                                                 Lcd1602_DispChar(1,1,'E');
  424.                                         }
  425.                                         else
  426.                                         {
  427.                                                 SetTime.Hour = (SetTime.Hour&0xF0)|_ucNum;
  428.                                     Lcd1602_DispNum(1,1,_ucNum);
  429.                                         }
  430.                                 }
  431.                                 else
  432.                                 {
  433.                                         SetTime.Hour = (SetTime.Hour&0xF0)|_ucNum;
  434.                                   Lcd1602_DispNum(1,1,_ucNum);
  435.                                 }
  436.                         }break;
  437.                         case 10: /*設置分鐘*/
  438.                         {
  439.                                 if(_ucNum > 5)
  440.                                 {
  441.                                         Lcd1602_DispChar(1,3,'E');
  442.                                 }
  443.                                 else
  444.                                 {
  445.                                         SetTime.Minute = (SetTime.Minute&0x0F)|(_ucNum<<4);
  446.                                         Lcd1602_DispNum(1,3,_ucNum);
  447.                                 }
  448.                         }break;
  449.                         case 11:
  450.                         {
  451.                                 SetTime.Minute = (SetTime.Minute&0xF0)|_ucNum;
  452.                                 Lcd1602_DispNum(1,4,_ucNum);
  453.                         }break;
  454.                         case 12: /*設置秒鐘*/
  455.                         {
  456.                                 if(_ucNum > 5)
  457.                                 {
  458.                                         Lcd1602_DispChar(1,6,'E');
  459.                                 }
  460.                                 else
  461.                                 {
  462.                                         SetTime.Second = (SetTime.Second&0x0F)|(_ucNum<<4);
  463.                                         Lcd1602_DispNum(1,6,_ucNum);
  464.                                 }
  465.                         }break;
  466.                         default :
  467.                         {
  468.                                 SetTime.Second = (SetTime.Second&0xF0)|_ucNum;
  469.                                 Lcd1602_DispNum(1,7,_ucNum);
  470.                         }break;
  471.                 }
  472.                 ShiftRightCursor(1);
  473.         }       
  474.   else  /*設置鬧鐘*/
  475.         {
  476.                 switch(AlarmSetIndex)
  477.                 {
  478.                         case 0:
  479.                         {
  480.                                 if(_ucNum > 2)
  481.                                 {
  482.                                         Lcd1602_DispChar(1,0,'E');
  483.                                 }
  484.                                 else
  485.                                 {
  486.                                         SetRing.Hour = (SetRing.Hour&0x0F)|(_ucNum<<4);
  487.                                         Lcd1602_DispNum(1,0,_ucNum);
  488.                                 }
  489.                         }break;
  490.                         case 1:
  491.                         {
  492.                                 if((SetRing.Hour>>4) == 2)
  493.                                 {
  494.                                         if(_ucNum >3)
  495.                                         {
  496.                                                 Lcd1602_DispChar(1,1,'E');
  497.                                         }
  498.                                         else
  499.                                         {
  500.                                                 SetRing.Hour = (SetRing.Hour&0xF0)|_ucNum;
  501.                                                 Lcd1602_DispNum(1,1,_ucNum);
  502.                                         }
  503.                                 }
  504.                                 else
  505.                                 {
  506.                                         SetRing.Hour = (SetRing.Hour&0xF0)|_ucNum;
  507.                                         Lcd1602_DispNum(1,1,_ucNum);
  508.                                 }       
  509.                         }break;
  510.                         case 2:
  511.                         {
  512.                                 if(_ucNum > 5)
  513.                                 {
  514.                                         Lcd1602_DispChar(1,3,'E');
  515.                                 }
  516.                                 else
  517.                                 {
  518.                                         SetRing.Minute = (SetRing.Minute&0x0F)|(_ucNum<<4);
  519.                                         Lcd1602_DispNum(1,3,_ucNum);
  520.                                 }
  521.                         }break;
  522.                         case 3:
  523.                         {
  524.                                 SetRing.Minute = (SetRing.Minute&0xF0)|_ucNum;
  525.                                 Lcd1602_DispNum(1,4,_ucNum);
  526.                         }break;
  527.                         default :
  528.                         {
  529.                                 if(_ucNum == IR_KEY_POWER) /*按下開關按鍵*/
  530.                                 {
  531.                                         SetRing.OpenFlag = !SetRing.OpenFlag;
  532.                                        
  533.                                         if(SetRing.OpenFlag != 0) /*開啟鬧鐘*/
  534.                                                 Lcd1602_DispStr(1,10,"ON ");
  535.                                         else
  536.                                                 Lcd1602_DispStr(1,10,"OFF");
  537.                                 }
  538.                         }break;
  539.                 }
  540.                 ShiftRightCursor(0); /*光標自加*/
  541.         }               
  542. }
  543. /*
  544. *************************************************************************************************************
  545. *                                  DisplaySetTime()
  546. *函數功能:將當前的時間加載到設置菜單當中
  547. *函數參數:無
  548. *返 回 值:無
  549. *************************************************************************************************************
  550. */
  551. void DisplaySetTime(void)
  552. {
  553.         bsp_GetTime(&CurTime);
  554.        
  555.         SetTime = CurTime ;
  556.        
  557.         Lcd1602_DispNum(1,0,CurTime.Hour>>4);
  558.         Lcd1602_DispNum(1,1,CurTime.Hour&0xF);
  559.         Lcd1602_DispNum(1,3,CurTime.Minute>>4);
  560.         Lcd1602_DispNum(1,4,CurTime.Minute&0xF);
  561.         Lcd1602_DispNum(1,6,CurTime.Second>>4);
  562.         Lcd1602_DispNum(1,7,CurTime.Second&0xF);
  563.         Lcd1602_DispChar(1,2,':');
  564.         Lcd1602_DispChar(1,5,':');
  565.        
  566.         Lcd1602_DispNum(0,0,CurTime.YearH>>4);
  567.         Lcd1602_DispNum(0,1,CurTime.YearH&0xF);
  568.         Lcd1602_DispNum(0,2,CurTime.YearL>>4);
  569.         Lcd1602_DispNum(0,3,CurTime.YearL&0xF);
  570.         Lcd1602_DispChar(0,4,'-');
  571.         Lcd1602_DispNum(0,5,CurTime.Month>>4);
  572.         Lcd1602_DispNum(0,6,CurTime.Month&0xF);
  573.         Lcd1602_DispChar(0,7,'-');
  574.         Lcd1602_DispNum(0,8,CurTime.Day>>4);
  575.         Lcd1602_DispNum(0,9,CurTime.Day&0xF);
  576. }
  577. /*
  578. *************************************************************************************************************
  579. *                                  SetClockTime()
  580. *函數功能:設置時間
  581. *函數參數:無
  582. *返 回 值:無
  583. *************************************************************************************************************
  584. */
  585. void SetClockTime(void)
  586. {
  587.         uint8_t pdata ucKeyCode;
  588.        
  589.         Lcd1602_ClearScreen();
  590.        
  591.   DisplaySetTime();       
  592.        
  593.         Lcd1602_SetPos(0,0);
  594.         Lcd1602_OpenCursor(1);
  595.                
  596.         while(1)
  597.         {
  598.                 ucKeyCode = bsp_GetIRKey();
  599.                
  600.                 if(ucKeyCode != IR_KEY_NONE)
  601.                 {
  602.                         switch(ucKeyCode)
  603.                         {
  604.                                 case IR_KEY_LEFT : ShiftLeftCursor(1);break;
  605.                                 case IR_KEY_RIGHT: ShiftRightCursor(1);break;
  606.                                 case IR_KEY_0:     InputSetNumber(1,0);break;
  607.                                 case IR_KEY_1:     InputSetNumber(1,1);break;
  608.                                 case IR_KEY_2:     InputSetNumber(1,2);break;
  609.                                 case IR_KEY_3:     InputSetNumber(1,3);break;
  610.                                 case IR_KEY_4:     InputSetNumber(1,4);break;
  611.                                 case IR_KEY_5:     InputSetNumber(1,5);break;
  612.                                 case IR_KEY_6:     InputSetNumber(1,6);break;
  613.                                 case IR_KEY_7:     InputSetNumber(1,7);break;
  614.                                 case IR_KEY_8:     InputSetNumber(1,8);break;
  615.                                 case IR_KEY_9:     InputSetNumber(1,9);break;
  616.                                 case IR_KEY_RETURN :
  617.                                 {
  618.                                         DispSetIndex = 0;
  619.                                         LCD_ChangeMenu();
  620.                                 }break;
  621.                                 case IR_KEY_OK  :
  622.                                 {
  623.                                         CurTime = SetTime;
  624.                                         bsp_SetTime(&CurTime);
  625.                                         DispNormalClock();
  626.                                 }break;
  627.                                 default : break;
  628.                         }
  629.                 }
  630.         }
  631. }
  632. /*
  633. *************************************************************************************************************
  634. *                                  SetClockTime()
  635. *函數功能:設置鬧鐘


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



下載:
基于單片機的多功能遙控萬年歷設計.rar (2.54 MB, 下載次數: 51)

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
欧美mv日韩mv国产| 中文字幕在线视频播放| 男人插女人视频在线观看| 情侣黄网站免费看| 精品无码国产一区二区三区51安| 国产极品美女在线| 中文字幕在线观看第二页| 先锋影视中文字幕| 69日本xxxxxxxxx49| youjizz在线播放| 亚洲免费看片| 激情视频一区| 自拍视频在线观看一区二区| 欧美高清www午色夜在线视频| 久久久精品视频成人| 99精品99久久久久久宅男| h无码动漫在线观看| 中文人妻一区二区三区| 免费黄色片视频| 色先锋资源在线播放av| 日本在线观看高清完整版| 老司机在线精品视频| 国产精品分类| 最新欧美精品一区二区三区| 日韩精品一区在线观看| 日产日韩在线亚洲欧美| 综合电影一区二区三区| 一区二区三区视频免费| 91久久精品国产91久久| 性欧美videossex精品| 九九九久久久久| 无码国产色欲xxxx视频| 在线国产日本| **爰片久久毛片| 丁香婷婷综合网| 日韩成人av在线资源| 精品123区| 亚洲国产高清一区二区三区| 国产精品热久久久久夜色精品三区| 欧美少妇性性性| 日韩免费在线播放| 成人亚洲视频在线观看| 亚洲精品毛片一区二区三区| 精精国产xxxx视频在线动漫| 高清日韩中文字幕| 日韩一区在线看| 久久久久九九九九| 性生生活大片免费看视频| 蜜桃av中文字幕| 最新av在线播放| 久久久久久色| 亚洲电影中文字幕| 一区二区三区我不卡| 草视频在线观看| 可骚可骚的黄视频网站| 精品国产亚洲一区二区在线观看 | 国产精品中出一区二区三区| 老司机精品免费视频| 国产毛片视频| 欧美在线看片| 亚洲国产精品va在线看黑人动漫| 宅男在线精品国产免费观看| 国产一级黄色av| 好看的av网站| 欧美日韩123| 亚洲成人av在线电影| 国产日韩av在线播放| 中国1级黄色片| 偷拍25位美女撒尿视频在线观看| 亚洲乱码在线| 777色狠狠一区二区三区| 美女主播视频一区| 美女毛片在线观看| 亚洲成人三级| 粉嫩高潮美女一区二区三区| 97国产真实伦对白精彩视频8| 成人免费av片| 国产九九在线| 国产精品无人区| 久久青青草综合| 性一交一乱一乱一视频| 成人h动漫精品一区二区器材| 欧美日韩五月天| 中文字幕第80页| 九色中文视频| 粉嫩aⅴ一区二区三区四区五区 | 中文字幕在线亚洲精品| 亚洲综合在线不卡| 五月开心六月丁香综合色啪| 中文字幕久热精品视频在线| 毛片视频免费播放| 看黄在线观看| 香蕉在线播放| 欧美14一18处毛片| 91色视频在线| 资源网第一页久久久| 91九色蝌蚪在线| 亚洲成人一区| 成人97在线观看视频| 精品无码在线观看| 在线看小视频| 国产精品久久久久7777按摩| 999久久欧美人妻一区二区| 美女裸体自慰在线观看| 91色乱码一区二区三区| 日韩成人手机在线| 在线观看的av网站| 一区二区三区四区不卡视频| 欧美日韩亚洲一二三| 青青草在线免费视频| 亚洲一级电影视频| 特级黄色片视频| yellow字幕网在线| 亚洲国产三级网| 日韩欧美高清在线观看| 日韩影视在线观看| 日韩av大片免费看| 欧美一级淫片a免费视频| 国产美女在线精品| 国产在线视频综合| 日本大片在线观看| 欧美日韩亚洲丝袜制服| 小泽玛利亚一区二区免费| 黄色大片在线| 亚洲欧美国产一本综合首页| 日干夜干天天干| 亚洲第一精品影视| 国产免费一区二区三区在线观看| 黄色一级大片在线免费看国产一| 一区二区三区在线电影| 91精品婷婷国产综合久久蝌蚪| 黄网站在线观看永久免费| 亚洲欧洲日本mm| av一区二区三区四区电影| 黄污视频在线看| 中文字幕制服丝袜成人av| 欧美三级在线观看视频| 精产国品自在线www| 欧美成人a在线| 国产一区二区99| 日韩电影在线一区| 欧美v在线观看| 国产亚洲精彩久久| 91视频免费网站| 男女性激情视频在线观看| 欧美日韩久久久一区| 欧美一级做a爰片免费视频| 麻豆成人综合网| 一级黄色免费视频| 久久精品亚洲欧美日韩精品中文字幕| 欧美日韩电影一区二区| 婷婷色在线资源| 国产91精品不卡视频| 99reav| 日韩精品在线影院| 777片理伦片在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 在线看片中文字幕| 丝袜美腿成人在线| 亚洲一区二区在线免费| 91精品国产麻豆国产在线观看 | 性一交一乱一透一a级| 国产不卡视频在线播放| 亚洲一区二区三区四区五区六区| 精品久久91| 中文字幕乱码人妻综合二区三区 | 欧美日韩一区二区三区在线播放 | 久久综合网导航| 中文字幕在线观看日韩| 九色精品视频在线观看| 色婷婷综合久色| www.日本在线观看| 亚洲欧美日韩中文播放| 在线视频你懂得| 一区二区三区不卡视频| 国产精品久久久久久久久久久久久久久久 | 国产色婷婷国产综合在线理论片a| 国外亚洲成av人片在线观看| 亚洲精品少妇网址| 九色自拍视频| 亚洲成人久久一区| 久久综合第一页| 91高清在线观看| 天堂成人在线视频| 欧美日韩黄色影视| 美女福利视频导航| 色综合色综合网色综合| 国产精品秘入口| 成人激情av在线| 91九色综合| 激情五月开心婷婷| 亚洲国产mv| 88久久精品无码一区二区毛片| 99精品免费| 欧美人禽zoz0强交| 久久久久久**毛片大全| 性网爆门事件集合av| 精品少妇一区二区三区在线播放| av漫画网站| 国产美女91呻吟求| aiss精品大尺度系列| 国产精品久久a| 成人永久免费视频| 2020亚洲男人天堂| 色婷婷综合久久久久| 日本动漫理论片在线观看网站| 91九色视频在线观看| 国产成人一区| 青青青视频在线播放| 亚洲三级电影网站| 女人天堂在线视频| 91丨九色丨蝌蚪富婆spa| 中文字幕日本人妻久久久免费| 色一区在线观看| 青梅竹马是消防员在线| 91久久国产综合久久91精品网站| 日本精品国产| 污污网站在线观看视频| 国产不卡视频在线观看| 区日韩二区欧美三区 | 亚洲免费观看视频| 女生裸体无遮挡天堂网站免费 | 一区二区三区中文在线观看| 国产3p露脸普通话对白| 日韩三区四区| 日本高清视频免费在线观看| 日本美女一区二区三区视频| 国产一区二区麻豆| 欧美日韩高清区| 日本高清精品| 欧美丰满熟妇bbbbbb| 51午夜精品国产| 欧美日韩在线观看首页| 无码国产精品一区二区免费式直播| 亚洲天堂福利av| 亚洲第一视频| 熟女性饥渴一区二区三区| 国产清纯白嫩初高生在线观看91| www色啪啪| 中国一区二区三区| 久久精品视频在线看| 成人免费乱码大片a毛片软件| 欧美深深色噜噜狠狠yyy| 国产成人在线网站| jizzjizzjizzjizz日本| youjizz.com亚洲| 久久蜜桃一区二区| 在线看三级网站视频| 网站一区二区三区| 色综合久久99| 亚洲精品天堂网| 亚洲片在线资源| 欧美一级大片在线视频| 中文字幕在线观看视频网站| 性欧美亚洲xxxx乳在线观看| 黄色亚洲精品| 麻豆精品不卡国产免费看| 明星裸体视频一区二区| 久久人人97超碰com| 欧美日韩免费做爰大片| 老司机午夜免费福利| 亚洲国产女人aaa毛片在线| 老司机成人在线| 国产又爽又黄网站亚洲视频123| 国产成人精品自拍| 国产三级一区二区三区| gogo在线观看| 久久久久久久久久久网| 国产精品丝袜白浆摸在线| 精品写真视频在线观看| 黄页网址大全在线观看| 丰满少妇xbxb毛片日本| 亚洲韩国青草视频| 黄色成人91| 玖玖在线免费视频| 欧美黄色一级生活片| 91精品国产九九九久久久亚洲| 日韩中文字幕1| 调教视频在线观看| 亚洲色图 激情小说| 97av在线播放| www.日本不卡| av影院在线| 日产电影一区二区三区| 欧美深深色噜噜狠狠yyy| 色婷婷一区二区| 欧美激情理论| 在线黄色av| 波多野结衣一本一道| 欧美成人免费在线| 日韩欧美综合在线视频| 日韩最新在线| av777777| 欧美另类一区二区| 黑人巨大精品欧美一区二区小视频 | 手机在线播放av| 97超碰国产精品女人人人爽 | 在线视频三级| 中文字幕av免费在线观看| 久久亚洲免费| 精品国产一区二区三区不卡| 日韩精品五月天| 国产免费拔擦拔擦8x高清在线人| 再深点灬舒服灬太大了少妇| 97精品国产97久久久久久粉红| 51精品视频一区二区三区| 牛牛精品在线| 国产亚洲精品久久久久久豆腐| 91久久大香伊蕉在人线| 色系网站成人免费| 中文日韩在线| 色偷偷偷在线视频播放| 日韩综合另类| 婷婷激情四射网| 日韩精品免费一区| 欧美成人免费观看| 性久久久久久久久久久久| 激情婷婷亚洲| 992tv国产精品成人影院| 天天摸天天干| 波多野结衣高清在线| 亚洲色图偷拍视频| 成人精品一二区| 亚洲女成人图区| 综合激情成人伊人| 翔田千里一区二区| 日韩欧美中文在线观看| 宅男深夜视频| 欧美一区二区在线观看视频| 国产精品嫩草av| 99久久自偷自偷国产精品不卡| 欧美一区二区三区四区高清| 成人毛片视频在线观看| 欧美一级淫片| 电影一区二区三区| 欧美孕妇孕交xxⅹ孕妇交| 男女午夜激烈无遮挡| 久久久精品国产sm调教| 中文字幕久久av| 亚洲乱码国产乱码精品天美传媒| 91精品国产高清久久久久久久久| 在线观看区一区二| 久久综合色8888| 免费在线看一区| 99精品综合| www.神马久久| 日韩欧美一区二区三区在线观看 | 欧美一级免费观看| 亚洲一区视频在线| 免费观看在线黄色网| 国产精品视频流白浆免费视频| 免费看污视频的网站| 久久久久亚洲av成人无码电影| 亚洲人成色77777| 一本色道久久综合亚洲二区三区| 成人免费网站在线| 久久夜色精品国产亚洲aⅴ| 欧美r级在线观看| 欧美日韩大陆一区二区| 午夜精品久久久久久久| 国产视频不卡一区| wwwwxxxxx欧美| 成人黄色av网站在线| 免费欧美在线视频| 99精品国产在热久久| 欧美黄在线观看| 欧美高清视频在线观看mv| 免费一区二区三区视频导航| 韩日精品一区| 国产美女精品写真福利视频| 成人ww免费完整版在线观看| 神马久久高清| 偷拍自拍在线| 国产免费视频在线| 麻豆最新免费在线视频| av电影在线播放高清免费观看| 超碰在线电影| 先锋av资源在线| 3d成人动漫在线| 中文在线手机av| www.成人爱| 国产午夜精品一区在线观看| 日日夜夜精品视频| 青青草原在线亚洲| 国产精品精品国产一区二区| 99久久九九| 一本色道久久综合一区| 天堂在线亚洲视频| 成人在线视频一区| 国产清纯白嫩初高生在线观看91| 国产精品久久毛片| 亚洲午夜激情av| 在线视频亚洲一区| 日韩精品在线视频美女| 日韩在线视频网| 国产成一区二区| 国严精品久久久久久亚洲影视| 中文字幕中文字幕99| 国产91在线免费| 国产肉体xxxx裸体784大胆|