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

📄 pcf8563.c

📁 时钟芯片PCF8591 C语言程序
💻 C
字号:
#include <reg52.h>                    /* special function registers 8052      */

#define HIGH 1
#define LOW 0
#define FALSE 0
#define TRUE ~FALSE
#define READ 0xA3
#define WRITE 0xA2

sbit  SCL   =P2^3;
sbit  SDA   =P2^2;

extern void delay(unsigned int);            /*延时子程序*/

/*提供I2C总线工作时序中的起始位*/
void  I_start_8563(void)
{
	SCL=HIGH;
	delay(1);
	SDA=LOW;
	delay(1);
	SCL=LOW;
	delay(1);
}

/*提供I2C总线工作时序中的停止位*/
void I_stop_8563(void)
{
	SDA=LOW;
	delay(2);
	SCL=HIGH;
	delay(2);
	SDA=HIGH;
	delay(2);
	SCL=LOW;
	delay(2);
}

/*总线初始化*/

void pcf8563_init(void)
{
	SCL=LOW;
	I_stop_8563();
}


/*提供总线时钟信号,可发送数据,也可接受数据*/
bit I_clock_8563(void)
{
	bit sample;
	SCL=HIGH;
	delay(1);
	sample=SDA;
	SCL=LOW;
	delay(1);
	return(sample);
}

/*发送8位数据,请求应答信号,如果受到则返回1,否则返回0*/
bit I_send_8563(unsigned char I_data)
{
	register unsigned char i;
	for (i=0;i<8;i++)
		{
		SDA=(bit)(I_data & 0x80);
		I_data=I_data<<1;
		I_clock_8563();
		}
	SDA=HIGH;
	return(~I_clock_8563());
}

/*接受8位数据*/
unsigned char I_receive_8563(void)
{
	unsigned char I_data=0;
    register unsigned char i;
	for (i=0;i<8;i++)
		{
		I_data*=2;
		if(I_clock_8563())
			I_data++;
		}
	 return(I_data);
}


/*发送应答信号*/
/*
void I_Ack(void)
{
	SDA=LOW;
	I_clock();
	SDA=HIGH;
}

*/

/*发送地址*/
bit E_address_8563(unsigned char Address)
{
	I_start_8563();
	if(I_send_8563(WRITE))
		return(I_send_8563(Address));
	else
		return(FALSE);
}

/*读pcf8563,成功返回所读的值,不成功返回0*/
unsigned char pcf8563_read(unsigned char read_add)
{
	unsigned char retval;
	pcf8563_init();
	if (E_address_8563(read_add))
		{
		I_start_8563();
		if (I_send_8563(READ))
			{
			retval=(I_receive_8563());
			I_clock_8563();
			I_stop_8563();
			return(retval);
			}
		else
			{
			I_stop_8563();
			return(0);
			}
		}
	else
		{
		I_stop_8563();
		return(0);
		}
}

/*写pcf8563,成功返回1,不成功返回0*/
unsigned char pcf8563_write(unsigned char data_wrt,unsigned char add_wrt)
{
	pcf8563_init();
	if(E_address_8563(add_wrt) && I_send_8563(data_wrt))
		{
			I_stop_8563();
			delay(5);
			return(1);
		}
	else
		return(0);

}

⌨️ 快捷键说明

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