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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+DHT11+DS18B20智能報警源程序

[復制鏈接]
跳轉到指定樓層
樓主
      下面是我做的溫度報警,溫度在30-35之間報警,溫度顯示在數碼管上面,dht11模塊的數值顯示在1602液晶顯示屏上面,能夠獲取實時的溫度和適度.
      原理圖如下:


      部分代碼:

#include "reg52.h"
#include<intrins.h>
#include "XMF_DS18B20_51.h"

#define uchar unsigned char
#define uint unsigned int

sbit beep=P3^0;
sbit Data=P3^7;   
uchar rec_dat[16];   

sbit lcdrs=P3^5    ;
sbit lcdrw=P3^4;
sbit lcden=P3^3;



const char SMGNoDot_CC[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
const char SMGDot_CA[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

unsigned int temp = 0;

unsigned char Send_dat[6] = {0xbf,0x00,0x00,0x00,0x00,0xfb};

void Delay(unsigned int t);
void DelaySMG(unsigned int t);
void DisplaySMG_Bit(unsigned char pos, unsigned char dat);
void ShowTemperature();
void ReadTemperature();
void bee(void);
void write_com(uchar com);
void write_dat(uchar dat);
void init_lcd();
void DHT11_delay_us(uchar n);
void DHT11_delay_ms(uint z);
void DHT11_start();
uchar DHT11_rec_byte();
void DHT11_receive();  

void main()
{        uchar rec_date[]={'C','R','S',':','1','9','1','1','1','3','0','6','1','3','2'};
  uchar i,a;   
   init_lcd();  
    while(1)
    {
        ReadTemperature();
        ShowTemperature();  
   
        bee();
        
        DHT11_delay_ms(100);   
    DHT11_receive();
    write_com(0x80);  
    for(i=0;i<16;i++)
        write_dat(rec_dat[ i]);   
        write_com(0x80+0x40);
        for(a=0;a<17;a++)
        write_dat(rec_date[a]);   
     }
        
    }


void Delay(unsigned int t)
{
    while(t--)
    {
        ShowTemperature();
        DelaySMG(100);
    }
}

void DelaySMG(unsigned int t)
{
    while(t--);
   
}



void ShowTemperature()
{            

P0=0x01;
P1=SMGNoDot_CC[temp/100];
DelaySMG(300);
P1=0xff;

P0=0x02;
P1=SMGDot_CA[temp%100/10];
DelaySMG(300);
P1=0xff;

P0=0x04;
P1=SMGNoDot_CC[temp%10];
DelaySMG(300);
P1=0xff;

P0=0x08;
P1=0xc6;
DelaySMG(200);
P1=0xff;   

}



void ReadTemperature()
{
    unsigned char LSB,MSB ;
   
    Init_DS18B20();                    
    Write_DS18B20(0xCC);        
    Write_DS18B20(0x44);   
    Delay(100);
    Init_DS18B20();
    Write_DS18B20(0xCC);        
    Write_DS18B20(0xBE);        
    LSB = Read_DS18B20();        
    MSB = Read_DS18B20();        
   
    temp = 0x0000;
    temp = MSB;
    temp <<= 8;
    temp = temp | LSB;
    temp >>= 4;
    temp = temp*10;
    temp = temp + (LSB&0x0f)*0.625;
   
    if((MSB>>4) == 0x0f)
    {
        temp |= 0x8000;
    }   

}

void bee()
{
if(2<(temp/100)>=3||(temp%100/10)>4)
{
  beep=1;
   
    Delay(100);
   
    beep=0;
    Delay(100);
}
else
{

beep=0;
}
}
   







void write_com(uchar com)
{
          lcdrw=0;
        lcdrs=0;                        
        P2=com;
         DelaySMG(5);
        lcden=1;                        
        DelaySMG(5);
        lcden=0;                     
}

void write_dat(uchar dat)
{       lcdrw=0;
        lcdrs=1;                        
        P2=dat;
         DelaySMG(5);
        lcden=1;
       DelaySMG(5);
        lcden=0;
}
void init_lcd()
{       lcdrw=0;
        lcden=0;
      
        write_com(0x38);         
        write_com(0x0c);        
        write_com(0x06);        
        write_com(0x01);

}
void DHT11_delay_us(uchar n)
{
    while(--n);
}

void DHT11_delay_ms(uint z)
{
   uint i,j;
   for(i=z;i>0;i--)
      for(j=110;j>0;j--);
}

void DHT11_start()
{
   Data=1;
   DHT11_delay_us(2);
   Data=0;
   DHT11_delay_ms(30);   
   Data=1;
   DHT11_delay_us(30);
}

uchar DHT11_rec_byte()      
{
   uchar i,dat=0;
  for(i=0;i<8;i++)   
   {         
      while(!Data);   
      DHT11_delay_us(8);     
      dat<<=1;           
      if(Data==1)   
         dat+=1;
      while(Data);   
    }  
    return dat;
}

void DHT11_receive()      
{
    uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);   
        DHT11_delay_us(40);  
        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]='S';
        rec_dat[1]='D';
                rec_dat[2]=':';
        rec_dat[3]='0'+(RH/10);
        rec_dat[4]='0'+(RH%10);
        rec_dat[5]='R';
        rec_dat[6]='H';
                rec_dat[7]=' ';
                rec_dat[8]=' ';
                rec_dat[9]='W';
                rec_dat[10]='D';
                 rec_dat[11]=':';
        rec_dat[12]='0'+(TH/10);
        rec_dat[13]='0'+(TH%10);
        rec_dat[14]='C';
            }
        }

全部代碼51hei附件下載:
Ds18b20報警+DTH11溫濕度顯示.7z (37.38 KB, 下載次數: 38)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91九色在线观看 | 97视频精品| 黄色片在线 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 亚洲一区二区三区在线播放 | 免费午夜视频在线观看 | 久久久久国产 | 91免费在线 | 午夜欧美| 日本午夜网站 | 视频一区二区三区中文字幕 | 一区视频 | 日韩一级一区 | 亚洲国产精品99久久久久久久久 | 日韩高清国产一区在线 | 欧美不卡一区二区三区 | 日韩一区二区三区在线观看视频 | 日韩在线视频免费观看 | 国产精品亚洲一区二区三区在线 | 精品一区电影 | 欧美在线小视频 | 欧美激情一区二区 | 天天综合永久 | av中文字幕在线观看 | 亚洲美女视频 | 久久精品视频网站 | 午夜在线电影网 | 国产精品自产av一区二区三区 | 9191在线观看| 午夜精| 在线播放国产一区二区三区 | 日韩欧美精品在线 | 婷婷色在线 | 免费看a| 久久久婷 | 国产美女一区二区 | 日本一区二区三区在线观看 | 久久国内 | 国产一区二区三区久久久久久久久 | 91成人在线 | 激情久久网 |