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

📄 pca_9555.c

📁 别人的C51菜单程序
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#include "common.h"



#define WriteDeviceAddress_9555 	0x40
#define ReadDeviceAddress_9555 		0x41
#define Commond_input0  	0x00
#define Commond_input1  	0x01
#define Commond_output0  	0x02
#define Commond_output1  	0x03
#define Commond_polarity0  	0x04
#define Commond_polarity1  	0x05
#define Commond_config0  	0x06
#define Commond_config1  	0x07
sbit PCA9555_SCL=P1^0;
sbit PCA9555_SDA=P1^1;	
/*void delay_pca9555(void)
{
	uchar i;
	for(i=0;i<20;i++);
} */

void start_9555(void)
{
	PCA9555_SCL=0;
	PCA9555_SDA=1;
	nop();
	nop();
	nop();
	nop();
	nop();
	nop();

	PCA9555_SCL=1;
	nop();
	nop();
	nop();
	nop();
	nop();

	PCA9555_SDA=0;
	nop();
	nop();
	nop();
	nop();
	nop();
}

void stop_9555()
{
	PCA9555_SCL=0;
	PCA9555_SDA=0;
	nop();
	nop();
	nop();
	nop();
	nop();

	PCA9555_SCL=1;
	nop();
	nop();
	nop();
	nop();
	nop();

	
	PCA9555_SDA=1;
	nop();
	nop();
	nop();	
	nop();
	nop();
}	

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

	CY=PCA9555_SDA;
	if(CY)
	return 0;
	else 
	return 1;

}
//读字节
uchar pca9555_read8bit(void) 
{
	uchar data i,pcadata=0;
	for(i=0;i<8;i++)
	{
		PCA9555_SCL=0;
		nop();
		pcadata=(pcadata<<1)|PCA9555_SDA;
		PCA9555_SCL=1;
	}

	return pcadata;
}
//写pca9555输出寄存器
void writeoutput(uchar input1,uchar input2)
{
	start_9555();
	write8bit(WriteDeviceAddress_9555);
	write8bit(Commond_output0);
	write8bit(input1);
	write8bit(input2);
	stop_9555();
}
//写pca9555配置寄存器
void writeconfig(uchar input1,uchar input2)
{
	start_9555();
	write8bit(WriteDeviceAddress_9555);
	write8bit(Commond_config0);
	write8bit(input1);
	write8bit(input2);
	stop_9555();
}

void readregister(uchar data *data_pca9555) 		//
{
	start_9555();
	write8bit(WriteDeviceAddress_9555);
	write8bit(Commond_input0);
	start_9555();
	write8bit(ReadDeviceAddress_9555);
	data_pca9555[0]=pca9555_read8bit();
	ack();
	//delay_pca9555();
	data_pca9555[1]=pca9555_read8bit();
	no_ack();
	stop_9555();

}
//
void pca9555_init(void)
{
	 writeconfig(0xff,0x00);//I/O 0为输出,I/O 1为输入
	 writeoutput(0x00,0xfe);//
}

⌨️ 快捷键说明

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