51单片机-IO扩展模块 pcf8575

PCF8575介绍

PCF8575 是 NXP(原飞利浦半导体)生产的一款通用 I²C 总线 I/O 扩展器芯片,主要用于微控制器(如 Arduino、STM32 等)的 I/O 端口扩展。

主要特性

  • 16位并行 I/O 端口:可以配置为输入或输出

  • I²C 总线接口

    • 兼容 Fast-mode I²C (400 kHz)

    • 支持 3.3V 和 5V 系统

  • 中断输出:当输入状态改变时可触发中断

  • 低待机电流消耗:适合电池供电设备

  • 宽工作电压范围:2.5V 至 6V

  • 工业温度范围:-40°C 至 +85°C

引脚配置

PCF8575 通常采用 24 引脚 SO 或 TSSOP 封装,主要引脚包括:

  • SDA, SCL:I²C 总线接口

  • A0-A2:地址选择引脚

  • INT:中断输出

  • P00-P17:16个可编程 I/O 引脚

  • VCC, GND:电源和地

应用场景

  1. LED 控制

  2. 按键/开关输入检测

  3. 继电器控制

  4. 需要额外 I/O 端口的嵌入式系统

  5. 工业控制和自动化

与 PCF8574 的区别

PCF8575 是 PCF8574 的升级版本,主要区别在于:

  • PCF8575 提供 16 位 I/O (PCF8574 只有 8 位)

  • PCF8575 的中断功能更完善

编程接口

通过 I²C 接口通信,典型操作包括:

  • 写入输出状态

  • 读取输入状态

  • 配置 I/O 方向(通过写入特定模式)

典型电路连接

PCF8575 通常与微控制器通过 I²C 总线连接,地址由 A0-A2 引脚决定,允许同一总线上连接最多 8 个 PCF8575 设备。

 

proteus 51单片机 连接PCF8575

代码实现

#include <reg51.h>
#include <intrins.h>#define u8 unsigned char
#define u16 unsigned int// 定义I2C引脚
sbit SDA = P2^1;
sbit SCL = P2^0;// PCF8575地址(根据A0,A1,A2引脚配置)
#define PCF8575_ADDR 0x40// 延时函数
void delay_us(u8 t) {while(t--);
}void delay_ms(u16 t) {u16 i, j;for(i=0; i<t; i++)for(j=0; j<120; j++);
}// I2C起始信号
void I2C_Start() {SDA = 1;SCL = 1;delay_us(5);SDA = 0;delay_us(5);SCL = 0;
}// I2C停止信号
void I2C_Stop() {SDA = 0;SCL = 1;delay_us(5);SDA = 1;delay_us(5);
}// I2C发送应答
void I2C_Ack(u8 ack) {SDA = ack;SCL = 1;delay_us(5);SCL = 0;SDA = 1;
}// I2C接收应答
u8 I2C_Wait_Ack() {u8 ack;SDA = 1;SCL = 1;delay_us(5);ack = SDA;SCL = 0;return ack;
}// I2C发送一个字节
void I2C_SendByte(u8 dat) {u8 i;for(i=0; i<8; i++) {SDA = (dat & 0x80) ? 1 : 0;SCL = 1;delay_us(5);SCL = 0;dat <<= 1;}
}// I2C接收一个字节
u8 I2C_RecvByte() {u8 i, dat = 0;SDA = 1;for(i=0; i<8; i++) {SCL = 1;delay_us(5);dat <<= 1;dat |= SDA;SCL = 0;delay_us(5);}return dat;
}// 向PCF8575写入16位数据
void PCF8575_Write(u16 dat) {I2C_Start();I2C_SendByte(PCF8575_ADDR);  // 发送设备地址+写命令I2C_Wait_Ack();I2C_SendByte(dat >> 8);      // 发送高字节I2C_Wait_Ack();I2C_SendByte(dat & 0xFF);    // 发送低字节I2C_Wait_Ack();I2C_Stop();
}// 从PCF8575读取16位数据
u16 PCF8575_Read() {u16 dat;I2C_Start();I2C_SendByte(PCF8575_ADDR | 0x01);  // 发送设备地址+读命令I2C_Wait_Ack();dat = I2C_RecvByte() << 8;          // 读取高字节I2C_Ack(0);                         // 发送应答dat |= I2C_RecvByte();              // 读取低字节I2C_Ack(1);                         // 发送非应答I2C_Stop();return dat;
}// 主函数
void main() {u16 output_data = 0x5555;  // 示例输出数据(0101 0101 0101 0101)u16 input_data;// 初始化I2C引脚SDA = 1;SCL = 1;while(1) {// 写入数据到PCF8575PCF8575_Write(output_data);delay_ms(1000);// 从PCF8575读取数据input_data = PCF8575_Read();delay_ms(1000);//        // 改变输出数据output_data = ~output_data;}
}

测试效果 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python3 学习(菜鸟)-02基本数据类型

1.多变量赋值 多变量被赋予相同的数值 多变量被赋予不同的数值 2.数值运算 除法 /&#xff1a;返回一个浮点数 除法 //&#xff1a;返回一个整数 3.列表 加号和星号 加号 是列表连接运算符 星号 * 是重复操作 list [ abcd, 786 , 2.23, runoob, 70.2 ] # 定义一个…

『uniapp』搜索功能+商品列表滚动效果(详细图文注释)

目录 预览效果准备工作代码分析与思路1. 页面结构主容器:`menber-container`搜索框:`u-search-inner`菜单:`u-menu-wrap`2. 数据模型`data()` 中的数据定义:3. 生命周期`onLoad(options)``onReady()``mounted()`4. 方法`search()``searchClear()``swichMenu(index)``getElRe…

微服务--消息队列mq

1. mq简介 消息队列是分布式系统中的异步通信中间件&#xff0c;采用"生产者-消费者"模型实现服务间解耦通信 核心作用 服务解耦异步处理流量削峰数据同步最终一致性 消息队列模式 发布/订阅模式&#xff1a;一对多广播工作队列模式&#xff1a;竞争消费死信队列…

第26节 Node.js 事件

Node里很多对象会分发事件&#xff1a; 每次有连接的时候net.Server会分发事件&#xff0c;当文件打开的时候fs.readStream会分发事件。所有能分发事件的对象都是 events.EventEmitter的实例。通过require("events");能访问这个模块。 一般来说&#xff0c;事件名都…

LangChain + MCP + vLLM + Qwen3-32B 构建本地私有化智能体应用

一、私有化智能体应用 在本专栏的前面文章基于Spring AI MCP实现了本地 ChatBI 问答应用&#xff0c;本文还是依据该场景&#xff0c;采用 LangChain vLLM Qwen3-32B MCP 技术栈构建该流程&#xff0c;整体过程如下图所示&#xff1a; 实现效果如下所示&#xff1a; 关于 M…

AKS升级路线最佳实践方案

前言 Kubernetes 社区大约每 4 个月发布次要版本&#xff0c;次要版本包括新增功能和改进。补丁发布更为频繁&#xff08;有时每周都会发布&#xff09;&#xff0c;适用于次要版本中的关键 Bug 修复。修补程序版本包括针对安全漏洞或主要 bug 的修复。对于受支持版本列表以…

树莓派智能小车基本移动实验指导书

1.安装LOBOROBOT库函数 LOBOROBOT.py代码如下&#xff1a; #!/usr/bin/python # -*- coding: utf-8 -*-import time import math import smbus import RPi.GPIO as GPIODir [forward,backward, ]class PCA9685:# Registers/etc.__SUBADR1 0x02__SUBADR2 …

如何对目标检测算法RT-DETR进行创新和改进:突破瓶颈,提升性能!

更多精彩&#xff0c;详见文末~~~ 在目标检测的高速发展中&#xff0c;RT-DETR作为DETR&#xff08;DEtection TRansformer&#xff09;的高效变体&#xff0c;凭借其优异的性能和较快的推理速度&#xff0c;已经成为许多实际应用中的首选算法。然而&#xff0c;尽管RT-DETR在…

Java-String

前言 package com.kjxy.st;public class TestString1 {public static void main(String[] args) {String s1 "hello";String s2 "hello";String s3 new String("hello");String s4 new String("hello");System.out.println(s1 s2…

计算机组成原理——C/存储系统

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》|《史上最强C讲解》|《史上最强计组》|《史上最强数据结构》 &#x1f3c6;我的格言&#xff1a;一切只是时…

什么是电输运性能

电输运性能‌是指材料在电场作用下&#xff0c;电子在材料中传输的能力和效率。具体来说&#xff0c;电输运性能包括以下几个方面&#xff1a; ‌电子的自由移动性‌&#xff1a;导体中的电子具有较大的自由移动能力&#xff0c;这是由于导体中的原子或分子结构具有一定的松散…

k3s入门教程(二)部署前后端分离程序

文章目录 部署基础服务部署Redis部署MySQL端口转发测试 运行与构建前后端镜像构建后端镜像 docker build -t ruoyi-admin:v3.8 .构建前端镜像 docker build -t ruoyi-ui:v3.8 .创建私库&#xff0c;推拉镜像 前后端应用部署后端应用部署前端应用部署 启动顺序与初始化容器修改前…

Seata如何与Spring Cloud整合?

&#x1f527; 一、整合核心步骤 1. 启动 Seata Server&#xff08;TC&#xff09; 环境准备&#xff1a; 修改 registry.conf&#xff0c;指定注册中心&#xff08;如 Nacos&#xff09;和配置中心&#xff1a;registry {type "nacos"nacos {serverAddr "l…

Python惰性函数与技术总结-由Deepseek产生

在Python中&#xff0c;惰性&#xff08;Lazy&#xff09;技术指延迟计算直到真正需要结果时才执行&#xff0c;常用于优化内存和性能。以下是常见的惰性函数和技术&#xff1a; 1. 生成器&#xff08;Generators&#xff09; 原理&#xff1a;使用 yield 返回迭代结果&#x…

轮廓 裂缝修复 轮廓修复 填补孔洞 源代码

目录 1. 形态学闭合操作填补小孔洞 完整代码: 使用 Douglas-Peucker 算法对轮廓进行多边形逼近 2.裂缝修复 轮廓修复 轮廓补全 函数封装 调用示例: 1. 形态学闭合操作填补小孔洞 完整代码: import cv2 import numpy as np# 创建模拟图像(白色区域 + 多个不规则黑洞)…

HTTP1.1

HTTP基础知识 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是用于传输超文本 的应用层协议&#xff0c;采用客户端-服务器 模型。 客户端&#xff08;如浏览器&#xff09;发起请求&#xff0c;服务器响应并返回数据。 工作原理 客户端发送HTTP请求至服…

【Linux教程】Linux 生存指南:掌握常用命令,避开致命误操作

Linux 常用操作命令&#xff1a;避免误操作指南 在 Linux 系统中&#xff0c;熟练掌握常用操作命令是高效工作的基础&#xff0c;但同时也要警惕误操作带来的风险。无论是部署程序、配置防火墙、管理端口还是处理进程&#xff0c;一个小小的失误都可能导致系统故障、数据丢失等…

PHP:Web 开发领域的常青树

在当今数字化浪潮中&#xff0c;Web 开发技术日新月异&#xff0c;各种新兴语言和框架层出不穷。然而&#xff0c;PHP 作为一门经典的后端开发语言&#xff0c;依然在 Web 开发领域占据着重要地位&#xff0c;展现出强大的生命力和广泛的应用价值。 PHP 的历史与现状 PHP&…

平均数与倍数

目录 一. 平均数现期平均数基期平均数&#xff08;比较冷门&#xff09;两期平均数-比较平均数的增长量平均数的增长率 二. 倍数基期倍数 \quad 一. 平均数 \quad 现期平均数 \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad 平均数速算技巧&#xff1a;削峰填谷…

一个完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (三)

现在我们主要完成AI-RAG服务的扩展&#xff0c;利用ES的向量检索能力完成历史聊天记录的存储和向量检索&#xff0c;让ai聊天有记忆。 主要做法是在首次聊天完成后将对话内容写出日志到D:\dev\dev2025\EC0601\logs\chat-his.log 写出日志同时嵌入向量 向量可以从ollama的端点&…