📄 at24c02.c
字号:
#include<reg52.h>
#define uchar unsigned char
uchar temp;
sbit dula=P2^6;
sbit wela=P2^7;
sbit sda=P2^0;
sbit scl=P2^1;
sbit wr=P3^7;
sbit P30=P3^0;
sbit P31=P3^1;
uchar a;
void delay()
{ ;; }
void start() //开始信号
{
sda=1;//sda为高
delay();//简单延时
scl=1;//scl为高
delay();//简单延时
sda=0;//sda为低
delay();//简单延时
}
void stop() //停止
{
sda=0;//sda为低
delay();//简单延时
scl=1;//scl为高
delay();//简单延时
sda=1;//sda为高
delay();
}
void respons() //应答
{
uchar i;
scl=1;//scl为高
delay();//简单延时
while((sda==1)&&(i<250))i++;//(sda==1)和(i<250)只要有一个为真就退出while循环
scl=0;//scl为低
delay();//简单延时
}
void init()//初始化
{
wr=0;//关闭写保护
sda=1;//sda为高
delay();//简单延时
scl=1;//scl为高
delay();//简单延时
}
void write_byte(uchar date)//写数据
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)//依次将8个字节写入
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
uchar read_byte()//读数据
{
uchar i,k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)//依次读出8个字节
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
return k;
}
void delay1(uchar x)//延时
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void write_add(uchar address,uchar date)//写
{
start();//开始信号
write_byte(0xa0);//选择器件,并发出写信号
respons();//等待应答信号
write_byte(address);//发出要写数据的器件地址
respons();//等待应答
write_byte(date);//发出要写的数据给器件
respons();//等待应答
stop();//停止信号
}
uchar read_add(uchar address)//读
{
uchar date;
start();//开始信号
write_byte(0xa0);//选择器件,并发出写信号
respons();//等待应答
write_byte(address);//发出要数据的器件地址
respons();//等待应答
start();//开始信号
write_byte(0xa1);//选择器件,并发出读信号
respons();//等待应答
date=read_byte();//把器件地址中的数据读出后,放在date中
stop();//停止信号
return date;//返回值
}
void main()
{ uchar k=0;k=read_add(0x01);P1=k;
init();//初始化器件
while(1){
if(P30==0){delay1(10);if(P30==0)write_add(0x01,k);while(P30==0);}//将k值写入芯片的第1个地址
delay1(200);//延时100ms,(这个延时过短,会造成错误)
if(P31==0){delay1(10);if(P31==0)k++;P1=k;while(P31==0);}
temp=read_add(0x01);//将芯片的第23个地址中的数据读出,赋给temp
P0=temp;//将temp的数据赋给P0口
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -