文档详情

SHT11温湿度传感器AVR单片机程序.DOC

发布:2018-07-03约7.46千字共页下载文档
文本预览下载声明
#include shtxx.h void shtxx_init(void) { shtxx_temp = shtxx_humi = 0; SHTXX_SCK_LOW(); SHTXX_DAT_1(); shtxx_reconnect(); } void shtxx_reconnect(void) { SHTXX_DAT_1(); SHTXX_SCK_LOW(); for(uint8 i=0; i9; i++) { SHTXX_SCK_HIGH(); SHTXX_SCK_LOW(); } SHTXX_START(); } uint8 shtxx_softrst(void) { uint8 error = 0; shtxx_reconnect(); error += shtxx_write_byte(SHTXX_SOFT_RST); return error; } //写命令函数 //参数:命令类型 //返回:0成功,1失败 uint8 shtxx_write_byte(uint8 cmd) { uint8 ack; for (uint8 i=8; i0; i--) { if (BITCHK(cmd, (i-1))) //trans ’1’ { SHTXX_DAT_1(); SHTXX_SCK_HIGH(); SHTXX_SCK_LOW(); } else //trans ’0’ { SHTXX_DAT_0(); SHTXX_SCK_HIGH(); SHTXX_SCK_LOW(); } } //SHTxx 会以下述方式表示已正确地接收到指令: //在第8 个SCK 时钟的下降沿之后,将DATA 下拉为低电平(ACK 位)。 //在第9 个SCK 时钟的下降沿之后,释放DATA(恢复高电平)。 BITCLR(SHTXX_DAT_DDR, SHTXX_DAT_BIT); SHTXX_SCK_HIGH(); ack = BITCHK(SHTXX_DAT_PIN, SHTXX_DAT_BIT); SHTXX_SCK_LOW(); return ack; } uint8 shtxx_read_byte(uint8 dat_crc) { uint8 dat8 = 0; for (uint8 i=8; i0; i--) { BITCLR(SHTXX_DAT_DDR, SHTXX_DAT_BIT); c4680504cSHTXX_SCK_HIGH(); if (BITCHK(SHTXX_DAT_PIN, SHTXX_DAT_BIT)) BITSET(dat8, (i-1)); SHTXX_SCK_LOW(); } if (dat_crc) { SHTXX_DAT_0(); SHTXX_SCK_HIGH(); SHTXX_SCK_LOW(); } else { SHTXX_DAT_1(); SHTXX_SCK_HIGH(); SHTXX_SCK_LOW(); } SHTXX_DAT_1(); return dat8; } int8 shtxx_measure(uint8 mode) { uint8 error = 0; SHTXX_START(); switch (mode) { case SHTXX_MODE_TEMP: error = shtxx_write_byte(SHTXX_CMD_TEMPTURE); for(uint16 i=0; i655
显示全部
相似文档