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

📄 24c02.h

📁 此程序为51,可以接收红外遥控,读温度18b20.非常好懂.欢迎下载
💻 H
字号:
/*实验名称:读写AT24C02实验
  功能:用串口发送指令读出或写入00-7FH单无的内容,显示结果在LCD上显示
  读出(16进制数):AA 地址
  写入(16进制数):BB 地址 内容
  作者:http://www.mcuprog.com
        05-02-01
*/

#define Uchar unsigned char
#define Uint  unsigned int
void SomeNOP(); 

/*I2CTab00023*/
sbit SDA = P2^3;
sbit SCL = P2^2;


/*----------------------I2CTab00024---------------------------------*/
/***********************Tab00025*********************************/
/*Tab00026*/
void Delay_1ms(Uchar time)
{
	Uchar j;
	while(time--)
	{
		for(j=163;j!=0;j--)
		{;}
	}
}

/*I2CTab00027*/
void I2CStart(void)	
{
	SDA = 1;
	SomeNOP();
	SCL = 1;
	SomeNOP();
	SDA = 0;
	SomeNOP();
	SCL = 0;
	SomeNOP();
}

/*I2CTab00028*/
void I2CStop(void)
{
	SDA = 0;
	SomeNOP();
	SCL = 1;
	SomeNOP();
	SDA = 1;
	SomeNOP();
}

void ACK(void)			//Acknowledge信号
{
	SDA = 0;
	SomeNOP();
	SCL = 1;
	SomeNOP();
	SCL = 0;
	SomeNOP();
}

void NACK(void)			//没有Acknowledge信号
{
	SDA = 1;
	SomeNOP();
	SCL = 1;
	SomeNOP();
	SCL = 0;
	SomeNOP();
}

void AutoACK(void)		//在一定的时间内自动确定ACK的信号//
{
	Uchar i = 0;
	SCL = 1;
	SomeNOP();
	while((SDA == 1)&&(i<255))i++;
	SCL = 0;
	SomeNOP();
}

	
/*I2CTab00029BYTE)*/
void Writex(Uchar j)
{
	Uchar i,temp;
	temp = j;
	for (i=0;i<8;i++)	//串行移位,先送高位,再送低位//
	{
		temp =temp<<1;
		SCL = 0;
		SomeNOP();
		SDA = CY;
		SomeNOP();
		SCL = 1;
		SomeNOP();
	}
	SCL = 0;
	SomeNOP();
	SDA = 1;
	SomeNOP();
}
/*I2CTab00031BYTETab00032BYTETab00033*/
Uchar Readx(void)
{
	Uchar i,j,k=0;
	SCL = 0;
	SomeNOP();
	SDA = 1;
	for (i=0;i<8;i++)	// 串行移位,先读出高位,后读出低位//
	{
		SomeNOP();
		SCL = 1;
		SomeNOP();
		if(SDA ==1) j=1;
		else	j=0;
		k =(k<<1)|j;
		SCL = 0;
	}
	SomeNOP();		
	return(k); 		//返回读出的值//
}

//******************以下为对24CXX系列的读写程序******************************//
//*************24CXX的device address 为写0A0H,读为0A1H*********************//
/*Tab00034*/
void X24_Write(Uchar Addresslow,Uchar Write_date)
{
	I2CStart();
	Writex(0xA0);
	AutoACK();
	Writex(Addresslow);
	AutoACK();
	Writex(Write_date);
	AutoACK();
	I2CStop();
	Delay_1ms(10);
}

/*Tab00035*/
Uchar X24_Read(Uchar Addresslow)
{	
	Uchar i;
	I2CStart();
	Writex(0xA0);
	AutoACK();
	Writex(Addresslow);
	AutoACK();
	I2CStart();
	Writex(0xA1);
	AutoACK();
	i =Readx();
	//ACK();	//注意:这里不能有ACK应答信号//
	I2CStop();
	Delay_1ms(0);
	return(i);
}


void SomeNOP()
{
	char i;
	for(i = 0; i < 300 ; i++);
	
}

⌨️ 快捷键说明

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