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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3425|回復: 0
收起左側

基于51單片機實現實時測量溫濕度以及距離顯示

[復制鏈接]
ID:457999 發表于 2019-12-26 16:18 | 顯示全部樓層 |閱讀模式
一、整體介紹
實時監測空氣中的溫度與濕度,測試范圍內的距離,在LCD1602液晶顯示器上面顯示溫度濕度,時間,在數碼管上面顯示距離。
使用了DTH11溫濕度模塊,LCD1602模塊,DS1302模塊,HC-SR04超聲波模塊,蜂鳴器,數碼管。
硬件:基于KST-51開發板,芯片是STC89C52RC
軟件:keil編譯器,stc下載工具
二、項目硬件介紹
DHT11是一款有已校準數字信號輸出的溫濕度傳感器。 其精度 濕度+-5%RH, 溫度+-2℃,量程濕度20-90%RH, 溫度0~50℃。

DS1302模塊內含一個實時時鐘/日歷和31字節靜態RAM,可以通過串行接口與單片機進行通信。實時時鐘/日歷電路提供秒、分、時、日、星期、月、年的信息,每個月的天數和閏年的天數可自動調整,時鐘操作可通過AM/PM標志位決定采用24或12小時時間格式

HC-SR04超聲波模塊:
(1)采用IO口TRIG觸發測距,給至少10us的高電平信號;
(2)模塊自動發送8個40khz的方波,自動檢測是否有信號返回;
     (3)有信號返回,通過IO口ECHO輸出一個高電平,高電平持續的時間就是超聲波從發射到返回的時間。測試距離=(高電平時間*聲速(340M/S))/2;
DS1302模塊:VCC--à+5v   GND--àGND    CLK--àP1^7   DAT--àP3^4   RST--àP3^5
HC-SR04超聲波模塊: VCC--à+5v  GND--àGND   TRIG--àP2^0    ECHO--àP2^1
DHT11模塊: VCC--à+5v  GND--àGND    OUT--àP3^0
三、軟件介紹
DHT11模塊:
  
unsigned char DHT11_rec_byte(){
  
         unsigned  char i,dat=0;
  
   for(i=0;i<8;i++)    //從高到低依次接收8位數據
  
    {         
  
      while(!Data);   ////等待50us低電平過去
  
      DHT11_delay_us(8);     //延時60us,如果還為高則數據為1,否則為0
  
      dat<<=1;           //移位使正確接收8位數據,數據為0時直接移位
  
      if(Data==1)    //數據為1時,使dat1來接收數據1
  
         dat+=1;
  
      while(Data);  //等待數據線拉低   
  
     }  
  
     return dat;
  
}
  
  
unsigned char* DHT11_receive(){
  
                   unsigned  char rec_dat[9];
  
           unsigned char  R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  
  
                   Data=1;
  
     DHT11_delay_us(2);
  
     Data=0;
  
     DHT11_delay_ms(20);   //延時18ms以上
  
     Data=1;
  
     DHT11_delay_us(30);
  
  
     if(Data==0)
  
     {
  
        while(Data==0);   //等待拉高     
  
        DHT11_delay_us(40);  //拉高后延時80us
  
        R_H=DHT11_rec_byte();    //接收濕度高八位  
  
        R_L=DHT11_rec_byte();    //接收濕度低八位  
  
        T_H=DHT11_rec_byte();    //接收溫度高八位  
  
        T_L=DHT11_rec_byte();    //接收溫度低八位
  
        revise=DHT11_rec_byte(); //接收校正位
  
  
        DHT11_delay_us(25);    //結束
  
  
        if((R_H+R_L+T_H+T_L)==revise)      //校正
  
        {
  
            RH=R_H;
  
            RL=R_L;
  
            TH=T_H;
  
            TL=T_L;
  
        }
  
        /*數據處理,方便顯示*/
  
        rec_dat[0]='0'+(RH/10);
  
        rec_dat[1]='0'+(RH%10);
  
        rec_dat[2]='R';
  
        rec_dat[3]='H';
  
        rec_dat[4]=' ';
  
        rec_dat[5]=' ';
  
        rec_dat[6]='0'+(TH/10);
  
        rec_dat[7]='0'+(TH%10);
  
        rec_dat[8]='C';
  
     }
  
                   return  rec_dat;
  
}
  


DS1302模塊
  
//用單次寫操作向寄存器寫入一個字節
  
void DS1302SingleWrite(unsigned  char reg, unsigned char dat)
  
{
  
         DS1302_CE  = 1;        //使能片選信號
  
         DS1302ByteWrite((reg<<1)  | 0x80);        //發送寫寄存器指令
  
         DS1302ByteWrite(dat);            //寫入字節數據
  
         DS1302_CE  = 0;
  
}
  
  
//用單次讀操作從某一寄存器讀取一個字節
  
unsigned char  DS1302SingleRead(unsigned char reg)
  
{
  
         unsigned  char dat;
  
  
         DS1302_CE  = 1;
  
         DS1302ByteWrite((reg<<1)  | 0x81);                 //發送讀寄存器指令
  
         dat  = DS1302ByteRead();                   //讀取字節數據
  
         DS1302_CE  = 0;
  
  
         return  dat;
  
}
  

HC-SR04超聲波模塊:
  
                                     init_time();  //初始化定時器
  
        flag = 0;    //置溢出標志位為0
  
        //控制口發一個10US 以上的高電平
  
        TRIG = 1;   
  
        delay(3);
  
        TRIG = 0;
  
        //等待接收端出現高電平
  
        while(!ECHO);
  
        TR0 = 1; //啟動計時器 開始計時
  
        while(ECHO); //等待高電平結束
  
        TR0 = 0; //關閉低電平
  
  
        out_TH0 = TH0; //取定時器的值
  
        out_TL0 = TL0;
  
        out_TH0 <<= 8;  //右移8
  
        distance = out_TH0 | out_TL0; //合并為16位的值  
  
        distance *= 0.017;
  
  
        if(flag == 1) //如果定時器溢出  則超出超聲波測量范圍
  
        {
  
            display(-1);
  
            flag = 0;
  
        }
  
        else
  
        {
  
            for(y =5; y >=0; y--)//加此循環只是為了將結果在數碼管上停留時間長點便于觀察
  
            {
  
                display(distance);
  
            }
  
        }
  
        delay(1000);//60ms的周期,這里不是6ms,太多會閃爍。
  


項目.rar

75.01 KB, 下載次數: 18, 下載積分: 黑幣 -5

源碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩手机在线看片 | 一区二区三区国产视频 | 亚洲一区二区三区高清 | 精品久久久久久久久久久 | 亚洲国产精品久久久久婷婷老年 | 日本在线小视频 | 国产精品免费一区二区三区四区 | www.久久99 | 免费看爱爱视频 | 亚洲一区二区三区视频 | 色婷婷一区二区三区四区 | 欧美国产日韩一区二区三区 | 无毛av | 成人久久视频 | 亚洲va国产日韩欧美精品色婷婷 | 正在播放一区二区 | 殴美黄色录像 | 国产高清在线观看 | 久久久精品久久 | 精品国产一区二区三区久久影院 | 国产精品色哟哟网站 | 91精品亚洲 | 亚洲成人精品一区 | 日日日干干干 | 91久久精品国产91久久 | 成人在线观 | 亚洲高清在线 | 亚洲综合99 | 成人精品国产免费网站 | 男人的天堂在线视频 | 欧美精品久久久久 | 日韩黄| 日韩视频一区在线观看 | 99久热在线精品视频观看 | 成人做爰9片免费看网站 | 日本又色又爽又黄的大片 | 精品欧美激情精品一区 | 国产精品18久久久久久久 | 一区二区精品视频 | 亚洲精品一二三 | 一区二区三区免费观看 |