第一次发帖,不怎么会,承认了。就仅仅是记录一下心得
下面是时序图
- 初始化时序图
2. 读取数据时序图
以上的图是从别人的博客复制的。
下面看一下我的
void DHT11WriteStart(void)//开始标志
{
DHT11_GPIO_OUT(); //输出
gpio_set (DTH11_PORT, 1);
gpio_set (DTH11_PORT, 0);
DELAY_MS(20);
gpio_set (DTH11_PORT, 1);
DELAY_US(30) ;
DHT11_GPIO_IN(); //主机发送信号等待
}
u8 DHT11ReadByte(void)
{
u8 temp=0,i,cout;
for(i=0;i<8;i++)
{
while( gpio_get(DTH11_PORT)==0);//DHT11输出低电平
DELAY_US(60) ;
if(gpio_get(DTH11_PORT)==1) //60us是否高电平,是标志1
{
while(gpio_get(DTH11_PORT)==1)
temp|=(u8)(0x01<<(7-i));
}
else //否表示0
{
temp&=(u8)~(0x01<<(7-i));
}
}
return temp;
}
char a[5];
int temp;
//时序图编写的接受函数
void DHT11Read(void)
{
int count=0;
DHT11WriteStart();
if(DHT11_DATA_IN==0)
{
while(gpio_get(DTH11_PORT)==0);
while(gpio_get(DTH11_PORT) ==1);
DHT11.RH= DHT11ReadByte();
DHT11.RL= DHT11ReadByte();
DHT11.TH= DHT11ReadByte();
DHT11.TL= DHT11ReadByte();
DHT11.sum= DHT11ReadByte();
DHT11_GPIO_OUT();
DHT11_DATA_OUT=1;
}
if(DHT11.sum== DHT11.RH+DHT11.RL+DHT11.TH+DHT11.TL)
{
printf("当前湿度%d.%d,当前温宿%d.%d\r\n",DHT11.RH,DHT11.RL,DHT11.TH,DHT11.TL);
DHT11.TL=2;
}
else
{
printf("\n读取错误");
}
}
我调试时序的时候用了一个串口调试,重点来了,串口发送是需要很多时间,发送一下,就耽误了好多时间。导致时序不对。
如有什么问题,联系一下小弟我就行了
下面的csdn的资源下载,就其实网上那个免费下载的网站复制链接就不用积分, 因为我不知道这个怎么设计积分,我上传了都是5个积分的。大家都懂