资源简介
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可爱字体
- 下一篇:软件安全开发 (吴世忠)
相关资源
- 利用矩阵键盘控制51单片机LCD12864显示
- 电脑日记 DailyPim4.51专业版
- johnny133_8851963.rar
- 51622469glomosim-2.03.rar
- MCS-51单片机原理、系统设计与应用
- ad9851 DDS 程序STM32 C51本人亲自调试
- 惠普Color LaserJet Pro CP1518ni打印机使用
- 51单片机课程设计和100个
- msp430驱动nokia5110液晶程序和资料
- 格力空调遥控码接收程序,51单片机做
- 常用dxp库文件包含51单片机
- 群联PS2251量产工具及教程
- MyODBC-3.51.11-2-win.exe 0分奉献
- 基于51单片机的超声波测距LCD1602显示
- 基于51单片机的TIM1控制蜂鸣器模拟电
- 512FFT Verilog源代码
- 电动智能小车完整论文[用过的参考文
- RTX51_FULL RTX51操作系统
- libcurl-7.51静态库
- ST-TOOL 9000 v3.76.16群联PS2251-07主控)量
- NRF51822 中文资料
- WiiCCD Master 3.51.7z
- 联想y510p黑苹果clover
- 基于stm32单片机多功能计步手环
- F5101考试学习指导英译中
- MCP2515驱动-STM32-keil project
- stm8l151串口通信例程
- 基于AT89C51单片机的步进电机控制及驱
- State Estimation for Robotics_20180512.pdf机器
- 性别检测20151210.ppt
评论
共有 条评论