📄 i2c.h
字号:
#ifndef _I2C_H_
#define _I2C_H_
#include <REGX51.H>
#include <intrins.h>
#include "i2c.h"
#define scl P1_6 //scl
#define sda P1_7 //sda
#define uint unsigned int
#define uchar unsigned char
////////////////延时程序//////////////////
void delay(uint i)
{
uchar j;
while(--i)
{
for(j=0;j<20;j++)_nop_();
}
}
/////////I2C///////////////////
//////////////////////////////////
start()
{
sda=1;
scl=1;
_nop_();
sda=0;
_nop_();
scl=0;
}
//////////I2C停止///////// /
stop()
{
sda=0;
_nop_();
scl=1;
_nop_();
sda=1;
}
/////////I2C读一个字节//////////////
unsigned char rd(void)
{
uchar out;
uchar i; //有8位数据
for(i=0;i<8;i++)
{ sda=1;delay(1);
scl=1;delay(1);
out|=sda;delay(1);
scl=0; delay(1);
if(i<7) out<<=1;//下一位
}
sda=1;delay(1);
scl=0; delay(1);
return out;
}
/////////////////////I2C写一个字节/////////////////////////
void wd(unsigned char dd) //
{
uchar in,i=8;
in=dd;
while(i--)
{
sda=(in&0x80);delay(1);
scl=1;
delay(1);
scl=0;delay(1);
in<<=1;delay(1);
}
sda=1;
scl=1;
}
/****************I2C不应答**************
noack()
{
sda=1;
scl=1;
delay(2);
scl=0;
delay(2);
sda=0;
}
/**********I2C等待器件应答*************/
ack(){
uchar i=150;
while (--i) //等待AcK
{
sda=1; //释放总线
if (sda==0)break; //跳出
scl=0;
}
scl=0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -