欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

手機藍牙控制51單片機溫濕度檢測及繼電器澆水

[復制鏈接]
跳轉到指定樓層
樓主
一個藍牙串口模塊,用51單片機通信。


單片機源程序如下:

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

  3. typedef unsigned int u16;          //對數據類型進行聲明定義
  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];  //定義發送的字節數          
  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循環                  
  66.                     if(u8FLAG==1)break;
  67.                    //判斷數據位是0還是1         
  68.                      
  69.                 // 如果高電平高過預定0高電平值則數據位為 1
  70.                     
  71.                    u8comdata<<=1;
  72.                       u8comdata|=u8temp;        //0
  73.              }//rof
  74.           
  75.         }


  76. void RH(void)
  77.         {
  78.           //主機拉低18ms
  79.        rec=0;
  80.            Delay(180);
  81.            rec=1;
  82.          //總線由上拉電阻拉高 主機延時20us
  83.            Delay_10us();
  84.            Delay_10us();
  85.            Delay_10us();
  86.            Delay_10us();
  87.          //主機設為輸入 判斷從機響應信號
  88.            rec=1;
  89.          //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行          
  90.            if(!rec)                 //T !          
  91.            {
  92.            u8FLAG=2;
  93.          //判斷從機是否發出 80us 的低電平響應信號是否結束         
  94.            while((!rec)&&u8FLAG++);
  95.            u8FLAG=2;
  96.          //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
  97.            while((rec)&&u8FLAG++);
  98.          //數據接收狀態                 
  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.          //數據校驗
  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;                        //設置為工作方式1
  126.         TMOD=0X20;                        //設置計數器工作方式2
  127.         PCON&=0X7f;                       
  128.         TH1=0XFd;                               
  129.         TL1=0XFd;
  130.         ES=1;                                                //打開接收中斷
  131.         EA=1;                                                //打開總中斷
  132.         TR1=1;                                        //打開計數器
  133. }


  134. void main()
  135. {       
  136.        
  137.         UsartInit();  //        串口初始?
  138.   //SendData(str) ;   //發送到串口
  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) ;  //發送到串口
  156.      Delay(20000);               
  157.                         flag=0;
  158.                 }
  159.         }               
  160. }

  161. /*******************************************************************************
  162. 串口通信中斷函數
  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;//清除接收中斷標志位
  173.                 }
  174.        
  175.         if(TI==1) //發送中斷          
  176.         {
  177.                 TI=0;
  178.                 if(count!=5) //發送完5位數據         
  179.                 {
  180.                         SBUF= outdata[count];
  181.                         count++;
  182.                 }
  183.         }
  184.         }
復制代碼

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


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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表