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

📄 iic.c

📁 别人的C51菜单程序
💻 C
字号:
/**************************************************************
**文件功能:24c04的驱动函数									 **
**创建人:xingyuegu											 **
**创建日期:2006-7-12										 **
**版本:1.0													 **
**************************************************************/
#include <reg51.h>																												#include <reg51.h>
#include <intrins.h>
#include "common.h"

#define nop() _nop_()

#define  WriteDeviceAddress 0xa0	//写驱动地址指令
#define  ReadDeviceAddress 0xa1		//读驱动地址指令

//sbit AT24C04_SCL=P2^0;
//sbit AT24C04_SDA=P2^1;
void delay10ms(void)
{
	uint i;
	for(i=0;i<6000;i++);
}

//启动信号
void Start(void)
{
	AT24C04_SCL=0;

	AT24C04_SDA=1;
	nop();
	nop();
	nop();
	nop();
	nop();
	AT24C04_SCL=1;
	nop();	

	nop();
	nop();
	nop();
	nop();

	AT24C04_SDA=0;
	nop();
	nop();
	nop();
	nop();
	nop();
	
}
//停止信号
void Stop(void)
{	AT24C04_SCL=0;
	nop();
	nop();
	nop();
	nop();
	nop();
	nop();

	AT24C04_SDA=0;

	AT24C04_SCL=1;
	nop();
	nop();	
	nop();
	nop();
	AT24C04_SDA=1;
	nop();
	nop();
	nop();
	nop();
	nop();
	nop();
}
//发应答信号
void ack(void)
{
	AT24C04_SCL=0;
	nop();
	nop();
	AT24C04_SDA=0;
	AT24C04_SCL=1;
	nop();
	nop();
	
}
//发非应答信号
void no_ack(void)
{
	AT24C04_SCL=0;
	nop();
	nop();
	AT24C04_SDA=1;
	AT24C04_SCL=1;
	nop();
	nop();
}
//写字节
bit write8bit(uchar input)
{
	uchar i;
	for(i=0;i<8;i++)
	{
		AT24C04_SCL=0;
		input=input<<1;
		AT24C04_SDA=CY;
		nop();
		nop();
		AT24C04_SCL=1;
		nop();
	} 
	
	AT24C04_SCL=0;				//read ack
	nop();
	//AT24C04_SDA=1;
	nop();
	nop();
//	nop(); 
	AT24C04_SCL=1;
	nop();

	CY=AT24C04_SDA;
	if(CY)
	return 0;
	else 
	return 1;
	
	//return(CY);
}
//读字节
uchar read8bit(void)
{
	uchar i,readdata;
	for(i=0;i<8;i++)
	{
		AT24C04_SCL=0;
		nop();

		readdata=(readdata<<1)|AT24C04_SDA;
		AT24C04_SCL=1;
		nop();
	}
	return readdata;
}

void write_byte(uchar address,uchar output)
{
	Start();
	write8bit(WriteDeviceAddress);
	write8bit(address);
	write8bit(output);
	Stop();
	delay10ms();
}

uchar random_read(uchar address)
{
	uchar rddata;
	Start();
	write8bit(WriteDeviceAddress);
	write8bit(address);
	Start();
	write8bit(ReadDeviceAddress);
	rddata=read8bit();
	no_ack();
	Stop();
	delay10ms();
	return rddata;
}

⌨️ 快捷键说明

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