1、1.通讯过程如图1所示图1总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必 须大于18毫秒保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后 等待主机开始信号结束,然后发送80uS氐电平响应信号主机发送开始信号结束后 延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输 入模式,或者输出高电平均可,总线由上拉电阻拉高。信号线说明:主机信号DHT桔号总线为低电平,说明DHT11发送响应信号QHT11发送响应信号后,再把总线 拉高80us准备发送数据,每一bit数据都以50uS氐电平时隙开始,高电平的长短定了 数据位是0还是1.
2、格式见下面图示如果读取响应信号为高电平,则DHT11没有响 应,请检查线路是否连接正常当最后一 bit数据传送完毕后,DHT11拉低总线50us, 随后总线由上拉电阻拉高进入空闲状态。数字0信号表示方法如图4所示26us-28us表示信号线说明:主机信号 DBT信号图4数字1信号表示方法如图5所示DHT信号图5实现电路(简易视图)vccXT All50】ADIXTAL2PJ1.4D:XST EAVTfPO 5 -4D= 生* AD4心心W AITF1QT:FSD?Pl ITKALEPJ2FU Fl 4Pir |FUTxDPJJFlFiJEKTl PM TOP1&A5Pii Ti.F11A?F1
3、XA10 |p; iiDF:3AUF14AJ2 F16AJ4F2A12DKT11A二编程思路根据传感器的通信协议,首先由单片机通过 I/O 口主动产生要求的激发信号,然后将数据线的控制权交给传感器,接着单片机通过 while语句不间断的检查I/O 口的高低 电平,从而达到对时序的正确把握, 解析出准确的传输数据。四程序代码#include #define uchar unsigned char#define uint unsigned intsbit dat=P1A0;sbit RS=P2A5;/ledsbit RW=P2A6;sbit E=P2A7;/led 使能端void delay(in
4、t x)int y,z;for(y=0;yx;y+)for(z=0;z=0;i-)n=0;m=0; while(dat=0); while(dat=1) n+;if(n24&m=0) a=a+k;m=1;if(m=1)break;k=k/2;return a;void xianshi(uchar x,int k)int i,j,n; i=x/100;j=x/10%10;n=x%10;/ledxiezhiling(0x80+3*k);/ledxieshuju(0x30+i); ledxiezhiling(0x80+3*k+1);ledxieshuju(0x30+j);ledxiezhiling(
5、0x80+3*k+2);ledxieshuju(0x30+n);void xianshi2(uchar x,int k)i=x/100;ledxiezhiling(0xc0+3*k); ledxieshuju(0x30+i); ledxiezhiling(0xc0+3*k+1); ledxieshuju(0x30+j);ledxiezhiling(0xc0+3*k+2); ledxieshuju(0x30+n);void main()int i;uchar a5;uchar x;ledchushihua();delay(10000);while(1) delay(10000);a0=0;a1=
6、0;a2=0;a3=0; a4=0; kaishi(); xiangying(); a0=jieshou(); a1=jieshou(); a2=jieshou(); a3=jieshou(); a4=jieshou(); while(dat=1);x=a0+a1+a2+a3; for(i=0;i5;i+) xianshi(ai,i); xianshi2(x,0);五实践效果图六反思与总结虽然对时序的编程在之前已做过不少,但是在这次实 践中发现了不少新问题。在编程思路正确的情况,我们还是花了 2天的时间才把这个程序搞定。期间出过的错误有,在循环中忘了将变量 归零的,也有将数据帧的高低位反过来接的。同时在调试阶 段中,没有透过现象看本质, 盲目的修改,浪费了大量时间。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1