dht11 c语言程序,dht11的c语言程序.docx

这篇博客介绍了如何使用C语言与DHT11温湿度传感器进行交互,通过定义宏和函数实现数据的读取、校验和数码管显示。关键步骤包括延时处理、数据接收和错误检查,最后在主函数中展示获取到的实时温湿度数据。
AI助手已提取文章相关产品:

#include#define uint unsigned int

#define uchar unsigned char

sbit TRH = P1^0;//温湿度传感器DHT11数据接入

uchar str[]={0,0,0,0,0,0,0,0};

uint TH,TL,RH,RL,CK;

uint THc,TLc,RHc,RLc,CKc;

uint xh,sum;

// void delay(uchar s) //延时10us

// {

// uchar v;

// for(;s>0;s--)

// for(v=25;v>0;v--);

// }

void delay(uchar b) //误差 0us

{

unsigned char a;

for(;b>0;b--)

for(a=2;a>0;a--);

}

//void delay1( )// 延时20ms

//{

//uchar x,y,z;

//for(x=15;x>0;x--)

//for(y=4;y>0;y--)

//for(z=248;z>0;z--);

//}

void delay1(uchar c) //误差 0us

{

unsigned char a,b;

for(;c>0;c--)

for(b=142;b>0;b--)

for(a=2;a>0;a--);

}

void delay2()//数码管显示用的延时

{

uchar l,j,k;

for(l=2;l>0;l--)

for(j=4;j>0;j--)

for(k=100;k>0;k--);

}

void start()

{ TRH=1;

delay(2);

TRH=0; //主机拉低18ms

delay1(20);

TRH=1; //DATA总线由上拉电阻拉高主机延时20

delay(3);

}

uchar receive()

{ uchar i,temp;

xh=0;

while(TRH);

for(i=0;i<8;i++)

{ while(!TRH);

delay(3);

if(TRH)

{ temp=1;while(TRH);}

else

temp=0;

xh<<=1;

xh|=temp;

}

return (xh);

}

void display()

{

uchar a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

uchar m,n,s,i;

m= str[3];//数码管显示部分

n= str[4];

s= str[5];

while(1)

{

for(i=0;i<10;i++)

{ if(m==i)

m=a[i];

}

P0=m;

P2=0x10;

delay2();

for(i=0;i<10;i++)

{ if(n==i)

n=a[i];

}

P0=n-0X80;

P2=0x20;

delay2();

for(i=0;i<10;i++)

{ if(s==i)

s=a[i];

}

P0=s;

P2=0x40;

delay2();

P0=0X9C;

P2=0x80;

delay2();

}

}

void main()

{

while(1)

{

start();

TRH=1; // 读取数据并写入指令

if(!TRH)

{

while(!TRH); //判断DHT11发出 80us 的低电平响应信号是否结束

while(TRH);

delay(8);

RHc = receive(); //数据接收状态

RLc = receive();

THc = receive();

TLc = receive();

CKc = receive();

}

TRH=1;

sum=(RHc+RLc+THc+TLc);//数据校验

if(sum==CKc)

{ RH = RHc;

RL = RLc;

TH= THc;

TL = TLc;

CK = CKc;

str[0] =RH/10; //湿度整数部分

str[1] =RH%10;

str[2] = RL/10 ;

str[3] = TH/10; //温度整数部分

str[4] = TH%10;

str[5] = TL/10;

}

display();

}

}

您可能感兴趣的与本文相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值