资源简介
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
- 上一篇:ppt可爱字体
- 下一篇:软件安全开发 (吴世忠)
相关资源
- 最新的北京地铁shp文件75146
- 程序员专用字体YaHei.Consolas.1.11b42517
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- 清翔电子MCS51开发板资料_新版 01_开发
- MCS_51单片机与8255A的接口设计
- Rtx51_tiny_RTOS中文版.pdf
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- proteus仿真 AT89C51输出各种波形
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- NRF24L01实现51与STM32双向通讯
- 基于c8051f020的AD转换程序及LCD显示程序
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 课程设计蔬菜大棚自动控制系统,包
- 基于AT89C51的数据采集系统设计新方法
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 基于89c51的数字钟
- 8251 全双工异步通信
- 8051F040SMBUS多机通信
- 基于单片机交通灯设计
评论
共有 条评论