雨滴传感器模块有了,单片机stc,希望代码能够实现,3
发布网友
发布时间:2023-10-08 02:10
我来回答
共4个回答
热心网友
时间:2023-12-24 05:35
我之前做毕业设计的时候做过,使用ATmega48做的,给你参考下
//H头文件如下:
#ifndef __DHT11_H
#define __DHT11_H
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
extern uchar HH_tem,HL_tem,TH_tem,TL_tem,check;
extern uchar jump;
//***********************************************************************
//定义变量区
//***********************************************************************
#define CLR_BUS(PORTD&=~(1<<PD2)) //总线置低
#define SET_BUS(PORTD|=(1<<PD2)) //总线置高
#define PD2_IN (DDRD&=~(1<<PD2)) //定义PB0为输入
#define PD2_OUT (DDRD|=(1<<PD2)) //定义PB0为输出
#define BUS_READ (PIND&0x04)
uchar Read_Byte(void);
void DHT11_Read(void);
void DHT11_init(void);
#endif
//C文件如下:
#include "iom48v.h"
#include "DHT11.h"
void delay_18ms(void)
{
unsigned char a,b,c;
for(c=21;c>0;c--)
for(b=50;b>0;b--)
for(a=2;a>0;a--);
}
void delay_30us(void)
{
unsigned char a;
for(a=0;a<5;a++);
}
void delay_40us(void)
{
unsigned char a;
for(a=10;a>0;a--);
}
void DHT11_init(void)
{
PD2_OUT;
SET_BUS;
}
uchar Read_Byte(void)
{
uchar i,Rbit,Rdata;
PD2_IN;
SET_BUS;//上拉输入
for(i=0;i<8;i++)
{
jump=2;
while((BUS_READ==0)&&(jump!=0));
delay_30us();
Rbit=0;
if(BUS_READ!=0)
{
Rbit=1;
}
jump=2;
while((BUS_READ!=0)&&(jump!=0));
Rdata=Rdata<<1;
Rdata=Rdata|Rbit;
}
return Rdata;
}
void DHT11_Read(void)
{
PD2_OUT;
CLR_BUS;
delay_18ms();
SET_BUS;
delay_40us();
PD2_IN;
SET_BUS;
jump=2;
while((BUS_READ==0)&&(jump!=0));
jump=2;
while((BUS_READ!=0)&&(jump!=0));
HH_tem=Read_Byte();
HL_tem=Read_Byte();
TH_tem=Read_Byte();
TL_tem=Read_Byte();
check=Read_Byte();
PD2_OUT;
SET_BUS;
}
最后调用
DHT11_Read();
这个函数就可以读数了
热心网友
时间:2023-12-24 05:35
留下你的,企,鹅,号追问813169878
来自:求助得到的回答
热心网友
时间:2023-12-24 05:36
貌似应该在51吧发。。。
热心网友
时间:2023-12-24 05:36
http://pan.baidu.com/s/1bnyAr8b