• 大小: 3.15MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-19
  • 语言: 其他
  • 标签: sht20  I2c模拟  51  

资源简介

sht20 I2c模拟驱动 51单片机例程 加I2C通讯总线学习。方便新手学习I2C学习。例程中有I2c的读和写,传感器只用了读。

资源截图

代码片段和文件信息

#include “i2c.h“
#include 
#include “config.h“

#define nop() { _nop_();_nop_();_nop_();_nop_();_nop_();}
sbit scl=P0^2;
sbit sda=P0^3;
void init()
{
sda=1;
scl=1;
nop();
}
void i2c_start()
{
sda=1;
nop();
scl=1;
nop();
sda=0;
nop();
}

void i2c_stop()
{
sda=0;
nop();
scl=1;
nop();
sda=1;
nop();


void wait_ack()
{
uchar i;
scl=1;
nop();
// while(sda==1);
while((sda==1) && (i<255))
i++;
scl=0;
nop();
}
void wait_measurement()
{
// uchar i;
Delay_nms(80);            //等待测量
// scl=1;
// Delay_nms(10);
// while(scl==0);          //保持主机模式但是可能出现死等现象
// scl=0;
// while((scl==0) && (i<255))
// i++;
}
void send_ack(bit ack)  //ack==1发送应答ack==0发送非应答
{
if(ack)
sda=0;
else
sda=1;
scl=1;
nop();
scl=0;
nop();
sda=1;
nop();
}

void write_byte(uchar dat)
{
uchar itemp;
temp=dat;
for(i=0;i<8;i++){
scl=0;
nop();
temp<<=1;
sda=CY;
nop();
scl=1;
nop();
}
scl=0;
nop();
sda=1;
nop();
}


static uchar read_byte()
{
 uchar idat;
 scl=0;
 nop();
 sda=1;
 nop();
 for(i=0;i<8;i++){
  scl=1;
nop();
dat<<=1;
dat|=sda;
scl=0;
nop();
 }
//  sda=1;
//  nop();
 return dat;
}

void write_i2c(uchar deviceuchar addruchar dat)
{
init();
i2c_start();
write_byte(device);
wait_ack();
write_byte(addr);
wait_ack();
write_byte(dat);
wait_ack();
i2c_stop();
}

uchar read_i2c(uchar deviceuchar addr)
{
uchar dat;
init();
i2c_start();
write_byte(device);
wait_ack();
write_byte(addr);
wait_ack();
i2c_start();
write_byte(device+0x01);
wait_ack();
dat=read_byte();
send_ack(0);
i2c_stop();
return dat;
}
uint readT()    //测量温度
{
uchar datL=0;
uchar datH=0;
uint Tdata=0;
init();
i2c_start();
write_byte(0x80);
wait_ack();
write_byte(0xE3);     //保持主机模式
wait_ack();
i2c_start();
write_byte(0x81);
wait_ack();
// print_byte(0x35);
wait_measurement();
datH=read_byte();
send_ack(1);
datL=read_byte();
send_ack(0);
i2c_stop();
Tdata=datH<<8|datL;
return Tdata;
}
uint readRH()   //测量湿度
{
uchar datRL=0;
uchar datRH=0;
uint Tdata=0;
init();
i2c_start();
write_byte(0x80);
wait_ack();
write_byte(0xE5);
wait_ack();
i2c_start();
write_byte(0x81);
wait_ack();
// print_byte(0x35);
wait_measurement();
datRH=read_byte();
send_ack(1);
datRL=read_byte();
send_ack(0);
i2c_stop();
Tdata=datRH<<8|datRL;
return Tdata;
}

void rest()      //复位传感器
{
init();
i2c_start();
write_byte(0x80);
wait_ack();
write_byte(0xfe);
wait_ack();
i2c_stop();
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2720  2017-09-08 17:19  sht20驱动 51模拟i2c\i2c.c

     文件        225  2017-09-08 15:58  sht20驱动 51模拟i2c\i2c.h

     文件    2024116  2017-09-06 14:47  sht20驱动 51模拟i2c\I2C总线协议 - subkiller的专栏 - CSDN博客.png

     文件    1647426  2017-09-08 17:21  sht20驱动 51模拟i2c\SHT21SHT20最新数字温湿度传感器芯片_图文_百度文库.png

     目录          0  2017-09-08 17:21  sht20驱动 51模拟i2c

----------- ---------  ---------- -----  ----

              3674487                    5


评论

共有 条评论