单片机 N76E003 PCA9540BD IIC扩展器 一组IIC变两组IIC 使用方法 例子 代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


/* -----------------------------------------宏定义-----------------------------------------*/

/* -----------------------------------------头文件-----------------------------------------*/
#include "main.h"

/* -----------------------------------------结构体定义-------------------------------------*/
code IIC_TYPE PCA9540BD = {2, 0xE0};
/* -----------------------------------------全局变量定义-----------------------------------*/

/* -----------------------------------------应用程序---------------------------------------*/
void PCA9540BD_Init(void)
{
    IIC_Init();          // I2C初始化
}

/*********************************************
函数名:PCA9540BD_Write_DATA
功  能:写 地址 数据
形  参:addr 地址   dat 数据
返回值:
备  注:
作  者:薛建强
时  间:2020/05/09
**********************************************/
void PCA9540BD_Write_DATA(const uint8_t addr, const uint8_t DATA)
{
    if (addr);
    IIC_Start();                 // 启动
    IIC_WriteByte(PCA9540BD.ADDR); // 设备地址
    IIC_Wait_ACK();              // 等待数据响应
    IIC_WriteByte(DATA);         // 发送数据
    IIC_Wait_ACK();              // 等待数据响应
    IIC_Stop();                  // 停止
}
/*********************************************
函数名:PCA9540BD_Read_DATA
功  能:读地址数据
形  参:addr--寄存器地址
返回值:
备  注:
作  者:薛建强
时  间:2020/05/09
**********************************************/
uint8_t PCA9540BD_Read_DATA(const uint8_t addr)
{
    uint8_t GET_DATA = 0;
    if (addr);
    IIC_Start();                        // 启动
    IIC_WriteByte(PCA9540BD.ADDR | 1);  // 发送地址
    IIC_Wait_ACK();                     // 等待数据响应

    GET_DATA = IIC_ReadByte();          // 获取数据
    IIC_Wait_ACK();                     // 等待数据响应

    IIC_Stop();                         // 停止
    return GET_DATA;
}

/*********************************************
函数名:PCA9540BD_Switch_Ch
功  能:选择IIC通道
形  参:0--IIC0 1--IIC1
返回值:
备  注:
作  者:薛建强
时  间:2020/05/09
使  用:
**********************************************/
void PCA9540BD_Switch_Ch(const uint8_t ch)
{
    if (ch == 0)
    {
        PCA9540BD_Write_DATA(0, 0x04);
    }
    else if (ch == 1)
    {
        PCA9540BD_Write_DATA(0, 0x05);
    }
}


/*********************************************
函数名:PCA9540BD_Switch_Ch
功  能:关闭IIC通道
形  参:
返回值:
备  注:
作  者:薛建强
时  间:2020/05/09
使  用:
**********************************************/
void PCA9540BD_Off_Ch(void)
{
    PCA9540BD_Write_DATA(0, 0x00);
}
#ifndef _PCA9540BD_H
#define _PCA9540BD_H
/* -----------------------------------------宏定义-----------------------------------------*/

/* -----------------------------------------头文件-----------------------------------------*/
#include "main.h"

/* -----------------------------------------结构体定义-------------------------------------*/

/* -----------------------------------------全局变量定义-----------------------------------*/

/* -----------------------------------------应用程序---------------------------------------*/
void    PCA9540BD_Init(void);
void    PCA9540BD_Write_DATA(const uint8_t addr, const uint8_t DATA);
uint8_t PCA9540BD_Read_DATA(const uint8_t addr);
void PCA9540BD_Switch_Ch(const uint8_t ch);
void PCA9540BD_Off_Ch(void);
#endif

猜你喜欢

转载自blog.csdn.net/qq_29246181/article/details/106011927