⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at24c02.c

📁 IIC总线epprom 24c02源程序
💻 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 + -