#include <STC12C5A60S2.H>
#include <intrins.h>
#define TRUE 1
#define FALSE 0
#define DHT11_WAIT_TIME_OUT_INIT_VALUE 64536
sbit D = P2^6; //DHT11 Data Line
unsigned char byHumidityValue,byTemperatureValue; //求得的湿度、温度数据
unsigned char dataBuf[5]= {0};
extern unsigned char dis1[16];
void Delay20us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 52;
while (--i);
}
void Delay10us() //@11.0592MHz
{
unsigned char i;
_nop_();
_nop_();
_nop_();
i = 24;
while(--i);
}
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);
}
unsigned char ReadDHT11(void)
{
unsigned char i=0,x,bychecksum=0;
unsigned short data wCounter;
D=0;
Delay18ms(); //>18ms
D=1;
Delay20us();
Delay10us(); //20~40us
Delay20us();
Delay10us();
wCounter = 2;
//while(!D)
while((!D)&&(wCounter++))
{
; //80us L响应信号
}
if(wCounter==1)
{
//等待超时,DHT11没有响应
return FALSE;
}
Delay20us();
Delay10us();
wCounter = DHT11_WAIT_TIME_OUT_INIT_VALUE;
//while(D); //80us H
while((D)&&(wCounter++))
{
; //80us H
}
if(wCounter==1)
{
return FALSE;
}
Delay20us();
Delay10us();
// while(!D); //50us L 数据开始标志
wCounter = DHT11_WAIT_TIME_OUT_INIT_VALUE;
while((!D)&&(wCounter++))
{
;
}
if(wCounter==1)
{
return FALSE;
}
for(i=0; i<40; i++)
{
Delay20us();
Delay10us();
if(D)
{
//1
x=1;
//while(D);
wCounter = DHT11_WAIT_TIME_OUT_INIT_VALUE;
while((D)&&(wCounter++))
{
;
}
if(wCounter==1)
{
return FALSE;
}
Delay20us();
Delay10us();
//while(!D);
wCounter = DHT11_WAIT_TIME_OUT_INIT_VALUE;
while((!D)&&(wCounter++))
{
;
}
if(wCounter==1)
{
return FALSE;
}
}
else
{
//0
x=0;
//while(!D);
wCounter = DHT11_WAIT_TIME_OUT_INIT_VALUE;
while((!D)&&(wCounter++))
{
;
}
if(wCounter==1)
{
return FALSE;
}
}
dataBuf[i/8]<<=1;
dataBuf[i/8]|=x;
}
for(i=0; i<4; i++)
{
bychecksum = bychecksum+dataBuf[i];
}
if(bychecksum==dataBuf[4])
{
if((dataBuf[0]>100)||(dataBuf[2]>50))
{
return FALSE;
}
else
{
return TRUE;//检查和正确,保存温湿度
}
}
else
{
return FALSE;
}
}
void ReadHumidityTemperature(void)
{
if(ReadDHT11()==TRUE)
{
//读DHT11正确
byHumidityValue = dataBuf[0];
//湿度整数部分
dis1[3] = (char)(0X30+byHumidityValue/10);
dis1[4] = (char)(0X30+byHumidityValue%10);
dis1[5] = 0x25; //%
byTemperatureValue = dataBuf[2];
//温度整数部分
dis1[12] = (char)(0X30+byTemperatureValue/10);
dis1[13] = (char)(0X30+byTemperatureValue%10);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
智能风扇散热控制系统的设计: 设计内容:硬件部分:单片机模块、温度检测模块、按键模块、辅助电路模块、显示模块、电机驱动模块,电路中所用元器件的参数要有计算,所有硬件电路的电路原理图及PCB板图要完整。软件设计部分:要有流程图,有软件代码。功能:能够根据温度的高低自动调节风扇转速,可设置温度门限并显示当前温度值。
资源推荐
资源详情
资源评论
收起资源包目录
智能风扇散热系统(温度、1602、PWM)3.0完整(删批准).zip (50个子文件)
智能风扇散热系统(温度、1602、PWM)3.0完整(删批准)
HARDWARE
DHT11
DHT11.c 3KB
DHT11.H 339B
DS18B20
DS18B20.c 2KB
DS18B20.h 336B
KEY
key.h 275B
key.c 3KB
LCD1602
lcd1602.h 681B
lcd1602.c 1KB
USER
main.h 201B
温湿度检测_uvproj.bak 15KB
温湿度检测_uvopt.bak 58KB
Objects
STC12C5A60S2.h 18KB
温湿度检测.uvgui.Administrator 78KB
温湿度检测.uvopt 8KB
温湿度检测.uvgui_Administrator.bak 78KB
温湿度检测.uvproj 14KB
Listings
TimeInterrupt1.lst 2KB
key.lst 7KB
Time0.lst 2KB
lcd1602.lst 3KB
温湿度检测.m51 28KB
usart.lst 4KB
main.lst 6KB
EEPROM.lst 3KB
DS18B20.lst 4KB
DHT11.lst 7KB
main.c 2KB
SYS
TimeInterrupt 1
TimeInterrupt1.h 88B
TimeInterrupt1.c 696B
usart
usart.c 2KB
usart.h 174B
EEPROM
EEPROM.c 1KB
EEPROM.h 1KB
Time0
Time0.c 554B
Time0.h 242B
OBJ
温湿度检测.plg 284B
温湿度检测.lnp 211B
key.obj 5KB
key.__i 260B
Time0.obj 3KB
温湿度检测.hex 5KB
DS18B20.obj 6KB
usart.obj 3KB
EEPROM.obj 5KB
lcd1602.obj 5KB
TimeInterrupt1.obj 2KB
温湿度检测.build_log.htm 1KB
main.obj 7KB
温湿度检测 26KB
DHT11.obj 7KB
共 50 条
- 1
资源评论
- 郭逗2023-07-29这个源程序的设计充分考虑到了51单片机的特点和限制,实现了智能化控制功能,提升了系统的整体性能。
- 高中化学孙环宇2023-07-29文件的作者将实际应用需求与软硬件条件结合得很好,为用户提供了一个可靠、实用的解决方案。
- 阿葱的葱白2023-07-29文件内容清晰简洁,易于理解和操作,是初学者入门学习的好素材。
- Period熹微2023-07-29这个源程序提供了一个实用且高效的风扇散热系统,确保了设备的稳定性和安全性。
- 老光私享2023-07-29通过合理的算法和优化的代码,风扇的转速和温度之间的关系得以精确控制,从而延长了风扇的使用寿命。
qq_38690258
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功