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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機藍牙調節的時鐘源程序設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:281174 發表于 2018-1-31 15:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51單片機的時鐘設計,可以調節年月日 星期 和 時間。
內有源程序,在單片機板子上使用無誤。還加上了藍牙調節,可以通過藍牙直接調節時間。

單片機源程序如下:
  1. #include<reg51.h>
  2. #include"lcd.h"
  3. #include"ds1302.h"
  4. sbit K1=P3^2;
  5. sbit K2=P3^3;
  6. sbit K3=P3^4;
  7. unsigned char i;
  8. unsigned char buff;
  9. unsigned char receivedata;
  10. void keep();
  11. void lanya();
  12. void Int0Configuration();
  13. void LcdDisplay();
  14. unsigned char SetState,SetPlace;
  15. void Delay10ms(void);   //誤差 0us
  16. void main()
  17. {

  18.         Int0Configuration();
  19.         LcdInit();
  20.         Ds1302Init();
  21.         while(1)
  22.         {       
  23.                 if(SetState==0)
  24.                 {
  25.                         Ds1302ReadTime();
  26.                 }
  27.                 else
  28.                 {
  29.                         lanya();
  30.                         keep();
  31.                                 }
  32.                  LcdDisplay();       
  33.                 }
  34.         }       
  35. void LcdDisplay()//1602顯示
  36. {
  37.         LcdWriteCom(0x80+0X40);
  38.         LcdWriteData('0'+TIME[2]/16);                                //時
  39.         LcdWriteData('0'+(TIME[2]&0x0f));                                 
  40.         LcdWriteData('-');
  41.         LcdWriteData('0'+TIME[1]/16);                                //分
  42.         LcdWriteData('0'+(TIME[1]&0x0f));       
  43.         LcdWriteData('-');
  44.         LcdWriteData('0'+TIME[0]/16);                                //秒
  45.         LcdWriteData('0'+(TIME[0]&0x0f));

  46.         LcdWriteCom(0x80);
  47.         LcdWriteData('2');
  48.         LcdWriteData('0');
  49.         LcdWriteData('0'+TIME[6]/16);                        //年
  50.         LcdWriteData('0'+(TIME[6]&0x0f));
  51.         LcdWriteData('-');
  52.         LcdWriteData('0'+TIME[4]/16);                        //月
  53.         LcdWriteData('0'+(TIME[4]&0x0f));
  54.         LcdWriteData('-');
  55.         LcdWriteData('0'+TIME[3]/16);                        //日
  56.         LcdWriteData('0'+(TIME[3]&0x0f));
  57.         LcdWriteCom(0x8D);
  58.         LcdWriteData('0'+(TIME[5]&0x07));        //星期                         
  59. }


  60. void Int0Configuration()//定時器
  61. {
  62.           TMOD = 0x20;
  63.     SCON = 0x50;
  64.     TH1 = 0xFD;
  65.     TL1 = TH1;
  66.     PCON = 0x00;
  67.     EA = 1;
  68.     ES = 1;
  69.     TR1 = 1;
  70. }
  71. //串口中斷
  72. void Int0() interrupt 4          
  73. {
  74.          TH1=0xFD;
  75.          TL1=TH1;
  76.          Delay10ms();
  77.           if(receivedata==0x00)//進入時鐘模式
  78.           {
  79.                 SetState=~SetState;
  80.                 SetPlace=0;
  81.                 Ds1302Init();               
  82.           }
  83.           if(RI)//在返回發送數字到手機上
  84.     {
  85.     RI = 0;
  86.                 }
  87.           receivedata=SBUF;
  88.     SBUF=receivedata;
  89.                 while(!TI);
  90.         TI = 0;
  91.                 Delay10ms();
  92.                 if(K3==0)
  93.         {
  94.                 SetState=~SetState;
  95.                 SetPlace=0;
  96.                 Ds1302Init();       
  97.         }
  98. }
  99. /********************************************************************************
  100. 藍牙控制時間
  101. *****************************************************************************/
  102. void lanya()
  103. {
  104.                                 if(receivedata==0x01)//選擇位置,可調節的數字位 從時間秒開始
  105.                                 {
  106.                                         SetPlace++;
  107.                                         if(SetPlace>=7)
  108.                                         SetPlace=0;                                       
  109.                                 }
  110.                                 buff=receivedata;//不加會使得數字一直加
  111.                                 if(buff==0x02)//加一
  112.                                 {
  113.                                         receivedata++;
  114.                                         TIME[SetPlace]=TIME[SetPlace]+1;
  115.                                         if((TIME[SetPlace]&0x0f)>9)                                         //換成BCD碼。
  116.                                         {
  117.                                                 TIME[SetPlace]=TIME[SetPlace]+6;
  118.                                         }
  119.                                         if((TIME[SetPlace]>=0x60)&&(SetPlace<2))                //分秒只能到59
  120.                                         {
  121.                                                 TIME[SetPlace]=0;
  122.                                         }
  123.                                         if((TIME[SetPlace]>=0x24)&&(SetPlace==2))                //小時只能到23
  124.                                         {
  125.                                                 TIME[SetPlace]=0;
  126.                                         }
  127.                                         if((TIME[SetPlace]>=0x32)&&(SetPlace==3))                //日只能到31
  128.                                         {
  129.                                                 TIME[SetPlace]=0;       
  130.                                         }
  131.                                         if((TIME[SetPlace]>=0x13)&&(SetPlace==4))                //月只能到12
  132.                                         {
  133.                                                 TIME[SetPlace]=0;
  134.                                         }       
  135.                                         if((TIME[SetPlace]>=0x07)&&(SetPlace==5))                //周只能到7
  136.                                         {
  137.                                                 TIME[SetPlace]=1;
  138.                                         }
  139. }
  140.                                 }
  141. /****************************************************************************
  142. 按鍵控制時間                               
  143. ***************************************************************************/
  144. void keep()
  145. {
  146.         if(K1==0)                //檢測按鍵K1是否按下
  147.                         {
  148.                                 Delay10ms();        //消除抖動
  149.                                 if(K1==0)
  150.                                 {
  151.                                         SetPlace++;
  152.                                         if(SetPlace>=7)
  153.                                                 SetPlace=0;                                       
  154.                                 }
  155.                                 while((i<50)&&(K1==0))         //檢測按鍵是否松開
  156.                                 {
  157.                                         Delay10ms();
  158.                                         i++;
  159.                                 }
  160.                                 i=0;
  161.                         }
  162.                         if(K2==0)                //檢測按鍵K2是否按下
  163.                         {
  164.                                 Delay10ms();        //消除抖動
  165.                                 if(K2==0)
  166.                                 {
  167.                                         TIME[SetPlace]++;
  168.                                         if((TIME[SetPlace]&0x0f)>9)                                         //換成BCD碼。
  169.                                         {
  170.                                                 TIME[SetPlace]=TIME[SetPlace]+6;
  171.                                         }
  172.                                         if((TIME[SetPlace]>=0x60)&&(SetPlace<2))                //分秒只能到59
  173.                                         {
  174.                                                 TIME[SetPlace]=0;
  175.                                         }
  176.                                         if((TIME[SetPlace]>=0x24)&&(SetPlace==2))                //小時只能到23
  177.                                         {
  178.                                                 TIME[SetPlace]=0;
  179.                                         }
  180.                                         if((TIME[SetPlace]>=0x32)&&(SetPlace==3))                //日只能到31
  181.                                         {
  182.                                                 TIME[SetPlace]=0;       
  183.                                         }
  184.                                         if((TIME[SetPlace]>=0x13)&&(SetPlace==4))                //月只能到12
  185.                                         {
  186.                                                 TIME[SetPlace]=0;
  187. ……………………

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

所有資料51hei提供下載:
單片機實驗2.zip (68.73 KB, 下載次數: 33)


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

使用道具 舉報

沙發
ID:102963 發表于 2018-3-1 10:10 | 只看該作者
內容太少,只有個程序,沒有電路圖,沒有藍牙部分介紹!做事情不夠認真!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品看片 | 日韩视频免费在线 | 中文字幕国产视频 | 黄色网址在线免费观看 | 永久精品 | 自拍 亚洲 欧美 老师 丝袜 | 国产福利在线 | 久久新视频| 中文字幕亚洲视频 | 欧美日韩在线高清 | 亚洲视频在线播放 | 久久久久国产一级毛片 | 精品人伦一区二区三区蜜桃网站 | 欧美一级欧美三级在线观看 | 天天操天天玩 | 亚洲 精品 综合 精品 自拍 | 久久久久国产一区二区三区 | 欧美国产日韩一区二区三区 | 久久精品国产亚洲 | 亚洲精品在线观 | 免费在线成人 | 亚洲欧美综合 | 日韩有码一区 | 国产欧美一区二区三区日本久久久 | 久色网| 二区精品 | 九色视频网站 | 另类视频区| 玖玖玖在线 | 国产一区不卡 | 国产污视频在线 | 国产成人精品一区二区三区网站观看 | 国产在线中文字幕 | 综合五月 | 亚洲影视在线 | 日韩在线成人 | 国产精品久久国产精品久久 | 日本高清视频网站 | 美女久久久久久久 | 午夜精品| 日韩在线中文字幕 |