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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2824|回復: 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)


回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰人人插 | 奇米影视首页 | 亚洲天堂av网 | a级毛片毛片免费观看久潮喷 | 国产精品免费高清 | 国产这里只有精品 | 亚洲视频在线观看免费 | 色综合久久天天综合网 | 久久精品亚洲 | 国产精品不卡视频 | 久久国产精品视频 | 国产区精品在线观看 | 一级片av| 欧亚av在线 | 国产日韩精品久久 | 国产精品美女久久久免费 | 在线看片福利 | 日本久久网 | 欧美视频免费在线 | 亚洲国产偷 | 黄色片在线免费看 | 欧美成人一区二区三区片免费 | 九色91视频 | 久久综合一区二区三区 | 亚洲精品一区二区网址 | 午夜播放器在线观看 | 不卡一区 | 久久精品国产久精国产 | 国产一区欧美一区 | 亚洲成人免费 | 成人伊人 | 成人在线免费观看视频 | 国产精品久久久乱弄 | www.国产精品| 美日韩中文字幕 | 久久久久久久久久久91 | 亚洲成人国产精品 | 成人av网站在线观看 | 有码一区 | 福利片在线观看 | 成人在线视频免费观看 |