当前位置: 首页 > news >正文

利用芯片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.lryc.cn/news/167378.html

相关文章:

  • docker真实IP解决
  • Linux 内存泄漏检测的基本原理
  • Ubuntu下Nginx配置ModSecurity详细思路及过程
  • 入职美团近三个月,闲聊几句
  • setInterval倒计时切换页面后不准
  • 信息安全三级概述
  • 深入JVM:探索Java虚拟机
  • 【计算机网络】 RTT和RTO
  • Zabbix监控组件及流程
  • Type-C协议Ver2.0(学习笔记)
  • 智慧工地:实现作业区域安全管控
  • 【Unity插件】实现多人在线游戏——Mirror插件的使用介绍
  • GeoSOS-FLUS未来土地利用变化情景模拟模型
  • IntelliJ IDEA使用_Debug操作
  • 市场的新宠:4G智能手表
  • Pytorch Advanced(一) Generative Adversarial Networks
  • Python实操如何去除EXCEL表格中的公式并保留原有的数值
  • MFC串口通信控件MSCOMM32.OCX的安装注册
  • 27.顺序表练习题目(1)(2023王道数据结构2.2.3前8题)
  • Unity VideoPlayer 指定位置开始播放
  • 美团多场景建模的探索与实践
  • 第11篇:ESP32vscode_platformio_idf框架helloworld点亮LED
  • React中的页面跳转方式详解
  • Golang代码漏洞扫描工具介绍——govulncheck
  • 第31章_瑞萨MCU零基础入门系列教程之WIFI蓝牙模块驱动实验
  • arkworks工具栈概览
  • 华为云云服务器云耀L实例评测 | 在华为云耀L实例上搭建电商店铺管理系统:一次场景体验
  • sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务。
  • 二刷力扣--字符串
  • 如何将 OBJ 模型转换和压缩为 GLTF 以与 AWS IoT TwinMaker 配合使用