基于ARM和SHT11的温湿度检测报警装置设计毕业设计论文 - 图文(8)

2019-03-15 12:12

沈阳工业大学本科生毕业设计(论文)

else { CLRDATA();

}

delay_us(5); SETCLK(); cmd=cmd<<1; delay_us(5); // CLRCLK();

}

SETDATA();//释放总线

}

4.3.4 SHT11的应答信号 void SHT11_answer() /* sht11应答信号{ CLRCLK(); delay_us(5); SETCLK(); delay_us(5);

LPC_GPIO3->FIODIR&=input;

// LPC_GPIO3->FIOPIN=LPC_GPIO3->FIOPIN|0x02000000;

while(LPC_GPIO3->FIOPIN&0x02000000); CLRCLK(); delay_us(5); SETDATA();

}

void SHT11_DATA_READY() { LPC_GPIO3->FIODIR&=input; //select as intput

// LPC_GPIO3->FIOPIN=LPC_GPIO3->FIOPIN|0x02000000;

while(LPC_GPIO3->FIOPIN&0x02000000);

}

30

*/

沈阳工业大学本科生毕业设计(论文)

4.3.5 SHT11数据通信结束 void SHT11_end() { }

4.3.6 SHT11读取函数

DATA的三态门引脚用于数据的读取。DATA在SCK时钟的下降沿状态改变,并且仅在SCK时钟的上升沿有效。在数据传输期间,在SCK时钟处于高电平时,DATA必须保持稳定。避免信号冲突,微处理器应该讲DATA拉低。需要一个外接的上拉电阻(例如 10k?)把信号拉至高电平。上拉电阻通常包含在微处理器的I/O电路中。

unsigned char read_sht11(void) {

unsigned char j,temp=0,data=0; SETDATA(); for(j=0;j<8;j++) {

SETCLK(); data=data<<1;

delay_us(5);

LPC_GPIO3->FIODIR&=input;

SETDATA();

delay_us(5); delay_us(5); SETCLK(); CLRCLK(); delay_us(5);

//////////

/* sht11数据通信结束 */

LPC_GPIO3->FIOPIN=LPC_GPIO3->FIOPIN|0x02000000; temp=((LPC_GPIO3->FIOPIN&0x02000000)>>24); if(temp)

data=data|0x01; else

data=data&0xFE;

31

沈阳工业大学本科生毕业设计(论文)

}

}

CLRCLK(); delay_us(5);

SETDATA();

return(data);

4.3.7 SHT11寄存器设置函数 void SHT11_Write_Register() { }

START_SHT11(); write_sht11(0x06); SHT11_answer();

write_sht11(0x00); //12 and 14 bit temperrature SHT11_answer();

/* sht11寄存器设置函数 */

4.4 SHT11测量温湿度

在发布一组测量命令(0000 0101表示测湿度,0000 0011表示测温)后,控制器要等待测量结束。这个大致需要11/55/210ms分别对应8/12/14位测量。准确的时间随内部晶振的速度有±15%的变化。SHTxx通过拉DATA至低电平并进入空闲模式,来表示测量结束。控制器再次触发SCK之前必须等待“数据备妥”信号来读出数据。测量数据在读出前先被存储,这样控制器可以继续执行其他任务在需要时再读出数据。

接着传输出2个字节的测量数据和1个字节的CRC和校验。uC必须通过下拉DATA为低电平来确认每个字节。每个数据从最高有效位(MSB)开始,右值合法(例如:对于12位数据第5个SCK是最高有效位,而对于8位数据第一个字节是无意义的)。

用CRC数据的应答位表明通讯结束。如果不用CEC-8校验,控制器可能在测量数据LSB结束后通过保持应答位sck为高,来终止通讯。 在测量和通讯结束之后,设备自动进入休眠模式。 unsigned short SHT11_Measure(unsigned char command) {

32

沈阳工业大学本科生毕业设计(论文)

}

unsigned short dat_1=0;

unsigned char data_high,data_low,CRC; unsigned char val,tt,i; START_SHT11(); write_sht11(command); SHT11_answer(); SHT11_DATA_READY(); data_high=read_sht11(); MCU_answer(); data_low=read_sht11(); MCU_answer(); CRC=read_sht11(); SHT11_end();

dat_1=(dat_1|data_high); dat_1=(dat_1<<8)|data_low; val=CRC_Table[(command^0x00)]; val=CRC_Table[(val^data_high)]; val=CRC_Table[(val^data_low)]; for(i=0;i<8;i++) { } val=tt; if(val==CRC)

return(dat_1); else

return(2); tt=tt<<1; tt|=val&0x01; val=val>>1;

4.5测量结果处理以及报警

取10次平均值

33

沈阳工业大学本科生毕业设计(论文)

if(i==10) {

i=0; j=0;

//10次平均值

dis_flag=1; Temperature=0; Humidity=0;

for(temp=0;temp<10;temp++) { }

Temperature=Temperature/10; T[0] = ((int)(Temperature*100))/100;

//温度整数

Temperature+=TE[temp];

T[1] = ((int)(Temperature*100))0; //温度小数

if(T[0]>29) //达到或超过30度报警 { } else { }

for(temp=0;temp<10;temp++) { }

Humidity=Humidity/10;

H[0] = ((int)(Humidity*100))/100;

//湿度整数

Humidity+=HU[temp];

LPC_GPIO0->FIOSET |=0x03800000; LPC_GPIO0->FIOCLR |= 0x03800000;

H[1] = ((int)(Humidity*100))0; //湿度整数 }

4.6本章小结

系统的软件编写是本次设计中的一个很重要的组成部分。软件的编写同时也

34


基于ARM和SHT11的温湿度检测报警装置设计毕业设计论文 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:城市规划复习重点

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: