PCF8574T和PCF8574AT用出来的那点事

本文讲述了在液晶显示中,PCF8574T和PCF8574AT如何通过IIC协议将并行数据线转换为串行控制,以减少微处理器I/O口的占用。讨论了两者地址的区别,以及在实际使用中遇到的电压影响导致的显示问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PCF8574T和PCF8574AT用出来的那点事

液晶显示一般用到4根或者是8根的数据线,这样的方式会占用较多的I/O口,影响微处理器的使用。PCF8574和PCF8574AT这两种芯片都是IIC芯片,可以将并行的八根数据线转换只用两根数据线进行控制,减少了I/O口的使用,提高所使用微处理器的控制能力,用到的这两种芯片组成的模块是由于不同的批次购买,不能正常的使用,最后才发现的。

通过查这两种芯片的数据手册发现,这两芯片的地址是不一样的:
这里写图片描述
如上图所示,其中a是PCF8574T的地址,b是PCF8574AT的地址

从购买到的两种的模块来看,默认的A2、A1、A0是不接的状态,处于高电平,这样就可以计算出来PCF8574T的八位二进制数01001110,地址是0x4e;PCF8574AT的八位二进制数01111110,地址是0x7e。

知道了这个区别就很容易的解决原有程序无法控制另一个模块的运行的事情了。将其中的地址宏定义为一个变量,修改宏定义就可以更改所有的变量。

其中还有一个问题是,第二次购买的模块在使用过程中会受电压限制,当电压低于某一个值时,液晶显示会出现不正常,出现乱码,无法按照既定的程序来运行,这个问题在以前的没有遇到…猜测可能是新的模块的问题。

两种模块控制的代码部分:

#include"1602.h"
#include <STC12C5A.H>
#define adress_1602 0x4e  //0x7e(PCF8574AT)   0x4e(PCF8574T)

bit ack1;
sbit SCL = P3^7;//定义两个数据端口
sbit SDA = P3^6;
unsigned char LCD_data=0x08;

/*----------------------------------------------- 
  名称:LCD1602
  修改:无
  内容:通过标准程序静态显示字符
  引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
------------------------------------------------*/
 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void delay_nus(unsigned int n) //N us延时函数
{
    unsigned int i=0;
        for (i=
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值