SHT25温湿度测量仿真原理图如下(proteus 8.9SP2 仿真工程文件可到本帖附件中下载)
proteus
labview上位机显示
代码
单片机源程序如下:
- //vender:liaoxj
- //version:v1
- #include "reg8051.h"
- #include <stdio.h>
- #include "drv.h"
- #include "common.h"
- #include "delay.h"
- #include "iic.h"
- #include "SHT20.h"
- int ReadTempFlag;//定义读时间标志
- char temp_H,temp_L;
- unsigned int temp;
- unsigned int num;
- int a=0;
- int timer0_count=0;
- int v=0;
- char v_h,v_l;
- int uart_flag=0;
- unsigned char receive[4];
- void main()
- {
- uart_init();
- timer0_init();
- SHT20_Init();
- EA=1;
- SHT20_setResolution();
- while(1)
- {
- if(ReadTempFlag==1)
- {
-
- ReadTempFlag=0;
- //SHT25,IIC接口
- temp=SHT20_readTem();
- // temp>>=5;//数据是11位的,高位对齐,所以数据右移5位,变低位对齐
- temp=temp&0xfffc;
- temp_L=temp;//拆分为低8位和高3位,用串口传输
- temp_H=temp>>8;
- send(temp_H);
- send(temp_L);
-
- temp=SHT20_readHum();
- // temp>>=5;
- temp=temp&0xfffc;
- temp_L=temp;
- temp_H=temp>>8;
- send(temp_H);
- send(temp_L);
- }
-
- }
- }
- void timer0_isr() interrupt 1
- {
-
- TH0=0xF8;
- TL0=0xCC;
- timer0_count++;
- if(timer0_count==1000)
- {
- P10=~P10;
- timer0_count=0;
- ReadTempFlag=1; //读标志位置1
- }
- }
- void uart_isr() interrupt 4
- {
- static unsigned char count;//串口接收计数的变量
- RI=0;//手动清某个寄存器,大家都懂的
- receive[count]=SBUF;
- count++;
- if(count==4)
- {
- ES=0;
- count=0;
- uart_flag =1;//串口接收成功标志,为1时在主程序中回复,然后清零
- //关中断,回复完了再ES=1;
- }
-
- }
复制代码
所有资料51hei提供下载:
IIC-SHT25温湿度传感器.zip
(183.75 KB, 下载次数: 77)
|