找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2086|回复: 0
打印 上一主题 下一主题
收起左侧

atmega16 驱动dht11,一直不好使,求大神指点

[复制链接]
跳转到指定楼层
楼主
ID:103094 发表于 2016-3-19 19:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写的atmega16 驱动dht11,一直不好使,求大神指点
#define F_CPU 8000000
#include <avr/io.h>
#include "12864.h"
#define  TRH0 PORTA&=~(1<<0)
#define  TRH1 PORTA|=(1<<0)
#define  TRH_read (PINA&(1<<0))
#define  SET_IN DDRA&=~(1<<0)
#define  SET_OUT DDRA|=(1<<0)
#define u8 unsigned char
u8 date[5];
u8 fengle[5];
u8 humi,humi1,temp,temp1;
static uchar flag;
void mcu_init(void)   //起始信号
{
SET_OUT ;//输出模式
TRH0;
_delay_ms(20);
TRH1;
_delay_us(30);
}
u8 dht_init(void)
{
u8 i=0;
SET_IN;//输入模式
while(TRH_read&&(i<100))//判断dht11拉低电平
{
  i++;
  //_delay_us(1);
}
if(i>=100)return 1;
else i=0;
while((!TRH_read)&&(i<100)) //判断拉高电平
{
  i++;
  //_delay_us(1);
}
if(i>=100)return 1;
else return 0;  //响应成功返回
}
u8 send_one_bit(void)
{
u8 i=0;
while(TRH_read&&(i<100))// 等待拉低电平,等100us不拉低,退出循环
{
  i++;
  //_delay_us(1);
}
i=0;
while((!TRH_read)&&(i<100))// 等待拉高电平
{
  i++;
  //_delay_us(1);
}
_delay_us(30);
if(TRH_read) return 1; //延时40us,如果输出仍为高电平,表示信号为高电平,返回电平1
else return 0; //
}
u8 send_one_byte(void)
{
u8 i,dat=0;
for(i=0;i<8;i++)
{
  dat<<=1;
  dat|=send_one_bit();
}
return dat;
}
void send_date()
{
u8 i;
mcu_init();//起始信号
if(dht_init()==0) //收到响应信号
{
  for(i=0;i<5;i++)    //发数据
  {
   date[i]=send_one_byte();
  }
  if(date[0]+date[1]+date[2]+date[3]==date[4])
  {
   flag++;
   fengle[0]=date[0];
   fengle[1]=date[1];
   fengle[2]=date[2];
   fengle[3]=date[3];
  }
}
}
void display()
{  send_cmd(0x80);
  send_data(0x30+fengle[0]/10);
  send_data(0x30+fengle[1]%10);
  send_cmd(0x98);
  send_data(0x30+fengle[2]/10);
  send_data(0x30+fengle[3]%10);
  send_cmd(0x88);
  send_data(0x30+flag/10);
  send_data(0x30+flag%10);
}
void main()
{
init_12864();
while(1)
{
  send_date();
  display();
}

}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表