主函数如下:
#include<stm32f10x.h>
#include"lcd.h"
#include"key.h"
#include"dht11.h"
static int i=1;
void main()
{
char wen[]={'W','e','n','d','u',':','\0'};
char shi[]={'s','h','i','d','u',':','\0'};
lcd_start();
KEY_Init();
while(1)
{
dht11_start();
if(key)
{
if(i==1)
{
lcd_pw(0x01);
lcd0(wen,0);
i=0;
}
lcd1(dht_gettem(),dht_temget(),6,dat[24]);
}
else
{
if(i==0)
{
i=1;
lcd_pw(0x01);
lcd0(shi,0);
}
lcd2(dht_getwet(),dht_wetget(),6,dat[8]);
}
}
}
DHT11函数如下:
#include<dht11.h>
void stt()
{
dhtout;
dhtreset;
delayms(19);
dhtset; //拉高
}
voiddht11_start()
{
int i=0;
dhtout;
dhtreset;
delayms(18); //延时
dhtin; //拉高
while(dhtre); //等待响应信号
while(!dhtre);
while(dhtre);
dhtout;
dhtset;
dhtin;
for(;i<40;i++) //循环读取四十位数
{
while(!dhtre);
delayus(28);//延时检测信号是长信号还是短信号
if(dhtre==1)
{
dat=1;
while(dhtre); //等待长信号结束
continue;
}
if(dhtre==0)
{
dat=0; //立即准备接受下一个信号
}
}
while(!dhtre);
dhtout;
dhtset;
dhtin;
}
intdht_gettem() //温度获取
{
int dd=0;
int i;
for(i=16;i<24;i++)
{
dd=dd<<1|dat;
}
return dd;
}
intdht_temget() //湿度获取
{
int dc=0;
inti;
for(i=24;i<32;i++)
{
dc=dc<<1|dat;
}
dc=dc&0x7f;
return dc;
}
intdht_getwet()
{
int dd=0;
int i;
for(i=0;i<8;i++)
{
dd=dd<<1|dat;
}
return dd;
}
intdht_wetget()
{
int dc=0;
inti;
for(i=8;i<16;i++)
{
dc=dc<<1|dat;
}
dc=dc&0x7f;
return dc;
}
全部资料51hei下载地址:
代码仿真.7z
(239.53 KB, 下载次数: 113)
|