找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 1918|回復: 0
打印 上一主題 下一主題
收起左側(cè)

溫度濕度代碼

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:257555 發(fā)表于 2017-12-5 10:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//主程序清單:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
typedef unsigned charuint8;   
typedef unsignedint  uint16;   
typedef unsigned charuchar;
typedef unsigned intuint;
void main()
{
    uchar i;
    RXBUF tmp;
    EA=1;           
    EX0=1;         
    EX1=1;
    IT0=1;         
    IT1=1;
    while(1)
{
   receive(&tmp);      
        for(i=0;i<100;i++)
        {   BCDDisplay(tmp.HZ,tmp.WZ);
            if(tmp.HZ>=25)  DENG2=0;
            else DENG2=1;
            if(tmp.WZ>=30) DENG1=0;
            else DENG1=1;
        }
      }
//溫濕度顯示子程序清單:
void start(void)
{   DHT11_IO=1;
    Delay1();
    DHT11_IO=0;
    Delay2(20);//>18ms
    DHT11_IO=1;
    Delay1();//20-40us
    Delay1();
    Delay1();
    Delay1();
    Delay1();
}
ucharreceive_byte(void)
{  uchar i,temp,count;
    for(i=0;i<8;i++)
    {
        count=2;
        while((!DHT11_IO)&&count++)
//等待50us低電平結(jié)束
        temp=0;
    Delay1();Delay1();Delay1();Delay1();
        if(DHT11_IO==1)temp=1;
        count=2;
        while((DHT11_IO)&&count++);
        if(count==1)break;
        data_byte<<=1;  
        data_byte|=temp;
    }
    return data_byte;
}
void receive(RXBUF*tmp)
{
    uchar check,num_check;
    uchar count;
    start();//開始信號
    DHT11_IO=1;
    if(!DHT11_IO)//讀取DHT11響應信號
    {
        count=2;
        while((!DHT11_IO)&&count++);
//DHT11高電平80us是否結(jié)束
        count=2;
        while((DHT11_IO)&&count++);
        tmp -> HZ = receive_byte();
        tmp -> HX = receive_byte();
        tmp -> WZ = receive_byte();
        tmp -> WX = receive_byte();
        check = receive_byte();
        DHT11_IO=0;//拉低延時50us
        DHT11_IO=1;
        num_check = tmp -> HZ + tmp -> HX + tmp -> WZ + tmp-> WX;
        if(num_check = check)
        {      check =num_check;
        }
    }
}
//外部中斷0的子程序清單:
void int0() interrupt0         
{
    while(WASI==0)
    {
        uint i;     
        for(i=0;i<250;i++)
        {                           
            BEEP= 0;
            DENG4=0;
            mDelay(50);
            BEEP=1;
            DENG4=1;
            mDelay(50);     
            F_Rotation();
        }
        break;
    }                           
    while(WASI==0)
    {                           
        BEEP=0;
        DENG4=0;
        mDelay(150);
        DENG4=1;   
        BEEP=1;
        mDelay(150);
    }
    while(WASI==1)
    {
        B_Rotation();
        break;      
    }                                   
}
void BCDDisplay(ucharH,uchar W)
{   
    BCD_PORT = BCD[W / 100];        
    BCD1 = 0;
    mDelay(10);
    BCD1 = 1;
}
}

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

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