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

📄 24c02a.c

📁 24c02 代码
💻 C
字号:
//送出去,返回来。点亮灯。

#include<reg51.h>
#define uchar unsigned char
sbit sda=P1^1;                     //i2c总线控制,传输线
sbit scl=P1^0;                      //时钟线
uchar k;
void delay()
{; ;}                               //延时较小,直接用
void start()                        //开始时序

{ 
   sda=1;                           //数据线释放    
   delay();
   scl=1;                           //时钟线高电平
   delay();
   sda=0;                           //数据线关上
   delay();
}

void stop()                         // 停止程序
{
   sda=0;                           //时钟高,数据上升
   delay();
   scl=1;
   delay();
   sda=1;
   delay();
}

void respons()                       //做出回应
{
  uchar i;
  scl=1;
  delay();
  while((sda==1)&&(i<250))i++;      //两个条件一个满足退出,一是数据线释放,2是默认250的时间
   scl=0;
   delay();
  }

void init()                         //初始化,sda,scl都为1     
{
    sda=1;
	delay();
	scl=1;
	delay();
}

void write_byte(uchar date)          //写数据进24C02
{
    uchar i,temp;
	temp=date;

	for(i=0;i<8;i++)             //一位一位送,从高位开始
	{
	   temp=temp<<1;
	   scl=0;                    //数据可以变化
	   delay();

	   sda=CY;                   //用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++)
	{
	  scl=1;
	  delay();

	  k=((k<<1)|sda) ;   //把sda中的数据放最低位中去,循环8次
	  scl=0;
	  delay();
	}
	return k;
 }

 void write_add(uchar address,uchar date)  //写入指定地址
 {
 	start();
        write_byte(0xa0);                 //写指令
	respons();                        //回应
	write_byte(address);              //写地址
	respons();
        start();
        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();
	stop();
	return date;
 }

 void delay1(uchar x)               //延时
{
	uchar a,b;
	for(a=x;a>0;a--)
	 for(b=100;b>0;b--);
}



  void main()
  {
    init();

    write_add(23,0xf0);            //在地址23中写一个0xf0的数据
                                  
	delay1(100);               //延时一会

     P3=read_add(23);               // 在23的地址中读出写进去的数


       while(1);

  }

⌨️ 快捷键说明

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