利用芯片74hc165为单片机增加输入扩展端口proteus仿真arduino

我们前面的博文《输入端口少如何扩展?74hc148或74ls148级联在arduino中实现16转4的应用》介绍了148,148输入后可以立即输出到数码管,可以说它是自带编BCD编码器的。而今天这里我们主要介绍的74hc165是没有编码器,这里我们以proteus为仿真环境,arduino作为编译代码环境。
文章原出处:https://blog.csdn.net/haigear/article/details/132911752

一、芯片介绍

1、图片介绍

常规我们拿到的165的芯片是这样的,芯片手册中的管脚顺序及命名方式和proteus中的有所差别(左边的图为芯片手册中的图,右边的为proteus中的图)
在这里插入图片描述
很明显,我们看到proteus中9号管脚为SO,而芯片手册中的9号管脚为Qh,名称不但作用都是输出脚。

2、管脚功能描述

由于我们重点在proteus中仿真,所以我们这里只对proteus中的管脚进行功能的介绍:

管脚名:功能描述:
D0…D7并行输入脚
INH并联负载(低电平有效)
SH/LD即我们说的CP串行时钟
CLK时钟使能(低电平有效)
SO串行输出,即我们常说的DS
QH反相串行输出(通常不使用)
SI串行输入*

二、原理图

这里我们只是为了测试其功能,简单的使用了一个排阻和8个按钮接在了并行输入端口D0~D7上。
在这里插入图片描述
二、测试代码
几个管脚的定义这里我们说明一下,好让大家能够与上表列出的管脚对应,这里的datapin就是so管脚,clockpin就是CLK管脚,latchPin就是SH/LD管脚。
下面的代码只是一个简单的演示代码,所以就不过多的做解释了。

/* Main.ino file generated by New Project wizard** Created:   周四 9月 14 2023* Processor: ATmega328P* Compiler:  Arduino AVR (Proteus)*/const int dataPin = 2; // 数据引脚
const int clockPin = 3; // 时钟引脚
const int latchPin = 4; // 锁存引脚
const int numRegisters = 1; // 74HC165芯片个数byte registerData[numRegisters]; // 存储74HC165芯片数据的数组void setup() {pinMode(dataPin, INPUT);pinMode(clockPin, OUTPUT);pinMode(latchPin, OUTPUT);// 初始化串行通信Serial.begin(9600);
}void loop() {// 读取74HC165芯片数据readData();// 打印每个输入引脚状态for (int i = 0; i < numRegisters * 8; i++) {Serial.print("Input ");Serial.print(i);Serial.print(": ");Serial.println(bitRead(registerData[i / 8], i % 8));}delay(1000);
}void readData() {digitalWrite(latchPin, LOW);delayMicroseconds(10);digitalWrite(latchPin, HIGH);for (int i = numRegisters - 1; i >= 0; i--) {registerData[i] = shiftIn(dataPin, clockPin, MSBFIRST);}
}

对于初学者,我们看到shiftIn或者shiftOut这样的函数,都是arduino自带的为移位操作特别定制的函数,可以在arduino的IDE中reference里面查找。

三、测试效果
在这里插入图片描述
有了上面的基本电路后,我们就可以实现对arduino或者其他的stm32或者8051单片机的输入端口的扩展,比如我们加一个键盘矩阵或者多个按钮,那就再也不用担心输入端口不够啦。如果键盘数量大于8个,那我们可以通过SO和下一个165芯片的SI进行级联实现8xn的端口扩展,比如做一个电子琴,那就要多级联几个才足够我们实现多个音阶。

文章随时可能更新,请注明原出处:https://blog.csdn.net/haigear/article/details/132911752

级联有一片博文可以供大家参考,我这里就不赘述:https://www.cnblogs.com/F-91/p/14713514.html

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

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

相关文章

OPTEE异常调用栈解析

安全之安全(security)博客目录导读 目录 一、OPTEE标准的异常调用栈格式 二、OPTEE异常调用栈解析脚本 三、如何执行解析命令 四、OPTEE异常调用栈解析结果 序言&#xff1a;当OPTEE发生异常时&#xff0c;安全控制台会输出dump信息&#xff0c;虽然有了Call stack&#x…

【Unity每日一记】资源加载相关和检测相关

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

初识Mybatis(二)动态SQL、缓存和逆向工程

动态SQL Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能&#xff0c;它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。 &#xff08;比如多条件查询的设置&#xff0c;实现判空等&#xff09; 1、if 创建DynamicSQLMapper接口&#xff0c;DynamicSQL…

机器学习——boosting之XGBoost(未完)

划水一整天&#xff0c;模型看了仨&#xff01;不错&#xff0c;虽然现在在打哈欠&#xff0c;还是很想把XGBoost梳理梳理 先从名字开始 XGBoost&#xff0c;eXtreme Gradient Boosting: em。。。。不理解 书上说&#xff0c;XGBoost有很好的性能&#xff0c;在各大比赛中大放异…

python-xpath语法-爬取彼岸图4k高清动漫壁纸

安装 pip install lxml导入 from lxml import etreexpath使用路径表达式提取html文档中的元素或元素集&#xff0c;然后元素通过沿路径path或步steps来选取数据 XPath常用语法格式 表达式描述div选取div元素的所有子元素/div选取根元素divul//li选取ul元素下的所有li子元素…

【算法专题突破】滑动窗口 - 水果成篮(13)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;904. 水果成篮 - 力扣&#xff08;Leetcode&#xff09; 题目有很长一段话&#xff0c;但是我们读一遍题目可以提炼转化出题目的要求 &#xff1a; 其实就是找出一个最长…

数据中心液冷服务器详情说明

目录 前言 何为液冷服务器&#xff1f; 为什么需要液冷&#xff1f; 1.数据中心降低PUE的需求 2.政策导向 3.芯片热功率已经达到风冷散热极限 4.液冷比热远大于空气 液冷VS风冷&#xff0c;区别在哪&#xff1f; 1.液冷服务器跟风冷服务器的区别 2.液冷数据中心跟风冷…

Java“牵手”速卖通商品列表页数据采集+速卖通商品价格数据排序,速卖通API接口申请指南

速卖通是阿里巴巴旗下的面向国际市场打造的跨境电商平台&#xff0c;被称为国际版淘宝&#xff0c;速卖通面向海外买家客户&#xff0c;通过支付宝国际账户进行担保交易&#xff0c;并使用国际物流渠道运输发货&#xff0c;是全球第三大英文在线购物网站。 速卖通商品列表数据…

《论文阅读》通过动态融入常识知识来提高同理心对话的生成

《论文阅读》通过动态融入常识知识来提高同理心对话的生成 前言简介模型架构Contextual ProbingContextual Unification Workspace代码实现Knowledge-Aware Decoder实验结果前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后感到…

基于SSM的客户管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【SpringMVC】之自定义注解

文章目录 一、Java注解1.1 简介1.2 分类1.2.1 JDK基本注解1.2.2 JDK元注解1.3 自定义注解 二、使用自定义注解2.1 **案例一&#xff08;获取类与方法上的注解值&#xff09;**2.2 **案例二&#xff08;获取类属性上的注解属性值&#xff09;**2.3 **案例三&#xff08;获取参数…

创建UI账号密码登录界面

头文件 #ifndef MYWND_H #define MYWND_H#include <QPushButton> #include <QMainWindow>class MyWnd : public QMainWindow {Q_OBJECTpublic:MyWnd(QWidget *parent nullptr);~MyWnd(); }; #endif // MYWND_H 源文件 #include "mywnd.h" #include &…