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

📄 i2c.c

📁 TEA5767 C语言源程序(兼容51)
💻 C
字号:
#include "reg51.h"
#include <string.h>

extern bit gFmMute;
BYTE	gFmDat,gRdFreq,gFmSt;
sbit	gI2cCLK = 0x81;
sbit	gI2cSDA = 0x80;

WORD gDispFre;

void I2C_Start()
{
	gI2cCLK = 0;
	WaitUs(1);
	gI2cSDA = 1;
	WaitUs(1);
	gI2cCLK = 1;
	WaitUs(5);
	gI2cSDA = 0;
	WaitUs(5);
}

void I2C_Stop()
{
	gI2cCLK = 0;
	WaitUs(1);
	gI2cSDA = 0;
	WaitUs(5);
	gI2cCLK = 1;
	WaitUs(3);
	gI2cSDA = 1;
}

bit I2C_Ack()
{
	gI2cCLK = 0;
	WaitUs(2);
	gI2cSDA = 1;
	WaitUs(2);
	gI2cCLK = 1;
	WaitUs(2);
	if (!gI2cSDA)			//ACK
		return 1;
	return 0;
}

void I2C_Set_Ack()
{
	gI2cCLK = 0;
	WaitUs(2);
	gI2cSDA = 0;
	WaitUs(2);
	gI2cCLK = 1;
	WaitUs(2);
}

void I2C_Set_nAck()
{
	gI2cCLK = 0;
	WaitUs(2);
	gI2cSDA = 1;
	WaitUs(4);
	gI2cCLK = 1;
	WaitUs(2);
}

bit Write_8bit(BYTE gData)
{
	BYTE i;
	for (i=0; i<8; i++){
		gI2cCLK = 0;
		WaitUs(1);
		if (gData & 0x80){
			gI2cSDA = 1;
		}else{
			gI2cSDA = 0;
		}
		WaitUs(1);
		gData <<= 1;
		gI2cCLK = 1;
		WaitUs(2);
	}
	return I2C_Ack();
}

BYTE Read_8bit()
{
	BYTE gData,i;
	gData = 0;
	for (i=0; i<8; i++){
		gI2cCLK = 0;
		WaitUs(2);
		gI2cSDA = 1;
		WaitUs(1);
		gI2cCLK = 1;
		WaitUs(1);
		gData <<= 1;
		if (gI2cSDA)
			gData |= 0x01;
		WaitUs(1);
	}
	return gData;
}

//Write Register of FM Module
bit FM_SetFreq(WORD Freq)
{
	WORD Value;
	bit gBack;
	BYTE temp;
	Value = (WORD)(1.2207*(long)Freq + 27.46582);
	gDispFre = Value;
	temp = HIBYTE(Value);
	if(gFmMute) temp |= 0x80;
	I2C_Start();
	gBack = Write_8bit(0xc0);
	Write_8bit(temp);
	Write_8bit(LOBYTE(Value));
	Write_8bit(0x50);
	Write_8bit(0x10);
	Write_8bit(0x00);
	I2C_Stop();
	return gBack;
} 

//Read Register of FM Module
void FM_GetFreq()
{
	I2C_Start();
	Write_8bit(0xc1);
	Read_8bit();
	I2C_Set_Ack();
	Read_8bit();
	I2C_Set_Ack();
	gFmDat = Read_8bit();
	I2C_Set_Ack();
	gFmSt = Read_8bit();
	I2C_Set_Ack();
	Read_8bit();
	I2C_Set_nAck();
	I2C_Stop();
	gFmDat &= 0x7f;
	gFmSt &= 0xf0;
}

⌨️ 快捷键说明

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