使用74HC165扩展IO读取8个按键状态

嵌入式 专栏收录该内容
¥59.90 ¥99.00
111篇文章
AI摘要

本文介绍了如何在嵌入式系统中利用74HC165芯片扩展IO引脚,以读取8个按键状态。内容包括74HC165芯片的工作原理、电路连接方法以及C语言实现的示例代码,帮助开发者解决微控制器IO引脚不足的问题。

概述:
在嵌入式系统中,有时候需要读取多个按键的状态,但是通常微控制器的IO引脚数量是有限的。为了扩展IO引脚的数量,可以使用74HC165芯片。本文将介绍如何使用74HC165芯片来扩展IO引脚,并读取8个按键的状态。

74HC165芯片简介:
74HC165是一个8位串行输入并行输出的移位寄存器。它具有串行数据输入(SER)引脚、时钟输入(CLK)引脚、并行数据输出(Q0-Q7)引脚和一个使能引脚(OE)。

电路连接:
将74HC165芯片与微控制器连接时,需要将CLK引脚连接到微控制器的一个输出引脚,将SER引脚连接到另一个输出引脚,将OE引脚连接到微控制器的一个输出引脚,将Q0-Q7引脚连接到按键。此外,还需要在每个按键上加上一个上拉电阻,以确保按键没有按下时引脚保持高电平。

源代码:
下面是使用C语言编写的示例代码,演示如何通过74HC165芯片读取8个按键的状态。

#include <avr/io.h>
#include 
74HC165使用说明 74HC165为串并行输入,串行输出的移位寄存器 阅读详情

相关推荐

74HC165基础篇(一)

这里写到的74HC165是个并行输入串行输出的逻辑芯片,了解一款芯片都是从它的datasheet开始,下面以NXP公司74HC165为例进行介绍。 先看下该芯片datasheet的总体描述: 74HC165/74HCT165是一个8位串行或并行输入,串行输出的移位寄存器。具有一个串行输入(DS引脚),8个并行数据输入(D0到D7)和两个互补串行输出的功能。当PL引脚为低时,D...

k1ang的博客 6万+

串联多块74hc165

本文介绍arduino如何串联多块74hc165 1.知识预览 - 对程序中BitSet()函数进行介绍 - c语言中0UL或1UL是什么意思 - 使用多块扩展寄存器的位移算法

m0_46152804的博客 2829

SPI接口与74HC165实现高效IO扩展方案

在嵌入式系统开发中,IO资源管理是核心挑战之一。通过SPI(串行外设接口)协议与移位寄存器(如74HC165)的协同工作,开发者可以实现高效的引脚扩展。SPI作为同步串行通信标准,采用主从架构,通过时钟线(SCK)、数据线(MISO/MOSI)和片选线(CS)实现高速数据传输。结合74HC165的并行转串行特性,每个芯片可将8个输入信号压缩为1个串行输出,级联使用时扩展效率呈线性增长。这种方案特别适合工业控制面板、智能家居设备等需要密集输入但硬件资源受限的场景。通过合理的硬件连接和软件消抖处理,不仅能显著减

优快云头条 738

STM32与74HC165实现高效IO扩展方案

在嵌入式系统开发中,IO资源管理是核心挑战之一。通过移位寄存器技术,特别是74HC165这类并行输入/串行输出芯片,开发者可以大幅扩展微控制器的输入能力。其工作原理是将多个并行信号转换为串行数据流,通过SPI接口与主控通信。这种方案不仅能解决GPIO资源紧张问题,还能保持微秒级的响应速度,非常适合工业控制面板、HMI界面等实时性要求高的场景。结合STM32的硬件SPI外设,开发者可以轻松实现多片74HC165级联,构建高密度输入系统。该技术方案在医疗设备、工业自动化等领域已有成熟应用,是嵌入式硬件设计中的经

weixin_33885676的博客 349

MC74HC165A在STM32上的按键扩展方案与优化

移位寄存器是数字电路中的基础元件,通过串行转并行或并行转串行的工作方式扩展IO接口。MC74HC165A作为8位并行输入串行输出移位寄存器,采用SPI接口协议与微控制器通信,能有效解决嵌入式系统中GPIO资源紧张的问题。该方案在STM32等MCU上实现时,通过级联多片芯片可扩展出数十个输入通道,同时保持高速响应特性。典型应用包括工业控制面板的多按键检测、传感器阵列数据采集等场景。本文以STM32F030RC与MC74HC165A的硬件连接和SPI驱动为例,详细解析了包括菊花链连接、中断驱动、低功耗设计在内的

weixin_31476015的博客 207

MC74HC165A在嵌入式IO扩展中的高效应用

在嵌入式系统开发中,IO资源管理是核心挑战之一,特别是面对多按钮、传感器等输入设备时。并行输入串行输出(PISO)移位寄存器技术通过将多个输入信号转换为串行数据流,显著节省GPIO资源。MC74HC165A作为典型PISO芯片,具有2-6V宽电压、8位并行输入和级联扩展能力,配合PIC32MZ等高性能MCU的SPI接口和DMA功能,可实现高效稳定的数据采集。该方案不仅解决IO资源紧张问题,还简化布线并提升抗干扰能力,广泛应用于工业控制面板、自动化设备等场景。通过合理配置时钟频率、电源去耦和消抖算法,可构建可

weixin_34356555的博客 453

单片机IO扩展实战:用74HC595与74HC165构建8x8矩阵键盘的硬件设计与软件消抖

本文详细介绍了使用74HC595与74HC165芯片实现单片机IO扩展的实战方案,重点讲解了8x8矩阵键盘的硬件设计与软件消抖技术。通过级联移位寄存器,仅用少量IO口即可实现64键扫描,并提供了防鬼键设计、软件消抖算法等实用技巧,帮助开发者高效解决单片机IO资源不足的问题。

weixin_30411239的博客 582

【Proteus仿真】51单片机用74HC165扩展IO读取8个按键状态

【Proteus仿真】51单片机用74HC165扩展IO读取8个按键状态

perseverance51博客 1400

基于C51与74HC165的单片机键盘IO扩展设计与实现

74HC165是一款8位静态移位寄存器,支持并行加载和串行移位两种操作模式。它通过外部时钟信号控制数据流动方向,能够在不占用MCU过多I/O的情况下完成多达8路数字信号的采集。该芯片广泛应用于需要大量按键或传感器输入但主控资源有限的场景,例如工业面板、家电控制板等。其核心优势在于:无需专用通信协议(如I²C/SPI),仅需3~4个GPIO即可实现完整读取流程;同时具备良好的抗干扰能力和级联扩展能力。良好的代码结构始于清晰的接口抽象。通过宏定义屏蔽具体引脚细节,可在不同硬件平台上快速迁移代码。

weixin_35835030的博客 551

74HC165数字电路芯片的使用教程

74HC165是个并行输入串行输出的逻辑芯片,了解一款芯片都是从它的datasheet开始,下面以NXP公司74HC165为例进行介绍。   74HC165/74HCT165是一个8位串行或并行输入,串行输出的移位寄存器。具有一个串行输入(DS引脚),8个并行数据输入(D0到D7)和两个互补串行输出的功能。当PL引脚为低时,D0-D7端的数据进入移位寄存器。当PL引脚为高时,数据从DS引脚串行进入寄存器。当CE引脚为低时,使能时钟,数据在时钟CP上升时数据进行移位。当CE引脚为高时,失能时钟,时钟输入无效

BQ4050开发进阶(二):Protections参数优化策略与实战解析

本文深入解析了BQ4050电池管理芯片中Protections参数的优化策略与实战方法。针对电压、电流、温度等核心保护功能,详细阐述了如何根据具体电芯特性、负载场景和环境因素,精细调整CUV、COV、OCC/OCD等阈值与延时,以在确保电池绝对安全的前提下,实现极致的用户体验与系统可靠性。

rgv234567的博客 479

快速玩转 Llama2!机器学习 PAI 最佳实践(一)—低代码 Lora 微调及部署

本实践将采用阿里云机器学习平台PAI-快速开始模块针对 Llama-2-7b-chat 进行开发。PAI-快速开始支持基于开源模型的低代码训练、布署和推理全流程,适合想要快速开箱体验预训练模型的开发者。

阿里云云栖号 1763

八股已死、场景当立(Docker篇)

本文总结了Docker相关的面试八股文,重点介绍了Docker在Java开发中的应用。主要内容包括:Docker容器与虚拟机的区别及其对Java应用性能的影响;如何为Java应用构建优化镜像;Docker常用命令在Java容器管理中的使用;Docker网络模式与数据卷在Java微服务中的配置;使用Docker Compose部署Java+MySQL微服务的方法;以及为Java应用配置健康检查的重要性。文章还通过具体示例说明了Nginx容器挂载、日志收集等常见场景的实现方式,为Java开发者提供了实用的Doc

qq_55253420的博客 713

双目摄像头全景解析:从几何光学到深度智能

双目视觉系统基于仿生学原理,通过水平排列的双摄像头模拟人眼视差机制实现三维感知。其核心是通过标定、校正、匹配等算法流程,将视差转换为深度信息,最终生成三维点云。该系统在自动驾驶、机器人导航、工业检测等领域有广泛应用,但面临弱纹理、重复图案等挑战。未来发展趋势包括与事件相机、深度学习等技术的融合,进一步提升精度和动态性能。

reset2021的博客 120

【图像去噪】论文复现:CLIP用于图像去噪提升泛化性!CLIPDenoising的Pytorch源码复现,跑通CLIPDenoising全流程,图文结合,网络结构梳理和拆解,对应源码注释!

论文题目:Transfer CLIP for Generalizable Image Denoising —— 用于可泛化图像去噪的转移CLIP。【图像去噪】论文精读:Transfer CLIP for Generalizable Image Denoising(CLIPDenoising)CLIPDenoising理论部分详解见上面对应的论文精读,本文以源码为主,理论部分只是粗略回顾。启发:多看其他领域的文章,分析是否能应用在去噪领域,这是产生idea的要素之一;

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1411

MATLAB基础应用精讲-【强化学习】Actor - Critic 算法(附python代码实现)

这种架构结合了策略梯度方法(Policy - Gradient Methods)和价值函数估计方法(Value Function Estimation Methods)的优点。在强化学习中,智能体(Agent)需要通过与环境(Environment)的交互来学习最优的行为策略,以获得最大的累积奖励(Cumulative Reward)。

qq_36130719的博客 360

Android 13 内置xapk安装包的方法

安装xapk 内置xapk

安卓兼职framework和app工程师的博客 222

【第1章>第5节】SOM自组织映射网络的理论学习与MATLAB仿真

自组织映射网络(Self-Organizing Map,SOM)是一种无监督学习的人工神经网络,由芬兰学者Teuvo Kohonen于1981年提出,也被称为Kohonen网络。它的主要功能是将高维输入数据映射到低维(通常是二维)的离散网格上,同时保持输入数据的拓扑结构,即相邻的输入数据在映射后的网格上也相邻。

FPGA/MATLAB学习教程/源码/项目合作开发 398

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: Android嵌入式开发:实现源代码示例
下一篇: 使用STM32F103单片机实现万年历功能
普通网友
博客等级 码龄3年 97粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值