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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

藍牙溫濕度監測系統設計 單片機程序+原理+仿真

[復制鏈接]
跳轉到指定樓層
樓主
//****************************************************************//
//       DHT21使用范例
//單片機 AT89S52 或 STC89C52RC
//功能   串口發送溫濕度數據 晶振 11.0592M 波特率 9600
//硬件   P2.0口為通訊口連接DHT11,DHT11的電源和地連接單片機的電源和地,單片機串口加MAX232連接電腦
//公司  雁凌電子   
//****************************************************************//

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

//----------------------------------------------//
//----------------IO口定義區--------------------//
//----------------------------------------------//
sbit  P2_0  = P2^0 ;
sbit  LED = P3^7;
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void ConfigUART(unsigned int baud);
//----------------------------------------------//
//----------------定義區--------------------//
//----------------------------------------------//
U8  U8FLAG,k;
U8  U8count,U8temp;
U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8  U8comdata;
   
U8 str_T[15];
U8 str_H[15];



       void Delay(U16 j)
    {      U8 i;
        for(;j>0;j--)
      {     
        for(i=0;i<27;i++);

      }
    }
      void  Delay_10us(void)
      {
        U8 i;
        i--;
        i--;
        i--;
        i--;
        i--;
        i--;

       }
   
        void  COM(void)
      {
     
            U8 i;
         
       for(i=0;i<8;i++)      
        {
        
               U8FLAG=2;   
           while((!P2_0)&&U8FLAG++);
            Delay_10us();
            Delay_10us();               
            Delay_10us();
              U8temp=0;
         if(P2_0)U8temp=1;
            U8FLAG=2;
         while((P2_0)&&U8FLAG++);
           //超時則跳出for循環         
            if(U8FLAG==1)break;
           //判斷數據位是0還是1     
              
        // 如果高電平高過預定0高電平值則數據位為 1
            
           U8comdata<<=1;
              U8comdata|=U8temp;        //0
         }//rof
      
    }

    //--------------------------------
    //-----濕度讀取子程序 ------------
    //--------------------------------
    //----以下變量均為全局變量--------
    //----溫度高8位== U8T_data_H------
    //----溫度低8位== U8T_data_L------
    //----濕度高8位== U8RH_data_H-----
    //----濕度低8位== U8RH_data_L-----
    //----校驗 8位 == U8checkdata-----
    //----調用相關子程序如下----------
    //---- Delay();, Delay_10us();,COM();
    //--------------------------------

    void RH(void)
    {
      //主機拉低18ms
       P2_0=0;
       Delay(180);
       P2_0=1;
     //總線由上拉電阻拉高 主機延時20us
       Delay_10us();
       Delay_10us();
       Delay_10us();
       Delay_10us();        
     //主機設為輸入 判斷從機響應信號
       P2_0=1;
     //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行      
       if(!P2_0)         //T !      
       {
       U8FLAG=2;
     //判斷從機是否發出 80us 的低電平響應信號是否結束     
       while((!P2_0)&&U8FLAG++);
       U8FLAG=2;
     //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
       while((P2_0)&&U8FLAG++);
     //數據接收狀態         
       COM();
       U8RH_data_H_temp=U8comdata;
       COM();
       U8RH_data_L_temp=U8comdata;
       COM();
       U8T_data_H_temp=U8comdata;
       COM();
       U8T_data_L_temp=U8comdata;
       COM();
       U8checkdata_temp=U8comdata;
       P2_0=1;
     //數據校驗
     
       U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
       if(U8temp==U8checkdata_temp)
       {
             U8RH_data_H=U8RH_data_H_temp;
             U8RH_data_L=U8RH_data_L_temp;
          U8T_data_H=U8T_data_H_temp;
             U8T_data_L=U8T_data_L_temp;
             U8checkdata=U8checkdata_temp;
       }//fi
       }//fi

    }
//向串口發送一個字符  
void send_char_com(unsigned char ch)
  {     
  SBUF=ch;   
  while(TI==0);   
  TI=0;
  }
//向串口發送一個字符串,strlen為該字符串長度   
void send_string_com(unsigned char *str,unsigned int strlen)
{
   unsigned int k=0;   
   do
   {  
   send_char_com(*(str + k));   
   k++;     
   }
   while(k < strlen);
}
   
//----------------------------------------------
//main()功能描述:  AT89C51  11.0592MHz     串口發
//送溫濕度數據,波特率 9600
//----------------------------------------------
void main()
{   
    ConfigUART(9600);  //配置波特率為9600
    InitLcd1602();     //初始化液晶

    while(1)
    {  

       //------------------------
       //調用溫濕度讀取子程序
       RH();
       //串口顯示程序
       //--------------------------
       str_T[0] = 'T';
       str_T[1] = 'e';
       str_T[2] = 'm';
       str_T[3] = ':';                         // 溫度
       str_T[4]=U8T_data_H%100/10+0x30;    // 整數十位
       str_T[5]=U8T_data_H%10+0x30;        // 整數個位
       str_T[6] = '.';  
       str_T[7]=U8T_data_L%100/10+0x30;    // 小數后一位
       str_T[8]=U8T_data_L%10+0x30;        // 小數后兩位
       str_T[9] = ' ' ;
       str_T[10] = 'C' ;
       str_T[11] = ' ' ;
       str_T[12] = ' ' ;
      
       str_H[0] = 'H';
       str_H[1] = 't';
       str_H[2] = 'y';
       str_H[3] = ':';                       // 濕度
       str_H[4]=U8RH_data_H%100/10+0x30;   // 整數十位
       str_H[5]=U8RH_data_H%10+0x30;          // 整數個位
       str_H[6] = '.';
       str_H[7]=U8RH_data_L%100/10+0x30;      // 小數后一位
       str_H[8]=U8RH_data_L%10+0x30;          // 小數后兩位
       str_H[9]= ' ';
       str_H[10]= '%';
       str_H[11]= 'R';
       str_H[12]= 'H';
       str_H[13]= ' ';
       str_H[14]= ' ';      
       str_H[15]= '\x0a';                                    
      
       send_string_com(str_T,13);
       send_string_com(str_H,16);

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

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


51hei截圖_20200529100941.png (230.94 KB, 下載次數: 44)

51hei截圖_20200529100941.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:707687 發表于 2020-6-23 00:13 | 只看該作者
有文件嗎,求文件
回復

使用道具 舉報

板凳
ID:769099 發表于 2020-6-23 09:51 | 只看該作者
真不錯,謝謝樓主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人国产精品入口免费视频 | 日本三级线观看 视频 | 国产91丝袜在线播放 | 国产中文字幕在线 | 日韩免费网站 | 婷婷久久精品一区二区 | 浮生影院免费观看中文版 | 一区二区三区免费观看 | 精品一区二区av | 国产精品一卡二卡三卡 | 免费在线视频一区二区 | 伊人久操 | 性色av网站 | 欧美成人一级视频 | 成人1区| 一区二区免费视频 | 国产免费一区二区 | 亚洲欧洲视频 | 老司机精品福利视频 | 韩日三级 | 97人人澡人人爽91综合色 | 中文字幕国产高清 | 亚洲精品久久久9婷婷中文字幕 | 三级黄视频在线观看 | 国产精品久久九九 | 国产成人av电影 | 天天色综| 亚洲精品久久久久久久不卡四虎 | 日韩一区在线播放 | 91久久久久久久久久久久久 | 日韩精品一区二区三区四区 | 亚洲精品久久久久久宅男 | 一区二区在线不卡 | 在线播放一区二区三区 | jav成人av免费播放 | 精品久久久久久久久亚洲 | 国产精品美女久久久久aⅴ国产馆 | 毛片免费观看视频 | 欧美色偷拍 | 欧美女优在线观看 | 国产成人精品免费 |