首页 > 其他分享 >74HC165移位寄存器的作用

74HC165移位寄存器的作用

时间:2024-07-29 21:25:03浏览次数:11  
标签:读取 引脚 移位 寄存器 串行 74HC165 数据 输入

        74HC165 是一种8位串行输入并行输出移位寄存器,常用于扩展微控制器的输入引脚数量。它能够将多个输入信号通过少数几个控制引脚读取,从而节省微控制器的输入引脚资源。以下是其主要功能和应用:

主要功能 

  1. 输入扩展:可以读取多个数字输入信号。
  2. 串行数据传输:将多个并行输入转换为串行数据,便于微控制器读取。
  3. 级联使用:多个74HC165可以级联,进一步扩展输入数量。

引脚说明

74HC165的主要引脚及其功能如下:

  • Q7 (Pin 9):串行数据输出,用于将读取到的数据传输给微控制器。
  • CLK (Pin 2):时钟输入,用于同步数据传输。
  • SH/LD (Pin 1):移位/加载控制引脚,当为低电平时,将并行数据加载到寄存器,当为高电平时,允许数据移位。
  • Q7' (Pin 7):串行输出,用于级联多个74HC165。
  • D0 - D7 (Pins 11-18):并行数据输入引脚,用于接收外部数字信号。
  • CE (Pin 15):使能输入,当为低电平时,允许数据移位。
  • GND (Pin 8):接地。
  • VCC (Pin 16):电源。

 

 

工作原理

  1. 加载并行数据:当 SH/LD 为低电平时,外部并行输入信号通过 D0-D7 输入到寄存器。
  2. 移位操作:当 SH/LD 为高电平时,时钟信号的每一次上升沿都会使寄存器内的数据右移一位,并通过 Q7 引脚输出。

应用场景

  • 键盘扫描:读取多按键状态,只需少量控制引脚。
  • 传感器读取:多个传感器输入信号集中读取。
  • 状态监控:扩展微控制器输入,用于监控多个开关或状态信号。

示例

假设我们要将74HC165与Arduino Mega 2560连接,读取8个开关状态:

// 引脚定义
const int latchPin = 35; // SH/LD
const int clockPin = 34; // CLK
const int dataPin = 43;  // Q7

void setup() {
  // 初始化串行通信
  Serial.begin(9600);
  // 初始化引脚模式
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, INPUT);
}

void loop() {
  // 将SH/LD置低以加载并行数据
  digitalWrite(latchPin, LOW);
  delayMicroseconds(5);
  digitalWrite(latchPin, HIGH);

  // 读取串行数据
  byte data = shiftIn(dataPin, clockPin, MSBFIRST);

  // 输出读取到的数据
  Serial.println(data, BIN);

  delay(1000);
}

// shiftIn函数,用于读取串行数据
byte shiftIn(int myDataPin, int myClockPin, int myBitOrder) {
  byte value = 0;
  int i;

  for (i = 0; i < 8; ++i) {
    digitalWrite(myClockPin, HIGH);
    if (myBitOrder == LSBFIRST)
      value |= digitalRead(myDataPin) << i;
    else
      value |= digitalRead(myDataPin) << (7 - i);
    digitalWrite(myClockPin, LOW);
  }
  return value;
}
  • latchPin 控制加载并行数据。
  • clockPin 当引脚置高时,通过上升沿控制数据移位。
  • dataPin 读取串行数据。
  • LSBFIRST:最低有效位优先

    • 对于每个时钟周期,从数据引脚读取的每一位数据按顺序放入字节的低位开始位置。
    • 比如,第一个读取的位放在 value 的第0位,第二个读取的位放在 value 的第1位,以此类推。
  • MSBFIRST:最高有效位优先

    • 对于每个时钟周期,从数据引脚读取的每一位数据按顺序放入字节的高位开始位置。
    • 比如,第一个读取的位放在 value 的第7位,第二个读取的位放在 value 的第6位,以此类推。

通过这种方式,Arduino可以使用少量引脚读取多个开关的状态,充分利用了74HC165的输入扩展能力。

标签:读取,引脚,移位,寄存器,串行,74HC165,数据,输入
From: https://blog.csdn.net/qq_52301885/article/details/140780985

相关文章

  • 第二章 寄存器
    第二章寄存器一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。在CPU中:运算器进行信息处理。寄存器进行信息存储。控制器控制各种器件进行工作。内部总线连接各种器件,在它们之间进行数据的传送。2.1通用寄存器AX、BX、CX、DX这4个寄存器通......
  • HDLBits答案(1)_移位寄存器+更多电路
    前言    由于开发板教学内容部分,代码涉及到状态机内容,HDLBits题库只刷到了计数器,因此后续3至4天决定继续刷题,刷完状态机和全部HDLBits题库。今天刷完移位寄存器+更多电路,以下是书写的代码。题库Question1:构建一个4位移位寄存器(右移),具有异步复位、同步加载和使能......
  • 使用GG获取函数寄存器地址
    此方法是从神秘老师(一只神秘)的视频得到的灵感,分享出来也是经过其本人的同意视频如下也希望大家多多支持神秘老师捏多的不说,少的不唠,也是进入正题我们先找到需要获取的函数然后进行分配内存页,保存该地址然后在函数头进行如下的操作码修改意思就是:把该地址传给r1再......
  • 7.用寄存器点亮LED
    7.用寄存器点亮LED7.1GPIO简介GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚。通过将STM32芯片的GPIO引脚与外部设备连接,可以实现外部通信、控制以及数据采集的功能。STM32芯片的GPIO被分成很多组,每组有16个引脚。例如,STM32F103VET6的芯片有GPIOA至GPIOE......
  • STM32寄存器操作、模板构建
    2024年7月18日发布于博客园,本文涉及到STM32F4XX和STM32F1XX系列目录外设寄存器查找①名称②偏移地址③寄存器位表④位功能说明寄存器基本操作C语言的置位和清零具体方法设置GPIO流程给寄存器赋值带参数宏STM32F1xx芯片识别存储器映射寄存器映射让GPIOB端口的16个引脚输......
  • 一起学RISC-V汇编第3讲之寄存器
    寄存器是处理器中最常用的处理单元,RISC-V指令的操作数除了立即数就是寄存器。RISC-V指令集包含了多种不同类型的寄存器,用于不同目的和功能:对于rv32imafd架构而言,包含如下寄存器:通用寄存器:32个通用整数寄存器,分别标记为x0-x31,如果是fd扩展,还有32个独立的浮点寄存器,分别标记为f......
  • AvalonMM接口Interval Timer IP的寄存器介绍和Interval Timer寄存器读写操作详解
    一、间隔定时器结构间隔定时器的结构框图: 该间隔定时器有如下两个特点:-Avalon-MM接口,提供对6个16位寄存器的访问;-有一个脉冲输出接口(可选),可用作周期性脉冲发生器;该间隔定时器的所有寄存器都是16位的,可兼容16-bit和32-bit处理器。某些寄存器只存在于特定的配置中,例如,当该......
  • 【C语言】移位操作详解 - 《凌波微步 ! 》
    这里写目录标题C语言移位操作(BitwiseShiftOperators)详解1.移位操作符概述1.1左移操作符(`<<`)1.2右移操作符(`>>`)2.使用示例2.1左移操作符示例2.2右移操作符示例2.3有符号和无符号右移3.注意事项3.1超出位数范围的移位3.2移位操作的性能4.移位操......
  • HAL库源码移植与使用之高级定时器REP寄存器
    高级定时器的溢出中断信号与更新要想输出,要经过一个重复计数寄存器,该寄存器由REP控制并由TIMX_RCR控制计数值它的原理是计数器每次上溢或下溢而输出中断信号和更新都能使重复计数器值减1,减到0时,再发生一次溢出就会产生更新事件所以如果设置RCR为N,更新事件将在N+1次溢出时发......
  • BKP备份寄存器和实时时钟笔记
    BKP(BackupRegisters)备份寄存器BKP可用于存储用户应用程序数据。当VDD(2.0~3.6V)电源被切断,他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位TAMPER引脚产生的侵入事件将所有备份寄存器内容清除RTC引脚输出RTC校准时钟、RTC闹......