FS_11C14温湿度传感器(二)

王朝学院·作者佚名  2016-05-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

FS_11C14温湿度传感器(二)作者:刘老师,华清远见嵌入式学院讲师。

在FS_11C14平台DHT11传感器程序:

/******************************************************************************* * Function Name : Read_Temp_Hum * Description : Read Temp & Hum. * Input : - temp : temp buf pointer. * - hum : hum buf pointer. * Output : - temp[0] : temp x. part * - temp[1] : temp .x part * - hum[0] : hum x. part * - hum[1] : hum .x part * Return : - 1, checksum ok * - 0, checksum fail *******************************************************************************/ uint32_t Read_Temp_Hum(uint8_t *temp, uint8_t *hum) { uint32_tcnt_last; uint8_thum_10, hum_01, temp_10, temp_01, chksum, chk; uint32_ttc1, tc; uint32_ti; p3_2_counter = 0; cnt_last = p3_2_counter; GPIOIntDisable(PORT1, 5); GPIOSetDir(PORT1, 5, 1);// Set PIO1_5 to output GPIOSetValue(PORT1, 5, 0); delay_ms(30); GPIOSetValue(PORT1, 5, 1); GPIOSetDir(PORT1, 5, 0); GPIOSetInterrupt(PORT1, 5, 0, 0, 0); GPIOIntEnable(PORT1, 5); for(i=0; i<3; i++)//waiting 80uS low level and 80 uS high level { GPIOSetInterrupt(PORT1, 5, 0, 0, i&0x01); while(p3_2_counter == cnt_last); cnt_last = p3_2_counter; } for(i=0; i<40; i++) {// Loop to receive 40 bit data GPIOSetInterrupt(PORT1, 5, 0, 0, 1); while(p3_2_counter == cnt_last); cnt_last = p3_2_counter; tc1 = p3_2_tc; GPIOSetInterrupt(PORT1, 5, 0, 0, 0); while(p3_2_counter == cnt_last); cnt_last = p3_2_counter; if(p3_2_tc < tc1) { tc = tc1 - p3_2_tc; } else { tc = 48000 - (p3_2_tc - tc1); } if(i < 8) //one byte { hum_10 <<= 1; if(tc >= 2328) hum_10 |= 0x01; } else if(i < 16) // two byte { hum_01 <<= 1; if(tc >= 2328) hum_01 |= 0x01; } else if(i < 24)// three byte { temp_10 <<;= 1; if(tc >= 2328) temp_10 |= 0x01; } else if(i < 32) // four byte { temp_01 <<= 1; if(tc >= 2328) temp_01 |= 0x01; } else // five byte checksum { chksum <<= 1; if(tc >= 2328) chksum |= 0x01; } } GPIOSetInterrupt(PORT1, 5, 0, 0, 1); while(p3_2_counter == cnt_last); GPIOIntDisable(PORT1, 5); *temp = temp_10; *(temp+1) = temp_01; *hum = hum_10; *(hum+1) = hum_01; chk = hum_10;// Calculate to Checksum chk += hum_01; chk += temp_10; chk += temp_01; if(chk == chksum)// Received data is OK return 1; else return 0; } /******************************************************************************* * Function Name : Temp_Hum_Test * Description : Temp & Hum func test. * Input : None * Output : None * Return : None *******************************************************************************/ void Temp_Hum_Test(void) { uint8_ttemp[2], hum[2]; charbuf[20]; uint32_ti; OLED_ClearScreen(); OLED_DisStrLine(0, 0, "Temp & Hum"); while(1) { i = Read_Temp_Hum(temp, hum); if(i) { if(temp[0]&0x80) { temp[0] &= 0x7f; snPRintf(buf, 16, "Temp: -%d.%d ", temp[0], temp[1]); } else { snprintf(buf, 16, "Temp: %d.%d ", temp[0], temp[1]); } OLED_DisStrLine(2, 0, (uint8_t *)buf); snprintf(buf, 16, "Hum: %d.%d ", hum[0], hum[1]); OLED_DisStrLine(3, 0, (uint8_t *)buf); printf("\r\nTemp: %d.%d Hum: %d.%d", temp[0], temp[1], hum[0], hum[1]); } else { printf("\r\nfail"); } delay_ms(500); } } /**** End of File ****/

文章来源:华清远见嵌入式学院,原文地址:http://www.embedu.org/Column/Column858.htm

更多相关嵌入式免费资料查看华清远见讲师博文>>

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航