基于单片机SHT 温湿度传感器检测程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机SHT11温湿度传感器检测程序(含电路图)
?
下面是原理图:
下面是SHT11与MCU连接的典型电路:
下面是源代码:
#include
#include
/********************************************************
宏定义
********************************************************/
#define uint unsigned int
#define uchar unsigned char
#define noACK 0
#define ACK 1
#define STATUS_REG_W 0x06
#define STATUS_REG_R 0x07
#define MEASURE_TEMP 0x03
#define MEASURE_HUMI 0x05
#define RESET 0x1e
enum?{TEMP,HUMI};
typedef?union?//定义共用同类型
{
unsigned?int?i;
float?f;
} value;
/******************************************************** ?位定义
********************************************************/ sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcden=P2^2;
sbit SCK = P1^0;
sbit DATA = P1^1;
/******************************************************** 变量定义
********************************************************/ uchar table2[]="SHT11 温湿度检测";
uchar table3[]="温度为:℃";
uchar table4[]="湿度为:";
uchar table5[]=".";
uchar wendu[6];
uchar shidu[6];
/******************************************************** 1ms延时函数
********************************************************/ void?delay(int?z)
{
int?x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
/******************************************************** 50us延时函数
********************************************************/ void?delay_50us(uint t)
{
uint j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
/******************************************************** 50ms延时函数
********************************************************/ void?delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
/******************************************************** 12864液晶写指令
********************************************************/ void?write_12864com(uchar com)
{
lcdrs=0;
delay_50us(1);
P0=com;
lcden=1;
delay_50us(10);
lcden=0;
delay_50us(2);
}
/******************************************************** 12864液晶写数据
********************************************************/ void?write_dat(uchar dat)
{
lcdrs=1;
lcdrw=0;
delay_50us(1);
P0=dat;
lcden=1;
delay_50us(10);
lcden=0;
delay_50us(2);
}
/******************************************************** 12864液晶初始化
********************************************************/ void?init12864lcd(void)
{
delay_50ms(2);
write_12864com(0x30);
delay_50us(4);
write_12864com(0x30);
delay_50us(4);
write_12864com(0x0f);
delay_50us(4);
write_12864com(0x01);
delay_50us(240);