资源简介

DHT11驱动,使用STC12C5A单片机测试

资源截图

代码片段和文件信息

//****************************************************************//
//DHT11测试程序
// 
//单片机:STC12C5A 
//功能:  串口发送温湿度数据 晶振 11.0592M 波特率 9600 文本模式 
//        直接显示十进制湿度整数、湿度小数、温度整数、温度小数、校检和,*作间隔 
//硬件:  P0.1口为通讯口连接DHT11DHT11的电源和地连接单片机的电源和地
//作者:  花生(参考雁凌电子基于STC89C52的驱动改编)  
//****************************************************************//

#include  
#include “STC12C5A.h“ 

typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable    无符号8位整型变量  */
typedef signed   char  S8;       /* defined for signed 8-bits integer variable   有符号8位整型变量  */
typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable    无符号16位整型变量 */
typedef signed   int   S16;      /* defined for signed 16-bits integer variable    有符号16位整型变量 */
typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable    无符号32位整型变量 */
typedef signed   long  S32;      /* defined for signed 32-bits integer variable    有符号32位整型变量 */
typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedef double         F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */

sbit  DHT11  = P0^1 ;

U8  U8FLAG;
U8  U8temp;
U8  U8comdata;
U8  U8T_data_HU8T_data_LU8RH_data_HU8RH_data_LU8checkdata;
U8  U8T_data_H_tempU8T_data_L_tempU8RH_data_H_tempU8RH_data_L_tempU8checkdata_temp;
U8  str[17]=“               * “;

void  Delay_10us(void)    //误差 -0.053530092593us
{
    unsigned char a;
    for(a=26;a>0;a--);
}

void delay100us(void)   //误差 -0.083188657407us
{
    unsigned char ab;
    for(b=61;b>0;b--)
        for(a=3;a>0;a--);
    _nop_();  //if Keilrequire use intrins.h
}

void delay18ms(void)   //误差 -0.054253472223us  
{
    unsigned char abc;
    for(c=148;c>0;c--)
        for(b=122;b>0;b--)
            for(a=4;a>0;a--);
}

void  COM(void)
{
U8 i;
for(i=0;i<8;i++)    
{
U8FLAG=2;
while((!DHT11)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(DHT11)
U8temp=1;
U8FLAG=2;
while((DHT11)&&U8FLAG++);
//超时则跳出for循环   
if(U8FLAG==1)
break;
//判断数据位是0还是1  
// 如果高电平高过预定0高电平值则数据位为 1 
U8comdata<<=1;
U8comdata|=U8temp;        
}
}

void RH(void)
{
//主机拉低18ms 
DHT11=0;
delay18ms();
DHT11=1;
//总线由上拉电阻拉高 主机延时20us-40us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号 
DHT11=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行   
if(!DHT11)  //T !   
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束  
while((!DHT11)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((DHT11)&&U8FLAG++);
//数据接收状态  
COM();
U8RH_data_H_temp=U8comdata;//温度高8位
COM();
U8RH_data_L_temp=U8comdata;//温度低8位
COM();
U8T_data_H_temp=U8comdata ;//湿度高8位
COM();
U8T_data_L_temp=U8comdata ;//湿度低8位
COM();
U8checkdata_temp=U8comdata;//校验和8位
DHT11=1;
//数据校验 
U8temp=(U8T_da

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4396  2016-11-25 15:22  DHT11驱动(STC12C5A)\51_DHT21.c

     文件       8891  2016-11-25 15:22  DHT11驱动(STC12C5A)\51_DHT21.LST

     文件       8570  2016-11-25 15:22  DHT11驱动(STC12C5A)\51_DHT21.OBJ

     文件       7374  2016-11-25 15:22  DHT11驱动(STC12C5A)\Proj

     文件       1587  2016-11-25 15:22  DHT11驱动(STC12C5A)\Proj.hex

     文件         29  2016-11-25 15:22  DHT11驱动(STC12C5A)\Proj.lnp

     文件       9041  2016-11-25 15:22  DHT11驱动(STC12C5A)\Proj.M51

     文件       6327  2016-11-25 15:23  DHT11驱动(STC12C5A)\Proj.plg

     文件      55222  2016-11-25 15:23  DHT11驱动(STC12C5A)\Proj.uvopt

     文件      13243  2016-11-24 20:38  DHT11驱动(STC12C5A)\Proj.uvproj

     文件      55230  2016-11-24 20:38  DHT11驱动(STC12C5A)\Proj_uvopt.bak

     文件      13239  2016-11-24 17:14  DHT11驱动(STC12C5A)\Proj_uvproj.bak

     文件      18216  2016-11-23 14:03  DHT11驱动(STC12C5A)\STC12C5A.H

     目录          0  2017-04-12 14:41  DHT11驱动(STC12C5A)

----------- ---------  ---------- -----  ----

               201365                    14


评论

共有 条评论