|
功能:用Mega16读出温湿度数据显示到电脑上。
电路图:略(因为和18B20的连接图完全一样也是单总线,呵呵)
程序:传上来了!
感想:略
全部工程文件, IAR5.4
DHT11.rar(文件大小:29K)
小女子成功应用国产温湿度数字探头DHT11成功秀下板子晒下程序!感谢各位老大的教导!
//DHT11.c
#include "CPU_Config.h"
#include "DHT11.h"
uchar DHT11T_Data_H, DHT11T_Data_L, DHT11RH_Data_H, DHT11RH_Data_L;
uchar DHT11_ReadChar(void)
{
uchar dat=0;
uint count; //计数防止死等
for(uchar i=0;i<8;i++)
{
count=2;
while((!READ_DHT11)&&count++) //等待50us低电平结束
;
delay_us(40); //40us
dat <<= 1; //50us低电平+28us高电平表示'0'
if(READ_DHT11) //50us低电平+70us高电平表示'1'
dat |= 1;
count=2;
while((READ_DHT11)&&count++)
;
if(count==1) //超时则跳出for循环
break;
}
return dat;
}
bool DHT11_GetRH(void)
{
uchar TData_H_temp,TData_L_temp,RHData_H_temp,RHData_L_temp,CheckData_temp;
uchar checktemp;
uint count;
SET_DDR_DHT11;
CLR_OP_DHT11;
delay_ms(18); //主机拉低18ms
SET_OP_DHT11;
CLR_DDR_DHT11;
delay_us(40); //总线由上拉电阻拉高 主机延时20us
//主机设为输入 判断从机响应信号
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!READ_DHT11)
{
count=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!READ_DHT11)&&count++)
;
count=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((READ_DHT11)&&count++)
;
RHData_H_temp = DHT11_ReadChar();
RHData_L_temp = DHT11_ReadChar();
TData_H_temp = DHT11_ReadChar();
TData_L_temp = DHT11_ReadChar();
CheckData_temp = DHT11_ReadChar();
SET_DDR_DHT11;
SET_OP_DHT11;
checktemp = (RHData_H_temp + RHData_L_temp + TData_H_temp + TData_L_temp);
if (checktemp == CheckData_temp)
{
DHT11RH_Data_H = RHData_H_temp;
DHT11RH_Data_L = RHData_L_temp;
DHT11T_Data_H = TData_H_temp;
DHT11T_Data_L = TData_L_temp;
return true;
}
}
return false;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|