PCF8574AT的I2C地址和单独IO操作

PCF8574AT是飞利浦的一个IO扩展IC,I2C通讯接口,有8个IO口可以配置,只有一个寄存器。常见的一种应用是用它来作为LCD1602的I2C通讯界面。

在Arduino的LiquidCrystal_I2C库中,默认情况下PCF8574AT使用0x3F作为高7位地址,将它左移一位以后就是7E,最低位为0是写操作,最低位为1是读操作,它在通讯的时候自动进行转换。

Arduino是如此使用: 

LiquidCrystal_I2C lcd(0x3F,20,4);   //LCD2004, 地址0x3F

 

 

但是在STM32的HAL库中,需要我们先对地址进行转换,我们在System Workbench中把鼠标放在I2C的相关函数上,比如HAL_I2C_Master_Transmit(),会出现如下提示:

**

  * @brief  Transmits in master mode an amount of data in blocking mode.

  * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains

  *                the configuration information for the specified I2C.

  * @param  DevAddress Target device address: The device 7 bits address value

  *         in datasheet must be shifted to the left before calling the interface

  * @param  pData Pointer to data buffer

  * @param  Size Amount of data to be sent

  * @param  Timeout Timeout duration

  * @retval HAL status

  */

意思就是函数在使用datasheet中的7位I2C地址时,必须先左移一位。所以使用

HAL_I2C_Master_Transmit()

对PCF8574AT进行写操作时地址就是0x7E,读操作时地址就是0x7F。

如果我们希望单独操作某个IO(P7-P0),就对那个bit进行单独写1或者清0即可(STM HAL库)。

#define Write_Add_LCD 0x7E
#define Read_Add_LCD 0x7F

uint8_t val;
HAL_I2C_Master_Receive (&hi2c1, Read_Add_LCD,&val, 1, 1000);
val |= 1<<3; //P3 bit置1
HAL_I2C_Master_Transmit (&hi2c1, Write_Add_LCD,&val, 1, 1000);

HAL_I2C_Master_Receive (&hi2c1, Read_Add_LCD,&val, 1, 1000);
val &= ~(1<<3); //P3 bit清0
HAL_I2C_Master_Transmit (&hi2c1, Write_Add_LCD,&val, 1, 1000);


(注:为避免同一总线上I2C地址冲突,对A0/A1/A2电平进行配置,可以有8种不同地址的选择)

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
PCF8574AT是一款常用的I2C总线扩展芯片,而LCD1602是一种常见的16x2字符液晶显示屏,而51单片机是一种经典的8位单片机微控制器。它们之间可以结合使用来实现单片机控制LCD显示的功能。 首先,通过连接PCF8574AT和LCD1602,可以利用PCF8574ATIO口进行对LCD1602的输入输出控制。PCF8574AT通过I2C总线和51单片机通信,通过发送指令和数据来实现对LCD1602的操作。 在51单片机中,可以通过I2C总线的软件驱动来与PCF8574AT进行通信,通过设置PCF8574AT对应的IO口为输出模式,发送指令和数据来控制LCD1602的显示内容。可以使用标准的I2C通信协议,通过发送起始位、从机地址、读写位、数据以及结束位等来实现通信。 单片机使用51系列经典的软件编写程序,通过初始化I2C总线,设置PCF8574ATIO口为输出模式,然后通过向PCF8574AT发送指令和数据来控制LCD1602的显示内容。指令可以包括清屏、设置光标位置、设置显示模式、设置字符等,数据可以包括要显示的字符或者字符串。 通过编写适当的程序,可以实现单片机控制LCD1602显示不同的字符、数字、符号等。可以显示实时的数据、系统状态、报警信息等。通过结合PCF8574AT、LCD1602和51单片机,可以实现简单的嵌入式显示控制系统。 总之,PCF8574AT、LCD1602和51单片机可以相互结合来实现单片机控制LCD显示的功能。通过使用I2C总线通信和适当的程序编写,可以实现简单的液晶显示控制。这样的系统广泛应用于嵌入式系统、电子产品、仪器仪表等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值