乐鑫技术交流
直播中

李梅

7年用户 1260经验值
私信 关注
[问答]

如何使用74HC165在esp8266上获得更多的输入引脚?

嘿!我正在尝试使用 74HC165 在我的 esp8266 上获得更多的输入引脚。
我已经根据数据表连接了所有东西,但在提取值时我仍然得到全零。
我使用 10k 电阻将 74HC165 上的所有 8 个“D”引脚连接到 GND。然后将其中一个引脚连接到一个按钮,将其拉至 VCC。按下按钮无效
这是我的代码:
代码:全选#include
#include

byte shift_1;

void setup() {
    Serial.begin(9600);
    SPI.setClockDivider(SPI_CLOCK_DIV2);
    SPI.setDataMode(SPI_MODE0);
    SPI.setBitOrder(MSBFIRST);
    SPI.begin();

    pinMode(4, OUTPUT);
    digitalWrite(4, HIGH);
}

void loop() {
    digitalWrite(4, LOW);
    shift_1 = SPI.transfer(0);
    digitalWrite(4, HIGH);

    Serial.print(micros());
    Serial.print(" Register 1 = ");
    Serial.println(shift_1, BIN);

    delay(1000);
}



回帖(1)

杨火亭

2023-10-17 10:29:03
您需要将74HC165的输入引脚连接到按钮和VCC之间的电阻而不是GND。这是因为74HC165是一个带有预置输入的平行输入移位寄存器,其工作原理是将电平从输入引脚读入,并在时钟信号的辅助下将它们串行输入到移位寄存器中。因此,如果您将所有输入引脚连接到GND,它们将始终处于低电平状态,即使在按下按钮时也不会更改状态。

您可以使用以下代码进行测试和读取输入状态:

#include

byte shift_1;

void setup() {
  Serial.begin(9600);
  SPI.begin();
  pinMode(SS, OUTPUT);
  digitalWrite(SS, HIGH);
}

void loop() {
  digitalWrite(SS, LOW);
  delayMicroseconds(1);
  shift_1 = SPI.transfer(0);
  digitalWrite(SS, HIGH);

  Serial.println(shift_1, BIN);

  delay(1000);
}

这里,您需要设置片选引脚(通常是D8)为输出模式,并将其设置为高电平(这意味着它不与SPI通信)。然后,您可以通过将其设置为低电平来与74HC165通信并读取其状态。从74HC165返回的字节包含所有8个输入引脚的状态,其中1表示按钮已按下,0表示未按下。请注意,如果您想读取多个74HC165以扩展输入,您需要为每个芯片分别设置片选引脚和相应的SPI接口。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分