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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于藍牙連接的51單片機溫度傳感器Proteus仿真+源程序

[復制鏈接]
跳轉到指定樓層
樓主
基于藍牙連接的51單片機溫度傳感器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. //****************************************************************//
  2. //       DHT21使用范例
  3. //單片機 AT89S52 或 STC89C52RC
  4. //功能   串口發送溫濕度數據 晶振 11.0592M 波特率 9600
  5. //硬件   P2.0口為通訊口連接DHT11,DHT11的電源和地連接單片機的電源和地,單片機串口加MAX232連接電腦
  6. //公司  雁凌電子   
  7. //****************************************************************//

  8. #include <reg51.h>
  9. //#include <intrins.h>
  10. //
  11. typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable       無符號8位整型變量  */
  12. typedef signed   char  S8;       /* defined for signed 8-bits integer variable          有符號8位整型變量  */
  13. typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable       無符號16位整型變量 */
  14. typedef signed   int   S16;      /* defined for signed 16-bits integer variable       有符號16位整型變量 */
  15. typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable       無符號32位整型變量 */
  16. typedef signed   long  S32;      /* defined for signed 32-bits integer variable       有符號32位整型變量 */
  17. typedef float          F32;      /* single precision floating point variable (32bits) 單精度浮點數(32位長度) */
  18. typedef double         F64;      /* double precision floating point variable (64bits) 雙精度浮點數(64位長度) */
  19. //
  20. #define uchar unsigned char
  21. #define uint unsigned int
  22. #define   Data_0_time    4

  23. //----------------------------------------------//
  24. //----------------IO口定義區--------------------//
  25. //----------------------------------------------//
  26. sbit  P2_0  = P2^0 ;
  27. sbit  LED = P3^7;
  28. extern void InitLcd1602();
  29. extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  30. void ConfigUART(unsigned int baud);
  31. //----------------------------------------------//
  32. //----------------定義區--------------------//
  33. //----------------------------------------------//
  34. U8  U8FLAG,k;
  35. U8  U8count,U8temp;
  36. U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  37. U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  38. U8  U8comdata;
  39.    
  40. U8 str_T[15];
  41. U8 str_H[15];



  42.        void Delay(U16 j)
  43.     {      U8 i;
  44.         for(;j>0;j--)
  45.       {     
  46.         for(i=0;i<27;i++);

  47.       }
  48.     }
  49.       void  Delay_10us(void)
  50.       {
  51.         U8 i;
  52.         i--;
  53.         i--;
  54.         i--;
  55.         i--;
  56.         i--;
  57.         i--;

  58.        }
  59.    
  60.         void  COM(void)
  61.       {
  62.      
  63.             U8 i;
  64.          
  65.        for(i=0;i<8;i++)      
  66.         {
  67.         
  68.                U8FLAG=2;   
  69.            while((!P2_0)&&U8FLAG++);
  70.             Delay_10us();
  71.             Delay_10us();               
  72.             Delay_10us();
  73.               U8temp=0;
  74.          if(P2_0)U8temp=1;
  75.             U8FLAG=2;
  76.          while((P2_0)&&U8FLAG++);
  77.            //超時則跳出for循環         
  78.             if(U8FLAG==1)break;
  79.            //判斷數據位是0還是1     
  80.               
  81.         // 如果高電平高過預定0高電平值則數據位為 1
  82.             
  83.            U8comdata<<=1;
  84.               U8comdata|=U8temp;        //0
  85.          }//rof
  86.       
  87.     }

  88.     //--------------------------------
  89.     //-----濕度讀取子程序 ------------
  90.     //--------------------------------
  91.     //----以下變量均為全局變量--------
  92.     //----溫度高8位== U8T_data_H------
  93.     //----溫度低8位== U8T_data_L------
  94.     //----濕度高8位== U8RH_data_H-----
  95.     //----濕度低8位== U8RH_data_L-----
  96.     //----校驗 8位 == U8checkdata-----
  97.     //----調用相關子程序如下----------
  98.     //---- Delay();, Delay_10us();,COM();
  99.     //--------------------------------

  100.     void RH(void)
  101.     {
  102.       //主機拉低18ms
  103.        P2_0=0;
  104.        Delay(180);
  105.        P2_0=1;
  106.      //總線由上拉電阻拉高 主機延時20us
  107.        Delay_10us();
  108.        Delay_10us();
  109.        Delay_10us();
  110.        Delay_10us();        
  111.      //主機設為輸入 判斷從機響應信號
  112.        P2_0=1;
  113.      //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行      
  114.        if(!P2_0)         //T !      
  115.        {
  116.        U8FLAG=2;
  117.      //判斷從機是否發出 80us 的低電平響應信號是否結束     
  118.        while((!P2_0)&&U8FLAG++);
  119.        U8FLAG=2;
  120.      //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
  121.        while((P2_0)&&U8FLAG++);
  122.      //數據接收狀態         
  123.        COM();
  124.        U8RH_data_H_temp=U8comdata;
  125.        COM();
  126.        U8RH_data_L_temp=U8comdata;
  127.        COM();
  128.        U8T_data_H_temp=U8comdata;
  129.        COM();
  130.        U8T_data_L_temp=U8comdata;
  131.        COM();
  132.        U8checkdata_temp=U8comdata;
  133.        P2_0=1;
  134.      //數據校驗
  135.      
  136.        U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
  137.        if(U8temp==U8checkdata_temp)
  138.        {
  139.              U8RH_data_H=U8RH_data_H_temp;
  140.              U8RH_data_L=U8RH_data_L_temp;
  141.           U8T_data_H=U8T_data_H_temp;
  142.              U8T_data_L=U8T_data_L_temp;
  143.              U8checkdata=U8checkdata_temp;
  144.        }//fi
  145.        }//fi

  146.     }
  147. //向串口發送一個字符  
  148. void send_char_com(unsigned char ch)
  149.   {     
  150.   SBUF=ch;   
  151.   while(TI==0);   
  152.   TI=0;
  153.   }
  154. //向串口發送一個字符串,strlen為該字符串長度   
  155. void send_string_com(unsigned char *str,unsigned int strlen)
  156. {
  157.    unsigned int k=0;   
  158.    do
  159.    {  
  160.    send_char_com(*(str + k));   
  161.    k++;     
  162.    }
  163.    while(k < strlen);
  164. }
  165.    
  166. //----------------------------------------------
  167. //main()功能描述:  AT89C51  11.0592MHz     串口發
  168. //送溫濕度數據,波特率 9600
  169. //----------------------------------------------
  170. void main()
  171. {   
  172.     ConfigUART(9600);  //配置波特率為9600
  173.     InitLcd1602();     //初始化液晶

  174.     while(1)
  175.     {  

  176.        //------------------------
  177.        //調用溫濕度讀取子程序
  178.        RH();
  179.        //串口顯示程序
  180.        //--------------------------
  181.        str_T[0] = 'T';
  182.        str_T[1] = 'e';
  183.        str_T[2] = 'm';
  184.        str_T[3] = ':';                         // 溫度
  185.        str_T[4]=U8T_data_H%100/10+0x30;    // 整數十位
  186.        str_T[5]=U8T_data_H%10+0x30;        // 整數個位
  187.        str_T[6] = '.';  
  188.        str_T[7]=U8T_data_L%100/10+0x30;    // 小數后一位
  189.        str_T[8]=U8T_data_L%10+0x30;        // 小數后兩位
  190.        str_T[9] = ' ' ;
  191.        str_T[10] = 'C' ;
  192.        str_T[11] = ' ' ;
  193.        str_T[12] = ' ' ;
  194.       
  195.        str_H[0] = 'H';
  196.        str_H[1] = 't';
  197.        str_H[2] = 'y';
  198.        str_H[3] = ':';                       // 濕度
  199.        str_H[4]=U8RH_data_H%100/10+0x30;   // 整數十位
  200.        str_H[5]=U8RH_data_H%10+0x30;          // 整數個位
  201.        str_H[6] = '.';
  202.        str_H[7]=U8RH_data_L%100/10+0x30;      // 小數后一位
  203.        str_H[8]=U8RH_data_L%10+0x30;          // 小數后兩位
  204.        str_H[9]= ' ';
  205.        str_H[10]= '%';
  206.        str_H[11]= 'R';
  207.        str_H[12]= 'H';
  208.        str_H[13]= ' ';
  209.        str_H[14]= ' ';      
  210.        str_H[15]= '\x0a';                                    
  211.       
  212.        send_string_com(str_T,13);
  213.        send_string_com(str_H,16);

  214.        LcdShowStr(0, 0, str_T);        //顯示到液晶屏上
  215.        LcdShowStr(0, 1, str_H);        //顯示到液晶屏上
  216.        LED =~LED;
  217.        //讀取模塊數據周期不宜小于 2S
  218.        Delay(20000);
  219.     }//elihw
  220.    
  221. }

  222. /* 串口配置函數,baud-通信波特率 */
  223. void ConfigUART(unsigned int baud)
  224. {
  225.     SCON  = 0x50;  //配置串口為模式1
  226.     TMOD &= 0x0F;  //清零T1的控制位
  227.     TMOD |= 0x20;  //配置T1為模式2
  228.     TH1 = 256 - (11059200/12/32)/baud;  //計算T1重載值
  229.     TL1 = TH1;     //初值等于重載值
  230.     ET1 = 0;       //禁止T1中斷
  231.     TR1 = 1;       //啟動T1
  232. }
復制代碼

所有資料51hei提供下載:
藍牙的溫濕度檢測系統的設計.rar (246.55 KB, 下載次數: 336)

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

使用道具 舉報

沙發
ID:523095 發表于 2019-4-27 17:44 | 只看該作者
大家看一看
回復

使用道具 舉報

板凳
ID:746321 發表于 2020-5-8 19:44 | 只看該作者
最近剛好在學單片機,看一看!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 三区四区在线观看 | 欧美日韩国产一区二区三区 | 国产精品99精品久久免费 | 欧美aaaa视频| 国内自拍视频在线观看 | 久久久国产一区二区 | 久草院线| 久久国产免费看 | 亚洲精品福利视频 | 欧美视频中文字幕 | av中文字幕在线播放 | 免费视频二区 | 日日骚网 | www.操com| 欧洲成人午夜免费大片 | 成人小视频在线观看 | 精品国产精品国产偷麻豆 | 亚洲国产精品成人久久久 | 亚洲精品久久久蜜桃网站 | 国产成人精品一区二三区在线观看 | 欧美日韩在线国产 | 国产在线麻豆精品入口 | 亚洲午夜小视频 | 玖玖色在线视频 | 精品久久久久久亚洲精品 | 日日噜噜噜夜夜爽爽狠狠视频, | jvid精品资源在线观看 | 久草电影网 | 欧美激情在线观看一区二区三区 | 99精品国产一区二区三区 | 国产精品99久久久久久宅男 | 国产一区二区av | 日本中文字幕视频 | 毛片网站在线观看 | 亚洲视频三区 | 性福视频在线观看 | 久久精品亚洲精品国产欧美kt∨ | 欧美日韩在线一区二区 | 亚洲一区精品视频 | 99看片网| 国产一级毛片精品完整视频版 |