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

📄 24c02.c

📁 eeprom读写程序:at89c52的i2c读写
💻 C
字号:
#define uchar unsigned char
#define uint unsigned int
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
sbit  scl=P3^5;  //24c02 SCL
sbit  sda=P3^4;  //24c02 SDA
sbit  DOG=P1^7;  //狗
uchar x24c02_read(uchar address);              //从24c02的地址address中读取一个字节数据
void  x24c02_write(uchar address,uchar info);  //向24c02的address地址中写入一字节数据info
void  x24c02_init();                           //24c02初始化子程序
void  delay1(uchar x);
void  flash();
void  x24c01_init();
void  start();
void  stop();
void  writex(uchar j);
uchar readx();
void  clock();

/**************显示程序*********/
sbit sda1=P3^0;
sbit clock1=P3^1; 
uchar num[6];
uchar sdata1;
/********************************************************/
/**名称:delay1();                                     **/
/**功能:延时程序				       **/
/********************************************************/
void  delay1(uchar x)
{
   uint i;
   for(i=0;i<x;i++);
   DOG=~DOG;
}
/********************************************************/
/**名称:flash();                                      **/
/**功能:闪烁程序				       **/
/********************************************************/
void flash()
{
//   uchar u;
   DOG=~DOG;
}
/********************************************************/
/**名称:x24c02_init()                                 **/
/**功能:x24c02初始化   			       **/
/********************************************************/
void x24c02_init()
{
   scl=1; flash(); sda=1; flash();
}
/********************************************************/
/**名称:start()                                       **/
/**功能:I2C开始        			       **/
/********************************************************/
void start()
{
   sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
}
/********************************************************/
/**名称:stop()                                        **/
/**功能:I2C停止        			       **/
/********************************************************/
void stop()
{
   sda=0; flash(); scl=1; flash(); sda=1; flash();
}
/********************************************************/
/**名称:writex(uchar j)                               **/
/**功能:I2C写          			       **/
/********************************************************/
void writex(uchar j)
{
   uchar i,temp;
   temp=j;
   for (i=0;i<8;i++){
      temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();
   }
   scl=0; flash(); sda=1; flash();
}
/********************************************************/
/**名称:readx()                                       **/
/**功能:I2C读          			       **/
/********************************************************/
uchar readx()
{
   uchar i,j,k=0;
   scl=0; flash(); sda=1;
   for (i=0;i<8;i++){
      flash(); scl=1; flash();
      if (sda==1) j=1;
      else j=0;
      k=(k<<1)|j; scl=0;
   }
   flash(); return(k);
}
/********************************************************/
/**名称:clock()                                       **/
/**功能:I2C时钟          			       **/
/********************************************************/
void clock()
{
   uchar i=0;
   scl=1; flash();
   while ((sda==1)&&(i<255))i++;
   scl=0; flash();
}
/********************************************************/
/**名称:x24c02_read(uchar address)                    **/
/**功能:读x24c02        			       **/
/********************************************************/
uchar x24c02_read(uchar address)
{
   uchar i;
   start(); writex(0xa0);
   clock(); writex(address);
   clock(); start();
   writex(0xa1); clock();
   i=readx(); stop();
   delay1(100);
   return(i);
}
/********************************************************/
/**名称:x24c02_write(uchar address,uchar info)        **/
/**功能:写x24c02        			       **/
/********************************************************/
void x24c02_write(uchar address,uchar info)
{
   EA=0;
   start(); writex(0xa0);
   clock(); writex(address);
   clock(); writex(info);
   clock(); stop();
   EA=1;
   delay1(500);
}


/**************显示程序*********/
void disp(void)
{ 
  uchar dat; 
  uchar k,i; 
  uchar code LEDValue[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};  //0-9
  uchar data num[6];
  num[0]=0;
  num[1]=0;
  num[2]=0;
  num[3]=sdata1/100;
  sdata1=sdata1%100;
  num[4]=sdata1/10;
  num[5]=sdata1%10;

  for(k=0;k<=5;k++)
 {
   dat=LEDValue[num[5-k]];

   for (i=1;i<=8;i++)
 {
   sda1=(bit)(dat&0x01);
   clock1=0;
   clock1=1;
   dat=dat>>1;
  }
  
 }

} 

void delay11(uint del)
{

for(del;del>0;del--);

}


void main(void)
{
 
 uchar adddd=0x00,i;
 x24c02_init();
 for(i=0;i<16;i++)
{ x24c02_write(adddd,i);
 adddd++;
 }
 adddd=0x10;
  for(i=0;i<16;i++)
{ x24c02_write(adddd,i+16);
 adddd++;
 }
 adddd=0x20;
 for(i=0;i<16;i++)
{ x24c02_write(adddd,i+32);
 adddd++;
 }
 adddd=0x00;
 for(i=0;i<48;i++)
 {sdata1=x24c02_read(adddd);
 disp();
 delay11(130000);
 adddd++;}

 while(1);

}

⌨️ 快捷键说明

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