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

📄 i2c.c

📁 STC89C51控制LCD显示
💻 C
字号:
#include <reg52.h>     //包括一个52标准内核的头文件
//变量类型标识的宏定义
#define uchar unsigned char //定义一下方便使用

#define	WriteDeviceAddress 0xa0	  //定义器件在IIC总线中的地址
#define	ReadDviceAddress 0xa1

sbit	SCL=P1^7;
sbit	SDA=P1^6; 

void DelayMs(unsigned int number);

//开始总线
void Start() 
{
	SDA=1;
	SCL=1;
	SDA=0;
	SCL=0;
}
//结束总线
void Stop() 
{
	SCL=0;
	SDA=0;
	SCL=1;
	SDA=1;
}
//发ACK0
void NoAck() 
{
	SDA=1;
	SCL=1;
	SCL=0;
}
//测试ACK
bit TestAck() 
{
	bit ErrorBit;
	SDA=1;
	SCL=1;
	ErrorBit=SDA;
	SCL=0;
	return(ErrorBit);
}
//写入8个bit到24c02
Write8Bit(unsigned char input) 
{
	unsigned char temp;
	for(temp=8;temp!=0;temp--) 
	{
		SDA=(bit)(input&0x80);
		SCL=1;
		SCL=0;
		input=input<<1;
	}
}
//写入一个字节到24c02中
Write24c02(uchar ch,uchar address) 
{
	Start();
	Write8Bit(WriteDeviceAddress);
	TestAck();
	Write8Bit(address);
	TestAck();

	Write8Bit(ch);
	TestAck();
	
	Stop();
	DelayMs(10);
}
//从24c02中读出8个bit
uchar Read8Bit() 
{
	unsigned char temp,rbyte=0;
	for(temp=8;temp!=0;temp--) 
	{
		SCL=1;
		rbyte=rbyte<<1;
		rbyte=rbyte|((unsigned char)(SDA));
		SCL=0;
	}
	return(rbyte);
}
//从24c02中读出1个字节
uchar Read24c02(uchar address) 
{
	uchar ch;

	Start();
	Write8Bit(WriteDeviceAddress);
	TestAck();
	Write8Bit(address);
	TestAck();
	Start();
	Write8Bit(ReadDviceAddress);
	TestAck();
	ch=Read8Bit();
	NoAck();
	Stop();
	return(ch);
}

⌨️ 快捷键说明

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