📄 +++
字号:
#ifndef _2402_h_
#define _2402_h_
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^2;
sbit scl=P1^3;
//sbit sda=P1^6;
//sbit scl=P1^5;
void nop()
{ ; ; }
void start() //功能:启动I2C 总线,即发送I2C 起始条件。
{
sda=1;
nop();
scl=1;
nop();
sda=0;
nop();
}
void stop() //功能:结束I2C 总线,即发送I2C 结束条件。
{
sda=0;
nop();
scl=1;
nop();
sda=1;
nop();
}
void respons() //功能:主控器进行应答信号,(可以是应答或非应答信号)
{
uchar i;
scl=1;
nop();
while((sda==1)&&(i<250))i++;
scl=0;
nop();
}
void write_byte_2402(uchar dat) //功能:将数据dat 发送出去,可以是地址,也可以是数据,发完后等待应答
{
uchar i,temp;
temp=dat;
scl=0;
nop();
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0; /*置时钟线为低,准备接收数据位*/
nop();
sda=CY;
nop();
scl=1; /*置时钟线为高,通知被控器开始接收数据位*/
nop();
}
scl=0;
nop();
sda=1; //SDA数据线空闲
nop();
}
uchar read_byte_2402() // 功能:用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数
{
uchar i,k;
scl=0; /*置时钟线为低,准备接收数据位*/
nop();
for(i=0;i<8;i++)
{
scl=1; /*置时钟线为高使数据线上数据有效,保持数据的稳定*/
nop();
k=(k<<1)|sda;
scl=0;
nop();
}
return k;
}
void write_add(uchar add,uchar dat)
{
start();
write_byte_2402(0xa0);
respons();
write_byte_2402(add);
respons();
write_byte_2402(dat);
respons();
stop();
}
uchar read_add(uchar add)
{
uchar k;
start();
write_byte_2402(0xa0);
respons();
write_byte_2402(add);
respons();
start();
write_byte_2402(0xa1);
respons();
k=read_byte_2402();
stop();
return k;
}
void init_2402()
{
uint i;
sda=1;
nop();
scl=1;
nop();
for(i=0;i<256;i++)
{write_add(i,0);}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -