📄 24c02.h
字号:
#include<reg52.h>
#define uchar unsigned char
sbit sda=P3^5;
sbit scl=P3^4;
void delay0()
{;;}
void init() //初始化
{
sda=1;
scl=1;
}
void start() //起始信号
{
sda=1;
scl=1;
delay0();
sda=0;
delay0();
}
void stop() //终止信号
{
sda=0;
scl=1;
delay0();
sda=1;
delay0();
}
void respons()//应答,第九个时钟等待
{
uchar i;
scl=1;
delay0();
while((sda==1)&&(i<250))i++;//没有受到应答信号且在一定时间内
scl=0;
delay0();
}
void write_byte(uchar date) //写入一个字节
{
uchar i,temp;
temp=date;
scl=0;
delay0();
for(i=0;i<8;i++)
{
temp=temp<<1;
sda=CY;//送走最高位,8次后送完一个字节
delay0();
scl=1;//保持高电平,数据稳定
delay0();
scl=0;
delay0();
}
sda=1;//总线释放,数据总线不用时要释放以便受到应答信号
delay0();
}
uchar read_byte()//读一个字节
{
uchar i,j,k;
scl=0;
delay0();
sda=1;//释放数据总线
delay0();
for(i=0;i<8;i++)
{
scl=1;
delay0();
j=sda;//读取数据
k=(k<<1)|j;//把字节读到j中 或K=(k<<1)|sda;
scl=0;//一个时钟读一个数据
delay0();
}
return k;
}
void write_add(uchar address,uchar date) //在指定地址写入数据
{
start();//起始信号
write_byte(0xa0);//器件地址,高四位固定,最后一位0表写入,其余是地址
respons();//应答
write_byte(address);//器件内部存储区的地址0~256之间
respons();
write_byte(date);//写入数据
respons();
stop();//停止信号
}
uchar read_add(uchar address) /*Random Read*///在指定地址读取字节
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);//表示要读取数据
respons();
date=read_byte() ;
stop();
return date;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -