历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2020年01月29日 | protues仿真实现DHT11以及51单片机源程序

2020-01-29 来源:51hei

protues仿真DHT11显示温湿度
仿真原理图如下

DHT11单片机源程序如下:

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit Data=P3^6;   //定义数据线

uchar rec_dat[9];   //用于显示的接收数据数组


sbit lcdrs=P3^0;

sbit lcdrw=P3^1;

sbit lcden=P3^2;




void delay(uint n)

{  uint x,y; 

   for(x=n;x>0;x--) 

       for(y=110;y>0;y--); 




void write_com(uchar com)

{

        lcdrs=0;                        //rs=0时输入指令

        P2=com;

        delay(5);

        lcden=1;                        //en=1时读取信息

        delay(5);

        lcden=0;                        //1 -> 0 执行指令

}


void write_dat(uchar dat)

{

        lcdrs=1;                         //rs=1时输入数据

        P2=dat;

        delay(5);

        lcden=1;

        delay(5);

        lcden=0;

}

void init_lcd()

{

        lcden=0;

        lcdrw=0;

        write_com(0x38);          //8位数据,双列,5*7字形

        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);   //延时18ms以上

   Data=1;

   DHT11_delay_us(30);

}


uchar DHT11_rec_byte()      //接收一个字节

{

   uchar 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时,使dat加1来接收数据1

         dat+=1;

      while(Data);  //等待数据线拉低    

    }  

    return dat;

}


void DHT11_receive()      //接收40位的数据

{

    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);  //拉高后延时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';

    }

}


/*这里使用lcd1602来显示采集到的数据,lcd1602驱动程序在博主的51单片机系列博文中有详细讲解*/

void main()

{

   uchar i;   

   init_lcd();   //lcd1602初始化

   while(1)

   {   

       DHT11_delay_ms(100);    //DHT11上电后要等待1S以越过不稳定状态在此期间不能发送任何指令

       DHT11_receive();

       write_com(0x80);   //从lcd1602第一行第一个位置开始显示

       for(i=0;i<9;i++)

       write_dat(rec_dat[i]);   //显示数据   

           write_com(0x80+0x40);

           write_dat(0x2d);

                 write_dat(0x42);

                 write_dat(0x3a);                

……………………




推荐阅读

史海拾趣

芯源半导体(CW)公司的发展小趣事

为了进一步提升公司的竞争力,芯源半导体(CW)公司开始实施国际化战略。公司积极拓展海外市场,参加国际展会和论坛,与国际同行进行交流与合作。同时,公司还设立了海外研发中心,引进国际优秀人才和技术资源,以加强公司的研发实力和市场竞争力。这些举措使芯源半导体(CW)公司在国际市场上逐渐崭露头角。

FCI connector [富加宜连接器]公司的发展小趣事

自FCI成立以来,公司凭借其专业的设计、精密的制造工艺和创新精神,迅速在全球连接器市场上崭露头角。通过不断的技术创新和产品升级,FCI逐渐成为了全球领先的连接器制造商之一。其产品线涵盖了通讯、电源、医疗等多个领域,为全球众多知名品牌提供了优质的连接器解决方案。

ET Enterprises Ltd公司的发展小趣事

ET Enterprises Ltd公司的历史可以追溯到1930年代,当时它作为EMI公司的一部分,开始涉足光检测技术领域。在这个早期阶段,公司致力于研究光信号的特性及其检测方法,为后续的光电倍增管技术奠定基础。

Delta Electronics公司的发展小趣事

Delta Electronics在电源管理技术方面一直处于行业领先地位。公司不断投入研发资源,推动电源技术的创新和进步。其中,Delta开发的高效率开关式电源供应器,以其高效、稳定和可靠的性能,赢得了全球客户的广泛认可。此外,公司还积极推广绿色能源和节能技术,为客户提供环保、节能的电源解决方案。

德尔创(Dersonic)公司的发展小趣事

在品质和品牌建设的基础上,德尔创开始积极拓展市场。公司首先在国内市场进行了深入布局,通过优化销售网络和提供优质的售后服务,逐渐赢得了客户的信任和支持。同时,德尔创也积极寻求国际合作机会,与多家国际知名企业建立了长期稳定的合作关系。这些合作不仅为公司带来了更多的订单和市场份额,还促进了德尔创在技术和管理方面的进一步提升。

ACI [Applied Concepts, Inc.]公司的发展小趣事

随着全球电子市场的不断扩大,ACI公司开始将目光投向海外市场。公司积极实施国际化战略,通过设立海外分支机构、参加国际展会等方式拓展市场。同时,ACI还加强了与国际同行的交流与合作,共同推动电子行业的发展。通过国际化布局,ACI成功打开了海外市场的大门,为公司的发展注入了新的动力。

问答坊 | AI 解惑

【EEWORLD模块整理】+三相正弦变频电源模块

三相正弦变频电源也是一个不小的设计了,单独的模块化制作比较少见,基本上都是一个整体的设计或者是一个产品 整理了一些不同的实现方案,供大家参考~~~~~~~~~     …

查看全部问答>

这个NTC电阻最低阻值是多少,最高阻值又是多少呢

本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata …

查看全部问答>

请教 usb function client driver

1. WinCE上的ActiveSync使用的是哪一个function client driver? webcast上一篇课程说使用的是RNDIS,但是我的开发板上注册表HKLM/drivers/usb/functiondrivers/DefaultClientDriver的值为serial_class。一旦该值改变,则activesync不可使用。这是否 ...…

查看全部问答>

笔针长时间点击触摸屏问题

WINCE中(pocket PC)有长时间点击触摸屏后出现右键菜单的功能,现在我不想要这个功能了,请问怎么屏蔽掉。就是说当我用笔针长时间点击触摸屏要它既不会出现画圈圈,也不会出现右键属性菜单,请问怎么实现,谢谢了。…

查看全部问答>

WINCE 关机函数

问一下,,在WINCE5中当我按下一关机按扭时WINCE会调用那一个函数呀,,就在PB5中的那一个文件的函数可以去调用硬件实现软关机,而不是拔掉电源…

查看全部问答>

怎样做驱动开发

怎样做驱动开发 给点建议…

查看全部问答>

Linux下写一段代码检测USB设备插入或拔出

要求得到设备的PID/VID等信息.. 小弟毫无LINUX经验..不知道怎么下手...哪位高人能给个思路? 是不是应该先用VC写一个找找灵感...?但是LINUX下有API用么!!!!急啊!!再线等..…

查看全部问答>

装SQL CE 2.0时总是出现"the compu ter that you specified is not configured for NTFS.you

装SQL CE 2.0时总是出现\"the compu ter that you specified is not configured for NTFS.you do not have to set permissions\",整整一天了都没法解决,请高手指点迷津!谢谢…

查看全部问答>