找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1999|回复: 2
打印 上一主题 下一主题
收起左侧

基于STC89C52的温湿度检测

[复制链接]
跳转到指定楼层
楼主
ID:387070 发表于 2021-4-14 08:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于STC89C52的温湿度检测,一个很经典的传感器测试代码,需要的朋友自己下载哦


//main.c
#include<reg52.h>
#include<intrins.h>
#include "HW_LCD1602.h"
#include "Sys_Define.h"

sbit TRH = P2^2;

int TH_temp,TL_temp,RH_temp,RL_temp,CK_temp,respond,com_data,temp;


void delay(unsigned int i)
{
    while(i--);
}


void delay_ms(unsigned int i)
{
    while(i--)
    delay(90);
}


void Delay18ms()                //@11.0592MHz
{
    unsigned char i, j, k;
   
    _nop_();
    _nop_();
    i = 1;
    j = 194;
    k = 159;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

void Delay10u()
{
    unsigned char i;
    _nop_();
    _nop_();
    _nop_();               
    i = 24;
    while (--i);
}


//-------dht11函数区---------
char DHT11_rec_byte()
{   
    char i;
    com_data=0;
    for(i=0;i<=7;i++)   
    {
        respond=2;
        while((!TRH)&&respond++);
        Delay10u();
            

        Delay10u();
                        

        Delay10u();
        if(TRH)
        {
            temp=1;
            respond=2;
            while((TRH)&&respond++);
        }
        else
        temp=0;
        com_data<<=1;
        com_data|=temp;   
    }
    return(com_data);  
}


/************************************************************

****************/
//湿度读取子程序
//温度高8位== TH_data
//温度低8位== TL_data
//湿度高8位== RH_data
//湿度低8位== RL_data
//校验 8位 == CK_data
//调用的程序有 delay();, Delay_5us();,RECEIVE();
/************************************************************

***************/
void DHT11_receive()
{
    //主机拉低18ms
    TRH=0;
    Delay18ms();
    TRH=1;
    //DATA总线由上拉电阻拉高 主机延时50us
                                    

    Delay10u();
                                             

    Delay10u();
    //delay_us();delay_us();delay_us();delay_us();
    //主机设为输入 判断从机响应信号
    TRH=1;
    //判断DHT11是否有低电平响应信号 如不响应则跳出,

    //响应则向下运行   
    if(!TRH)   
    {
        respond=2;
        //判断DHT11发出 80us 的低电平响应信号是否

        //结束
        while((!TRH)&& respond++);
        respond=2;
        //判断从机是否发出 80us 的高电平,如发出则

        //进入数据接收状态
        while(TRH && respond++);
        //数据接收状态   
        RH_temp = DHT11_rec_byte();
        RL_temp = DHT11_rec_byte();
        TH_temp = DHT11_rec_byte();
        TL_temp = DHT11_rec_byte();
        CK_temp = DHT11_rec_byte();
        TRH=1;
    }                                                     

                  
}


void LCD_DisTemAndHum(u16 Tem,u16 Hum)
{
    u8 T_Decade=0,T_Digtal=0;
    u8 H_Decade=0,H_Digtal=0;

    T_Decade = Tem/10;
    T_Digtal = Tem%10;

    H_Decade = Hum/10;
    H_Digtal = Hum%10;
   
    Write_Com(0x80+5);
    Write_Date(0x30+T_Decade);
    Write_Date(0x30+T_Digtal);
   
    Write_Com(0x80+13);
    Write_Date(0x30+H_Decade);
    Write_Date(0x30+H_Digtal);   
}

void main(void)
{
    LCD_Init();
    Dis_Init();

    DHT11_receive();   //温湿度读取

    Delays(200);
    while(1)
    {
        LCD_DisTemAndHum(TH_temp,RH_temp);
        
        DHT11_receive();   //温湿度读取   
        Delays(100);   
    }         
}


温湿度检测.zip

56.18 KB, 下载次数: 23, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:372579 发表于 2021-7-2 17:20 来自手机 | 只看该作者
配上电路图更好
回复

使用道具 举报

板凳
ID:82944 发表于 2021-9-24 21:24 | 只看该作者
配上电路图更好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表