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

📄 led.c

📁 51单片机读写E2PROM芯片at24c02
💻 C
字号:
#include<reg52.h>
#define char unsigned char
sbit sda=P3^3;
sbit scl=P3^2;
char a;
void delay2402()
{ ;; }
void start()  //开始信号
{	
	sda=1;
	delay2402();
	scl=1;
	delay2402();
	sda=0;
	delay2402();
}

void stop()   //停止 信号
{
	sda=0;
	delay2402();
	scl=1;
	delay2402();
	sda=1;
	delay2402();
}

void respons()  //应答
{
	char i;
	scl=1;
	delay2402();
	while((sda==1)&&(i<250))i++;   //一定时间不应答就默认2402收到了
	scl=0;	   //第九个时钟结束
	delay2402();
}

void init()	 //总线初始化
{
	sda=1;	 //释放总线
	delay2402();
	scl=1;
	delay2402();
}

void write_byte(char date)	//写一字节
{
	char i,temp;
	temp=date;	 //data内放的为实参


	for(i=0;i<8;i++)
	{
		temp=temp<<1; //从高位到地位读取先把最高位移入CY最后补零,移8次
		scl=0;	  //拉低,只有时钟为低电平sda才允许改变
	    delay2402();
		sda=CY;	  //把每次移动的CY位移入sda
		delay2402();
		scl=1;	  //拉高,只有时钟为高电平才能被读或写
		delay2402();
	//	scl=0;
     //   delay2402();
	}
	scl=0;	  //释放总线,读取应答信号(因为应答信号为低电平)
	delay2402();
	sda=1;	  //应答
	delay2402();
}

char read_byte()	  //读一个字节
{
	char i,k;
	scl=0;	   //拉低,只有低电平才允许改变
	delay2402();
	sda=1;
	delay2402();
	for(i=0;i<8;i++)
	{
		scl=1;	 //为一时才允许读
		delay2402();	
		k=(k<<1)|sda; //k左移一位最低位补零,最低位再和sda相或既把一位sda数据赋给k,左移8次就送完一个字节
		scl=0;	  //一个时钟读(或写)一位数据,读或写都要按时序
		delay2402();	
	}
	return k;
}

void delay24021(char x)
{
	char a,b;
	for(a=x;a>0;a--)
	 for(b=100;b>0;b--);
}

void write_add(char address,char date)
{
	start();
	write_byte(0xa0);//1010 000 0(1010为4位固定地址000为器件地址0为写命令)
	respons();		 //应答
	write_byte(address); //写地址(2402的地址)
	respons();			 //应答
	write_byte(date);	 //写数据
	respons();			 //应答
	stop();				 //停
}

char read_add(char address)
{
	char date;
	start();
	write_byte(0xa0); //1010 000 0(1010为4位固定地址000为器件地址0为写命令)
	respons();
	write_byte(address);
	respons();
	start();
	write_byte(0xa1);
	respons();
	date=read_byte();
	stop();
	return date;
}

void main()
{
	init();
	write_add(23,0xff);
	delay24021(100);
	P0=read_add(23);
	while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -