基于51单片机SHT11温湿度传感器检测程序
- 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);
write_12864com(0x06);
delay_50us(10);
write_12864com(0x0c);
delay_50us(10);
}
/******************************************************** 12864液晶显示函数
********************************************************/ void display1(void)
{
uchar i;
write_12864com(0x80);
for(i=0;i<18;i++)
{
write_dat(table2[i]);
delay_50us(1);