📄 pca_9555.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 + -