基于51单片机SHT11温湿度传感器检测程序(含电路图)
时间:11-19
来源:互联网
点击:
下面是原理图:
下面是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;
- lcdrw=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);
- }
- }
- /********************************************************
- 12864液晶显示函数
- ********************************************************/
- void display2(void)
- {
- uchar i;
- write_12864com(0x90);
- for(i=0;i<18;i++)
- {
- write_dat(table3[i]);
- delay_50us(1);
- }
- }
- /********************************************************
- 12864液晶显示函数
- ********************************************************/
- void display3(void)
- {
- uchar i;
- write_12864com(0x88);
- for(i=0;i<8;i++)
- {
- write_dat(table4[i]);
- delay_50us(1);
- }
- }
- /********************************************************
- 12864液晶显示函数
- ********************************************************/
- void displaywendu(void)
- {
- uchar i;
- write_12864com(0x94);
- for(i=0;i<3;i++)
- {
- write_dat(wendu[i]);
- delay_50us(1);
- }
- for(i=0;i<1;i++)
- {
- write_dat(table5[i]);
- delay_50us(1);
- }
- for(i=4;i<5;i++)
- {
- write_dat(wendu[i]);
- delay_50us(1);
- }
- }
- /********************************************************
- 12864液晶显示函数
- ********************************************************/
- void displayshidu(void)
- {
- uchar i;
- write_12864com(0x8C);
- for(i=0;i<3;i++)
- {
- write_dat(shidu[i]);
- delay_50u
51单片机SHT11温湿度传感器检测程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)