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

📄 at24c02.c

📁 这是一个基于PROTUES工作平台
💻 C
字号:
 #include <reg52.h>
 #include<intrins.h>
 #define uchar unsigned char 
 #define uint unsigned int
 #define AddWr 0xa0	      //器件地址选择及写标志
 #define AddRd 0xa1		  //器件地址选择及读标志

 /*有关全局变量*/
 sbit Sda=P3^7;	      //at24c08的SDA与P3.7相连
 sbit Scl=P3^6;	      //at24c08的SCL与P3.6相连
 sbit LOAD  = P3^1;	  //MAX7219的LOAD与P3.1相连
 sbit DIN = P3^0;	  //MAX7219的DIN与P3.0相连
 sbit CLK = P3^2;	  //MAX7219的CLK与P3.2相连

 void mDelay(uint t) //延时
 { uchar i;
   while(t--)
   {
   for(i=0;i<125;i++)
   {;}
   }
   }
   

 void Nop(void)		  //空操作
 {
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 }


/*起始条件*/

 void Start(void)
 {
 Sda=1;
 Scl=1;
 Nop();
 Sda=0;
 Nop();
 }


 /*停止条件*/

 void Stop(void)
 {
 Sda=0;
 Scl=1;
 Nop();
 Sda=1;
 Nop();
 }

 /*应答位*/

void Ack(void)
{
Sda=0;
Nop();
Scl=1;
Nop();
Scl=0;
}

/*反向应答位*/

void NoAck(void)
{
 Sda=1;
 Nop();
 Scl=1;
 Nop();
 Scl=0;
 }

 /*发送数据子程序,Data为要求发送的数据*/
 void Send(uchar Data)
 {
   uchar BitCounter=8;
   uchar temp;
   do
   {
   temp=Data;
   Scl=0;
   Nop();
   if((temp&0x80)==0x80)
   Sda=1;
   else 
   Sda=0;
   Scl=1;
   temp=Data<<1;
   Data=temp;
   BitCounter--;
   }
   while(BitCounter);
   Scl=0;
   }

   /*读一字节的数据,并返回该字节值*/
   uchar Read(void)
   {
    uchar temp=0;
	uchar temp1=0;
	uchar BitCounter=8;
	Sda=1;
	do{
	Scl=0;
	Nop();
	Scl=1;
	Nop();
	if(Sda)
	temp=temp|0x01;
	else
	temp=temp&0xfe;
	if(BitCounter-1)
	{
	temp1=temp<<1;
	temp=temp1;
	}
	BitCounter--;
	}
	while(BitCounter);
	return(temp);
	}

void WrToROM(uchar Data[],uchar Address,uchar Num)
{
  uchar i;
  uchar *PData;
  PData=Data;
  for(i=0;i<Num;i++)
  {
  Start();
  Send(0xa0);
  Ack();
  Send(Address+i);
  Ack();
  Send(*(PData+i));
  Ack();
  Stop();
  mDelay(20);
  }
  }


  void RdFromROM(uchar Data[],uchar Address,uchar Num)
  {
  uchar i;
  uchar *PData;
  PData=Data;
  for(i=0;i<Num;i++)
  {
  Start();
  Send(0xa0);
  Ack();
  Send(Address+i);
  Ack();
  Start();
  Send(0xa1);
  Ack();
  *(PData+i)=Read();
  Scl=0;
  NoAck();
  Stop();
  }
  }

   /*MAX7219写入*/
void Write(uchar add,uchar dat)
{
	uchar ADS,i,l;
	LOAD = 0;
	i=0;
	while(i<16)
	{
	if(i<8)
	{
	ADS=add;
	}
	else
	{
	ADS=dat;
	}
	for (l=8;l>=1;l--)
	{
		CLK = 0;
	    DIN =ADS&0x80;
		ADS=ADS<<1;
		 CLK = 1;
		CLK=0;
		}
		i=i+8;
		}


	   LOAD = 1;	
}

/*MAX7219初始化*/
void Initial(void)
{
	Write(0x0A,0xf5);
	Write(0x0B,0x07);
	Write(0x0C,0x01);
	Write(0x09,0xFF);
}


  void main()
  {	uchar i;
    uchar j;
	uchar k;
	uchar Number[24]={1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,8,8,8,8,1,1,1,1};
	uchar Buffer[4]={0};
    Initial(); //初始化MAX7219
	mDelay(500);
 WrToROM(Number,0,24); //将Number中的数据写入24C02中
 while(1)
 {
  k=0;
 for(i=0;i<6;i++)
  {
  RdFromROM(Buffer,k,4);  //将24C02中的数据每次取出4个给Buffer数组
  k=k+4;
  for(j=0;j<4;j++)
  {
  Write(0x01+j,Buffer[j]); //显示从24C02中读出的数据进行验证
   
  }
  mDelay(1000);
  }
  }
   }










 

⌨️ 快捷键说明

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