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

標題: 我的12864超級時鐘制作資料 帶紅外遙控 鬧鈴 按鍵 完整源碼 [打印本頁]

作者: 51黑電子迷    時間: 2017-5-28 17:33
標題: 我的12864超級時鐘制作資料 帶紅外遙控 鬧鈴 按鍵 完整源碼
12864時鐘資料包:

單片機源程序如下:
  1. /*********************************************************
  2. 項目名稱:                萬年歷的制作
  3. 項目目的:                通過制作萬年歷熟悉并掌握51系列的單片機
  4. 項目制作時間:        10月12日到10月25日
  5. 項目制作人:        柳振
  6. 項目實現功能:1,通過 12864顯示DS1302的當前時間
  7.                           2,可以通過按鍵調節DS1302的時間并保存調節的時間
  8.                                 到芯片里面去
  9.                           3,調節DS1302時間是屏幕的時間時有友情提示
  10.                           4,實現鬧鐘功能并且能設定鬧鐘,設定鬧鐘時屏幕上有
  11.                                 友情提示
  12.                           5,設定的鬧鐘時間能在掉電的時候儲存當再次開啟時
  13.                                 鬧鐘的時間仍然是上次的鬧鐘時間
  14.                                         按s4鬧鈴停止
  15.                           6,紅外按下 1 鍵并且在走動時間時切換屏幕 再按一下時
  16.                                 返回走動時間的界面 或者按s2鍵返回原來的界面
  17.                           7,按下 s4鍵之后單片機進入串口通訊 并調整        DS1302
  18.                                 的時分秒的時間 通訊完之后單片機自動返回原來的界面
  19.                                 在通訊時仍然可以走動時間并每隔5 s把時間發送費電腦
  20.                                 通過按s4鍵退出
  21. **********************************************************/




  22. #include                 "Initial.h"        //主要用于初始化
  23. #include                 "Alarm.h"        //主要用于按鍵掃描于紅外掃描








  24. void main(void)                                   //主函數
  25. {




  26.          Initial();                                //初始化
  27.         
  28.          while(1)                                //按鍵掃描主要在alarm.c文件里面
  29.           {         
  30.                 Key_Scan();                        
  31.           }
  32. }








  33. ……………………




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

alarm文件:

  1. /************************************************************
  2.         本文件主要用于寫按鍵處理 與鬧鈴處理
  3. ************************************************************/
  4. #include        "HongWai.h"//主要用于調用紅外的函數
  5. #include        "Alarm.h"
  6. #include        "Delay.h"
  7. #include        "control.h"
  8. #include        "12864.h"
  9. #include        "ds1302.h"
  10. #include        "Uart.h"




  11.                           //g_Flag1看鬧鈴      g_Flag2 設鬧鈴




  12. bit                        g_Alarm_Flag1,g_Alarm_Flag2;
  13. bit                        g_Uart_Work_Flag;
  14. bit         g_Turn_Poem_Flag;
  15. uchar                g_Alarm_hour,g_Alarm_min;
  16. uchar                g_Set_Alarm_Num;                                //鬧鈴設定功能的變量
  17. uchar                    g_Set_DS1302_Num;                                //DS1302的工能設置時間




  18. /****************************************************
  19.         函數名稱:         設置1302的時間
  20.         函數功能:        調整DS1302的時間數值
  21.         入口參數:        無
  22.         出口參數:        無
  23.         備          注:        按s1進入設定時間    再次按下其他的按鍵開始調節
  24.                                 s1設定的項目增加        s2設定的項目減小
  25.                                 s3增加相應的數值        s4減小相應的數值
  26. *****************************************************/
  27. void Set_DS1302()                                
  28. {
  29.         if(s1 == 0)                                        //功能增加位置鍵
  30.         {
  31.                 DelayMs(15);                        //消抖
  32.                 if(s1 == 0)
  33.                 {
  34.                         while(!s1);                        //等待按鍵釋放
  35.                         Di();                                //響
  36.                     g_Set_DS1302_Num++;                                //功能鍵按下次數
  37.                         if(g_Set_DS1302_Num >= 9)                //第八次按下
  38.                         {
  39.                                 g_Set_DS1302_Num = 0;
  40.                                 g_Alarm_Flag1 = 0;
  41.                                 g_Alarm_Flag2 = 0;
  42.                         }
  43.                         if(g_Set_DS1302_Num > 0)
  44.                         {
  45.                                 Locate_DS1302();                        //一直定位
  46.                         }
  47.                 }
  48.         }
  49.         if(s2 == 0)                                          //功能位置返回按鍵
  50.         {
  51.                 DelayMs(15);                        //消抖
  52.                 if(s2 == 0)
  53.                 {
  54.                         while(!s2);                        //等待按鍵釋放
  55.                         Di();                                //響
  56.                     g_Set_DS1302_Num--;                                //功能鍵按下次數
  57.                         if(g_Set_DS1302_Num <= 0)                        //清零
  58.                         {
  59.                                 Write_1302_Date();        //寫入 存儲數據
  60.                                 g_Set_DS1302_Num = 0;
  61.                                 Initial_12864();
  62.                                 Write_12864_DS1302_Constant();
  63.                         }
  64.                         if(g_Set_DS1302_Num > 0)
  65.                         {
  66.                                 Locate_DS1302();                        //一直定位
  67.                         }
  68.                 }
  69.         }
  70.         




  71.         if(g_Set_DS1302_Num > 0)        //否則進行調整
  72.         {
  73.                 if(s3 == 0)                                //增大鍵調節
  74.                 {
  75.                         DelayMs(5);                        //消抖        
  76.                         if(s3== 0)
  77.                         {
  78.                                 Di();                                //響
  79.                                 while(!s3);                        //等待按鍵釋放
  80.                                 Increase_DS1302();  //增大DS1302數值函數




  81.                         }
  82.                 }
  83.                 if(s4 == 0)                                //減小調節
  84.                 {
  85.                         DelayMs(5);                        //消抖        
  86.                         if(s4== 0)
  87.                         {
  88.                                 while(!s4);                 //等待按鍵釋放
  89.                                 Di();                         //響
  90.                                 Decrease_DS1302();//減小數值的函數
  91.                         }
  92.                 }
  93.         }




  94. }




  95. /**************************************************
  96.         函數名:        Set_A()
  97.         函數功能:        設定鬧鈴的時間
  98.         入口參數:        無
  99.         出口參數:        無
  100.         備          注:  s1設定的項目增加   s2設定的項目減小
  101.                                 s3增加相應的數值   s4減小相應的數值
  102. ***************************************************/
  103. void Set_A()                                        //設定鬧鈴的時間
  104. {
  105.         if(s1 == 0)                                        //鬧鈴設定的項目增加
  106.         {
  107.                 DelayMs(15);
  108.                 if(s1 == 0)
  109.                 {
  110.                         Di();
  111.                         while(!s1);




  112.                         g_Set_Alarm_Num ++;                                //鬧鈴的功能變量加
  113.                         Initial_12864();               




  114.                         if(g_Set_Alarm_Num >= 3)                        //退出鬧鈴設定的功能
  115.                         {
  116.                                 g_Set_Alarm_Num    = 0;
  117.                                 g_Set_DS1302_Num   = 0;                 //讓時間走起來
  118.                                 Write_12864_DS1302_Constant();
  119.                                 g_Alarm_Flag2 = 0;
  120.                                 g_Alarm_Flag1 = 0;
  121.                         }
  122.                         Locate_A();                                        //定位改變的鬧鐘數值
  123.                 }
  124.         }
  125.         
  126.         if(s2 == 0)                                        //鬧鈴設定的項目減小
  127.         {
  128.                 DelayMs(15);
  129.                 if(s2 == 0)
  130.                 {
  131.                         Di();
  132.                         while(!s2);
  133.                         g_Set_Alarm_Num --;
  134.                         Initial_12864();               
  135.                         if(g_Set_Alarm_Num <= 0)                //退出鬧鈴設置
  136.                         {
  137.                                 g_Set_Alarm_Num = 0;
  138.                                 g_Set_DS1302_Num   = 0;                 //讓時間走起來
  139.                                 Initial_12864();
  140.                                 Write_12864_DS1302_Constant();
  141.                                 g_Alarm_Flag2 = 0;
  142.                                 g_Alarm_Flag1 = 0;
  143.                         }
  144.                         Locate_A();                //定位改變的鬧鐘數值
  145.                 }
  146.         }
  147.         if(g_Set_Alarm_Num != 0)    //進入鬧鈴時分秒的增大減小               
  148.         {
  149.                 if(s3 == 0)                                //對鬧鈴時分秒的數值進行增大
  150.                 {
  151.                         DelayMs(15);
  152.                         if(s3 == 0)
  153.                         {
  154.                                 Di();
  155.                                 while(!s3);
  156.                                 A_Increase();
  157.                         }
  158.                 }
  159.                
  160.                 if(s4 == 0)                                //對鬧鈴的數值進行減小
  161.                 {
  162.                         DelayMs(15);
  163.                         if(s4 == 0)
  164.                         {
  165.                                 Di();
  166.                                 while(!s4);
  167.                                 A_Decrease();
  168.                         }               
  169.                 }
  170.         }
  171.         
  172. }




  173. /***********************************************
  174.         函數名:        沒有中斷處理的標志位掃描
  175.         函數功能:        用于沒有串口中斷的各種各的標志位掃描
  176.                                 與按鍵掃描         包括鬧鈴 ,DS1302 ,紅外
  177.         入口參數:        無
  178.         出口參數:        無
  179.         備          注:        友情提示在液晶上有顯示
  180.                                 按下s1進入        DS1302的時間修訂
  181.                                 按下s3進入  鬧鈴的的查看與修正
  182.                                 按下s4進入        串口中斷的處理
  183. ***********************************************/
  184. void Without_Uart()                                                                                                                                                                                                                        
  185. {
  186.         static        bit        Stop_A_Flag = 0;        //停止鬧鈴的標志位
  187.         
  188.         if(g_Alarm_Flag1 == 0 && g_Alarm_Flag2 == 0 && g_HongWai_Work_Flag == 0)        //DS1302的有關函數 主要看行走的時間與DS1302的時間修改
  189.         {
  190.                 Set_DS1302();                                                                                        //設置DS1302時間
  191.                 if(g_Set_DS1302_Num == 0)                                                                                        //當功能鍵的數值為零時進行讀取DS1302的所有數據
  192.                 {
  193.                         Read_All_DS1302_Date();
  194.                 }
  195.         Display_DS1302_Time();
  196.         }




  197.         if(g_Alarm_Flag1 == 0 && g_Alarm_Flag2 == 0 && g_HongWai_Work_Flag == 0 && g_Set_DS1302_Num == 0)//s3鬧鈴查看與修正
  198.         {
  199.                 if(s3 == 0)
  200.                 {
  201.                         DelayMs(15);
  202.                         if(s3 == 0)
  203.                         {
  204.                                 Di();
  205.                                 while(!s3);
  206.                                 g_Alarm_Flag1 = 1;
  207.                                 Initial_12864();
  208.                                 Remind_Whether_Set_Alarm();        
  209.                         }
  210.                 }
  211.         }
  212.         if(g_Alarm_Flag1 == 1 && g_Alarm_Flag2 == 0 && g_HongWai_Work_Flag == 0)        //判斷是否進入鬧鈴
  213.         {
  214.                 if(s1 == 0)                                //退出鬧鈴設定
  215.                 {
  216.                         DelayMs(15);
  217.                         if(s1 == 0)
  218.                         {
  219.                                 Di();
  220.                                 while(!s1);
  221.                                 g_Alarm_Flag2    = 0;
  222.                 g_Alarm_Flag1    = 0;
  223.                                 g_Set_DS1302_Num = 0;
  224.                                 Write_12864_DS1302_Constant();                        //寫12864固定的部分
  225.                         }
  226.                 }
  227.                 if(s2 == 0)                                //進入鬧鈴的設定
  228.                 {
  229.                         DelayMs(15);
  230.                         if(s2 == 0)
  231.                         {
  232.                                 Di();
  233.                                 while(!s2);
  234.                                 g_Alarm_Flag2 = 1;
  235.                 g_Set_Alarm_Num ++;                 //開始調節分鐘
  236.                 Locate_A();
  237.                         }
  238.                 }
  239.         }




  240.         if(g_Alarm_Flag2 == 1 && g_HongWai_Work_Flag == 0)//設定鬧鈴的時間
  241.         {
  242.                 Set_A();        
  243.                 Stop_A_Flag = 0;                                                                                //設置好后讓鬧鈴繼續響
  244.         }
  245.         
  246.         if(g_HongWai_Work_Flag == 1)
  247.     {
  248.         if(g_Turn_Poem_Flag == 0)
  249.         {
  250.             Turn_Page_Poem();
  251.         }
  252.     }
  253.         if(g_Alarm_hour == g_hour && g_Alarm_min == g_min && Stop_A_Flag == 0
  254.                                                   && g_Alarm_Flag1   ==  0  && g_Alarm_Flag2 == 0 && g_Set_DS1302_Num == 0)        //進入鬧鐘報響
  255.         {
  256.                 Di();
  257.                
  258.                 Locate_pos                (0,0);
  259.                 Write_String        ("鬧鈴來了  現在是",0,16);
  260.                 Locate_pos                (3,0);                                        //友情提示
  261.                 Write_String        ("按s4退出退出鬧鈴",0,16);
  262.                 if(g_sec >= 59)
  263.                 {
  264.                         Write_12864_DS1302_Constant();               
  265.                 }
  266.                
  267.                 if(s4 == 0)                                                        //退出鬧鈴
  268.                 {
  269.                         DelayMs(15);
  270.                         if(s4 == 0)
  271.                         {
  272.                                 Di();
  273.                                 while(!s4);
  274.                                 Stop_A_Flag = 1;//鬧鈴標志位置一 停止鬧鈴 如果想再次進入鬧鈴重新設定                                
  275.                                 Write_12864_DS1302_Constant();
  276.                         }
  277.                 }
  278.                
  279.         }
  280.         
  281.         IRR_Work();                                                                                                        //紅外工作




  282. }
  283. /**************************************************
  284.         函數名:        Key_Scan()
  285.         函數功能:        各種各樣的標志位掃描與按鍵掃描
  286.         入口參數:        無
  287.         出口參數:        無
  288.         備          注:        主要被主函數調用以便讓整個工程工作
  289.                                 主要用于各種各樣的按鍵掃描于標志位掃描
  290. ***************************************************/        
  291. void        Key_Scan()
  292. {
  293.         
  294.         if(g_Uart_Work_Flag == 0)                                                                        //判斷是否進入串口中斷
  295.         {




  296.                 if(g_Set_DS1302_Num == 0 && g_Alarm_Flag1 == 0 && g_Alarm_Flag2 == 0)
  297.                 {
  298.                         if(s4 == 0)
  299.                         {
  300.                                 DelayMs(15);
  301.                                 if(s4 == 0)
  302.                                 {
  303.                                         Di();
  304.                                         while(!s4);
  305.                                         g_Uart_Work_Flag = 1;
  306.                                         Initial_Uart        ();                        //初始化串口
  307.                                         Remind_Uart_process();                //提示進行串口處理
  308.                                 }
  309. ……………………




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

所有資料51hei提供下載地址:
http://www.zg4o1577.cn/bbs/dpj-86188-1.html





作者: 348652560    時間: 2017-6-15 17:50
非常好
作者: wjwjwjwj    時間: 2017-6-16 08:05
看了下,感覺非常好




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美日韩久久精品 | 欧美成人h版在线观看 | 成人午夜精品一区二区三区 | 日韩欧美精品在线 | 爱爱免费视频 | 国产乱码精品一区二区三区中文 | 国产成人一区二区 | 亚洲欧美一区二区三区情侣bbw | 毛片网站在线观看 | 亚洲国产高清高潮精品美女 | 97色在线观看免费视频 | 成人精品在线观看 | 精品伊人久久 | 乱一性一乱一交一视频a∨ 色爱av | 亚洲啪啪一区 | 米奇狠狠鲁 | 国产精品一区二区日韩 | 欧美精品成人 | 国产毛片视频 | www亚洲成人 | 婷婷福利视频导航 | 黄色免费看 | 欧美综合久久久 | 91porn成人精品 | 亚洲超碰在线观看 | 中文字幕乱码一区二区三区 | 在线观看免费av网站 | 欧美涩涩网 | 欧美色性 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 日本精品在线观看 | 婷婷福利 | 最新中文字幕在线播放 | 激情欧美一区二区三区中文字幕 | 亚洲欧美日韩精品久久亚洲区 | 色综合久| 夜夜骚视频 | av色站 | 九色av| 九九免费观看视频 | 视频一区欧美 |