记录开发过程中的问题和功能。毕se代做,小家电开发。 收徒带做企业级项目,帮助毕业生和转行人员顺利找到工作。

LiSun

记录开发过程中的问题和功能。毕se代做,小家电开发。 收徒带做企业级项目,帮助毕业生和转行人员顺利找到工作。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
#include "pcf8574.h"
/******************
笔记:
1、PCF8574寻址:1帧1字节,[0100 A2 A1 A0 R1/W0]
2、
3、
*******************/

/******************************
函数名:PCF8574ReadByte
功  能:读取端口状态
形  参:I--器件信息结构体  ch--用于存放端口状态的变量
返回值:0--正常 1--错误
备  注:
*******************************/
IIC_STATUS PCF8574ReadByte(const IIC_PIN *I, uint8_t *ch)
{
    uint8_t tmp;
    IIC_STATUS status;

    IIC_Start(I);
    IIC_WriteByte(I, I->ADDR | 0x01); //发送器件地址,并切换为读取模式
    status = IIC_Wait_ACK(I);
    if(status)
    {
        return(IIC_WRITE_ERR);
    }
    else
    {
        IIC_ReadByte(I, &tmp);   //读取数据
        IIC_NACK(I);
        IIC_Stop(I);
        *ch = tmp;
        return(IIC_OK);
    }
}

/******************************
函数名:PCF8574WriteByte
功  能:写入端口状态
形  参:I--器件信息结构体  ch--欲写入端口状态的变量
返回值:0--正常 1--错误
备  注:
*******************************/
IIC_STATUS PCF8574WriteByte(const IIC_PIN *I, uint8_t ch)
{
    IIC_STATUS status;

    IIC_Start(I);
    IIC_WriteByte(I, I->ADDR); //发送器件地址,并切换为写入模式
    status = IIC_Wait_ACK(I);
    if(status)
    {
        return(IIC_WRITE_ERR);
    }
    else
    {
        IIC_WriteByte(I, ch);      //数据写入
        status |= IIC_Wait_ACK(I);
        IIC_Stop(I);   //停止
        if(status)
        {
            return(IIC_WRITE_ERR);
        }
        else
        {
            return(IIC_OK);
        }
    }
}

#ifndef __PCF8574_HEADER__
#define __PCF8574_HEADER__

#include "hal_iic.h"

IIC_STATUS PCF8574ReadByte(const IIC_PIN *I, uint8_t *ch);
IIC_STATUS PCF8574WriteByte(const IIC_PIN *I, uint8_t ch);

#endif //__PCF8574_HEADER__

PCF8574中文手册.pdf

posted on 2022-08-13 11:01  嵌入式单片机实验室  阅读(270)  评论(0)    收藏  举报
记录开发过程中的问题和功能。毕se代做,小家电开发。 收徒带做企业级项目,帮助毕业生和转行人员顺利找到工作。