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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3033|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

手機(jī)藍(lán)牙控制51單片機(jī)溫濕度檢測及繼電器澆水

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一個藍(lán)牙串口模塊,用51單片機(jī)通信。


單片機(jī)源程序如下:

  1. #include <intrins.h>
  2. #include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器

  3. typedef unsigned int u16;          //對數(shù)據(jù)類型進(jìn)行聲明定義
  4. typedef unsigned char u8;
  5. #define   Data_0_time    4   

  6. sbit  rec  = P2^1 ;
  7. sbit out=P2^0;
  8. u8  u8FLAG,k;
  9. u8  u8count,u8temp;
  10. u8  u8T_data_H,u8T_data_L,u8RH_data_H,u8RH_data_L,u8checkdata;
  11. u8  u8T_data_H_temp,u8T_data_L_temp,u8RH_data_H_temp,u8RH_data_L_temp,u8checkdata_temp;
  12. u8  u8comdata;
  13. u8  outdata[5];  //定義發(fā)送的字節(jié)數(shù)          
  14. u8  indata[5];
  15. u8  count, count_r=0;
  16. u8  str[5]={"ok000"};
  17. u8 flag =0;
  18. u16 u16temp1,u16temp2;
  19. void SendData(u8 *a)
  20. {
  21.         outdata[0] = a[0];
  22.         outdata[1] = a[1];
  23.         outdata[2] = a[2];
  24.         outdata[3] = a[3];
  25.         outdata[4] = a[4];
  26.         count = 1;
  27.         SBUF=outdata[0];
  28. }
  29.   void Delay(u16 j)
  30.     {      u8 i;
  31.             for(;j>0;j--)
  32.           {        
  33.                 for(i=0;i<27;i++);

  34.           }
  35.     }
  36.                
  37. void  Delay_10us(void)
  38.       {
  39.         u8 i;
  40.         i--;
  41.         i--;
  42.         i--;
  43.         i--;
  44.         i--;
  45.         i--;
  46.        }
  47.                          
  48.   void  COM(void)
  49.       {
  50.      
  51.                 u8 i;
  52.          
  53.        for(i=0;i<8;i++)          
  54.             {
  55.                
  56.                        u8FLAG=2;       
  57.                    while((!rec)&&u8FLAG++);
  58.                         Delay_10us();
  59.                     Delay_10us();
  60.                         Delay_10us();
  61.                           u8temp=0;
  62.              if(rec)u8temp=1;
  63.                     u8FLAG=2;
  64.                  while((rec)&&u8FLAG++);
  65.                    //超時則跳出for循環(huán)                  
  66.                     if(u8FLAG==1)break;
  67.                    //判斷數(shù)據(jù)位是0還是1         
  68.                      
  69.                 // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1
  70.                     
  71.                    u8comdata<<=1;
  72.                       u8comdata|=u8temp;        //0
  73.              }//rof
  74.           
  75.         }


  76. void RH(void)
  77.         {
  78.           //主機(jī)拉低18ms
  79.        rec=0;
  80.            Delay(180);
  81.            rec=1;
  82.          //總線由上拉電阻拉高 主機(jī)延時20us
  83.            Delay_10us();
  84.            Delay_10us();
  85.            Delay_10us();
  86.            Delay_10us();
  87.          //主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號
  88.            rec=1;
  89.          //判斷從機(jī)是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行          
  90.            if(!rec)                 //T !          
  91.            {
  92.            u8FLAG=2;
  93.          //判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束         
  94.            while((!rec)&&u8FLAG++);
  95.            u8FLAG=2;
  96.          //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
  97.            while((rec)&&u8FLAG++);
  98.          //數(shù)據(jù)接收狀態(tài)                 
  99.            COM();
  100.            u8RH_data_H_temp=u8comdata;
  101.            COM();
  102.            u8RH_data_L_temp=u8comdata;
  103.            COM();
  104.            u8T_data_H_temp=u8comdata;
  105.            COM();
  106.            u8T_data_L_temp=u8comdata;
  107.            COM();
  108.            u8checkdata_temp=u8comdata;
  109.            rec=1;
  110.          //數(shù)據(jù)校驗(yàn)
  111.          
  112.            u8temp=(u8T_data_H_temp+u8T_data_L_temp+u8RH_data_H_temp+u8RH_data_L_temp);
  113.            if(u8temp==u8checkdata_temp)
  114.            {
  115.                      u8RH_data_H=u8RH_data_H_temp;
  116.                      u8RH_data_L=u8RH_data_L_temp;
  117.                   u8T_data_H=u8T_data_H_temp;
  118.                      u8T_data_L=u8T_data_L_temp;
  119.                      u8checkdata=u8checkdata_temp;
  120.            }
  121.            }

  122.         }       
  123. void UsartInit()
  124. {
  125.         SCON=0X50;                        //設(shè)置為工作方式1
  126.         TMOD=0X20;                        //設(shè)置計(jì)數(shù)器工作方式2
  127.         PCON&=0X7f;                       
  128.         TH1=0XFd;                               
  129.         TL1=0XFd;
  130.         ES=1;                                                //打開接收中斷
  131.         EA=1;                                                //打開總中斷
  132.         TR1=1;                                        //打開計(jì)數(shù)器
  133. }


  134. void main()
  135. {       
  136.        
  137.         UsartInit();  //        串口初始?
  138.   //SendData(str) ;   //發(fā)送到串口
  139.         Delay(1);         //延時100US(12M晶振)
  140.         while(1)
  141.         {

  142.                   
  143.                 if(flag==1)
  144.                 {out=!out;
  145.                 flag=0;
  146.                 }
  147.                 if(flag==2)
  148.                 {
  149.                         RH();
  150.                  str[0]=u8RH_data_H;
  151.            str[1]=u8RH_data_L;
  152.            str[2]=u8T_data_H;
  153.            str[3]=u8T_data_L;
  154.            str[4]=u8checkdata;
  155.            SendData(str) ;  //發(fā)送到串口
  156.      Delay(20000);               
  157.                         flag=0;
  158.                 }
  159.         }               
  160. }

  161. /*******************************************************************************
  162. 串口通信中斷函數(shù)
  163. *******************************************************************************/
  164. void Usart() interrupt 4
  165. {
  166.         if(RI==1)
  167.                 {
  168.         u8 receiveData;
  169.         receiveData=SBUF;
  170.         if(receiveData==0)flag=1;
  171.         else if(receiveData==1)flag=2;
  172.         RI = 0;//清除接收中斷標(biāo)志位
  173.                 }
  174.        
  175.         if(TI==1) //發(fā)送中斷          
  176.         {
  177.                 TI=0;
  178.                 if(count!=5) //發(fā)送完5位數(shù)據(jù)         
  179.                 {
  180.                         SBUF= outdata[count];
  181.                         count++;
  182.                 }
  183.         }
  184.         }
復(fù)制代碼

所有資料51hei提供下載:
51單片機(jī)藍(lán)牙控制.zip (71.21 KB, 下載次數(shù): 49)


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

使用道具 舉報

沙發(fā)
ID:544558 發(fā)表于 2019-6-6 21:20 | 只看該作者
大佬,請問有原理圖嘛
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久免费看 | 黄色一级免费 | 日本天堂一区 | 一区二区三区中文字幕 | 成人在线亚洲 | 黄色网页在线观看 | 日本黄视频在线观看 | 亚洲精品国产区 | 精品一区二区在线观看 | 亚洲免费高清 | 成人免费视频网站在线看 | 最新中文字幕第一页视频 | 久久久美女 | 波多野结衣中文视频 | 久久久久久久久久久高潮一区二区 | www.日韩欧美| 国产精品久久久亚洲 | 99pao成人国产永久免费视频 | 国产精品一区二区日韩 | 国产精品日韩一区二区 | 91免费看片 | 99精品国产一区二区三区 | 国产精品国产成人国产三级 | 中文字幕不卡在线88 | 日韩另类| 视频在线亚洲 | av一级一片 | 国产精品久久久 | 九九久久国产精品 | 网站黄色在线 | 欧美精品一区二区免费视频 | 在线观看成年人视频 | 国产精品久久久久久久免费观看 | 91精品在线观看入口 | 久久亚洲一区二区三区四区 | 91网站在线播放 | 国产精品永久久久久 | h视频在线免费 | 亚洲九九 | 精品一区二区在线观看 | 久久黄色网 |