iic获取salve设备地址_51单片机IIC读取SHT31数据

这篇博客是作者个人的学习记录,主要讲述了如何使用51单片机通过IIC协议读取SHT31温湿度传感器的数据。目前仅完成了IIC通信获取数据的步骤,后续将涉及数据处理和定时获取数据的实现。代码基于郭天祥的IIC代码进行改编,但在线上传图片遇到问题。
摘要由CSDN通过智能技术生成

只是个人的记录贴,写了玩的,还在写,才读出IIC结果,还没写数据处理和周期获取什么的,代码由郭天祥IIC代码改编,醉了,网页端知乎上传图片花式不成功。

6201404dd5dd332894d70aae224eeba0.png

6100b21f69d43b148ca6eab896ae08d8.png
#include<reg52.h> //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
#define uchar unsigned char
sbit sda=P2^0;//数据线
sbit scl=P2^1;//时钟线

void delay() {; ;}
void Delay(unsigned int t); 
//函数声明
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void start()//开始信号
{
	sda=1;
	delay();
	scl=1;
	delay();
	sda=0;
	delay();
}

void stop()//停止信号
{
	sda=0;
	delay();
	scl=1;
	delay();
	sda=1;
	delay();
}

void respons()//应答
{
	uchar i;
	scl=1;
	while((sda==1)&&(i<250)) i++;
	scl=0;
	delay();
}

void init()//IIC初始化
{
	sda=1;
	scl=1;
}

void write_byte(uchar date)//写入
{
	uchar i, temp;
	temp=date;
	scl=0;
	delay();
	for(i=0;i<8;i++)
	{
		
		temp=temp<<1;
		sda=CY;
		delay();
		scl=1;
		delay();
		scl=0;
		delay();
	}
//	sda=1;
	delay();
}

void IIC_Ack()//给SHT31发送应答信号
{
	scl=0;
	delay();
	sda=0;
	delay();
	scl=1;
	delay();
	scl=0;
	delay();

	sda=1;

}

uchar read_byte()//读取数据
{
	uchar i,j,k;
	for(i=0;i<8;i++)
	{
		scl=0;
		delay();
		scl=1;
		delay();
		j=sda;
		k=(k<<1)|j;
		delay();
	}
	IIC_Ack();//发送应答信号
	return k;

}



void main (void)
{
	init();  //初始化

	start();//开始信号
	write_byte(0x88);//器件地址,查手册可得默认0x44,取7位地址+读写位得0x88
	respons();//应答
	
	write_byte(0x2C);//写入命令,这里写入的是单次测量命令2C06
	respons();

	write_byte(0x06);
	respons();
	stop();//停止信号

	Delay(50000);//随便延迟了一会给测量时间
	Delay(50000);

	start();//开始信号
	write_byte(0x89);//设置读取,即0x88最后一位读写位改为读
	respons();//应答

	read_byte();//读取温度高八位
	read_byte();//读取温度低八位
	read_byte();//CRC
	read_byte();//湿度高八位
	read_byte();//湿度低八位
	read_byte();//CRC
	stop();

while (1)         //主循环
  {

  }
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
 while(--t);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值