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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于用DH11 和89c52測濕度代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:252122 發表于 2017-11-21 23:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uchar DHT11[5],RTflag=0;
uchar FLAG; //超時標志位
uchar a;
sbit dat=P2^7;
sbit RS=P2^3;
sbit RW=P2^4;
sbit EN=P2^5;
uchar table[5];
uint wd,sd;

void Delay_t(uint j)
{        
        uchar i;
        for(;j>0;j--)
                {
                        for(i=0;i<27;i++);
                }
}

void Delay_10us(void) //10us延時函數

{
        uchar i;
        i--;
        i--;
        i--;
        i--;
        i--;
        i--;
}

void delay(uint z)//1毫秒延時函數
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

void lcd_write_com(uchar com) //1602寫指令
{
        RS=0;
        RW=0;
        EN=1;
        P0=com;
        delay(1);
        EN=0;
}

void lcd_init()        //1602初始化
{
        lcd_write_com(0x38);
        delay(1);
        lcd_write_com(0x08);
        delay(1);
        lcd_write_com(0x01);//1602清屏指令
        delay(1);
        lcd_write_com(0x06);
        delay(1);
        lcd_write_com(0x0C);
        delay(1);
}

void lcd_write_data(uchar date)//1602寫數據
{
        RS=1;
        RW=0;
        EN=1;
        P0=date;
        delay(1);
        EN=0;
}

void write_str(uchar x,uchar y,uchar *s)//在任意地址寫符號字母或數字
{
        if(y==0)
                lcd_write_com(0x80+x);
        else
                lcd_write_com(0xc0+x);
        while(*s)
        {
                lcd_write_data(*s);
                s++;
        }
}

        void write_shu(uchar x,uchar y,uchar num)//數據顯示函數
{
        uchar s,g;
        if(y==0)
                lcd_write_com(0x80+x);
        else
                lcd_write_com(0xc0+x);
        s=num/10;// 數據分離顯示
        lcd_write_data(0x30+s);
        g=num%10;//數據分離顯示
        lcd_write_data(0x30+g);
}

uchar write_byte1() //讀一個字節
{
        uchar i,comdata,temp1;
        for(i=0;i<8;i++)
        {
                FLAG=2;
                while((!dat)&&FLAG++);//判斷數據位是0還是1
                Delay_10us();       
                Delay_10us();
                Delay_10us();
                temp1=0;
        if(dat)temp1=1;        // 如果高電平高過預定0高電平值則數據位為 1
                FLAG=2;
        while((dat)&&FLAG++);//flag先與后加1 如果dat一直為1 uchar型變量 flag 溢出變為0 再自加1
        if(FLAG==1)break;        //超時則跳出for循環
        comdata<<=1;//左移一位 高位在前 低位在后
        comdata|=temp1;
        }
        return (comdata);

}

void DHT11_5() //讀5個字節數據 兩個字節為溫度數據 兩個字節為濕度數據 最后一個字節為校驗

{

        uchar i,temp;
        //主機拉低18ms
        dat=0;
        Delay_t(180);
        dat=1;
        //總線由上拉電阻拉高 主機延時20us
        Delay_10us();
        Delay_10us();
        Delay_10us();
        Delay_10us();
        //主機設為輸入 判斷從機響應信號
        dat=1;
        //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行
        if(!dat)        //T !
        {
                FLAG=2;        //超時標志位
                while((!dat)&&FLAG++);//判斷從機是否發出 80us 的低電平響應信號是否結束
                FLAG=2;
                while(
                (dat)&&FLAG++); //判斷從機拉高80us是否結束
                for(i=0;i<5;i++)//數據接收狀態
                {
                        DHT11[i]=write_byte1();
                }
                dat=1;        //釋放數據總線 為下一次讀取做好準備
                temp=(DHT11[0]+DHT11[1]+DHT11[2]+DHT11[3]);
                if(temp==DHT11[4])        //數據校驗
                {
                        RTflag=1;
                }
                if(RTflag==1) //如果RTflag=1 說明讀取到得數據正確
                {
                        RTflag=0;
                //        tm[0]=DATARHT[0]/10;
                //        tm[1]=DATARHT[0]%10;
                //        tm[2]=DATARHT[1]/10; //濕度
                //        tm[3]=DATARHT[2]/10;
                //        tm[4]=DATARHT[2]%10;
                //        tm[5]=DATARHT[3]/10; //溫度
                write_str(0,0,"measurement ");//第一行顯示濕度
                write_shu(12,0,DHT11[0]);
                write_str(14,0,"RH");
                write_str(0,1,"Temperature ");//第二行為顯示溫度
                write_shu(12,1,DHT11[2]);
                write_str(14,1,"^C");
                }
        }
}

void main()

{
        lcd_init(); //1602初始化
        delay(1000); //等待DHT11溫濕度傳感器數據穩定 開始激活DHT11
        while(1)//循環讀取 并更新數據顯示
        {
                delay(1000);//等待DHT11溫濕度傳感器數據穩定 開始激活DHT11
                write_byte1();//讀一個字節
                DHT11_5(); //讀數據
                delay(1000); //延時等待
        }
}

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

使用道具 舉報

沙發
ID:860754 發表于 2021-7-20 17:34 | 只看該作者
樓主,能留下原理圖碼,我好需要
回復

使用道具 舉報

板凳
ID:895444 發表于 2022-3-25 11:00 | 只看該作者
protues沒有DHT11,怎么整
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年免费大片黄在线观看岛国 | 男女精品网站 | 亚洲经典一区 | 国产精品视频播放 | 青青草原精品99久久精品66 | 亚洲高清在线播放 | 粉嫩国产精品一区二区在线观看 | 亚洲精品国产成人 | 成人av电影免费在线观看 | 日韩欧美字幕 | 国产乱码精品一品二品 | 在线观看国产视频 | 国产精品欧美精品日韩精品 | 国产1区 | 中文字幕国产精品 | 国产小视频自拍 | 91久久国产综合久久 | 午夜一区二区三区 | 日韩一区二区三区视频 | 欧美人妇做爰xxxⅹ性高电影 | 中文字幕一区二区三区精彩视频 | 国产一级在线 | 91精品国产自产在线老师啪 | 激情av在线 | 亚洲天天干 | 国产一区二区在线播放视频 | 中文字幕综合在线 | 四虎成人免费电影 | 在线观看成人 | 高清一区二区三区 | 国产成人精品视频在线观看 | 日本三级线观看 视频 | 久久大香 | 自拍偷拍第一页 | 亚洲国产精品久久久久 | 国产激情视频 | 成人午夜影院 | 神马久久春色视频 | 狠狠干av | 欧美黄 片免费观看 | 久久久久久久久久一区二区 |