Arduino & 74HC165 连接74HC165 的输入需要拉低以防止错误读数,因此除了我们的八个按钮开关之外,我们还需要八个下拉电阻 。我使用了 10k 电阻,但从 4.7k 到 27k 的任何值都可以正常工作 。

我再次使用了一个 100uf 的去耦电容,确保在连接时注意极性 。
一旦你把它全部连接起来,我们就可以专注于我们将用来完成这项工作的代码 。
Arduino & 74HC165 代码我们的代码非常简单,因为它所做的只是读取按钮的状态并在串行监视器上显示结果 。但这就是了解如何从按钮和 74HC165 获取数据所需要做的全部工作 。
/* 74HC165 Shift Register Demonstration 1 74hc165-demo.ino Read from 8 switches and display values on serial monitor DroneBot Workshop 2020 https://dronebotworkshop.com*/ // Define Connections to 74HC165 // PL pin 1int load = 7;// CE pin 15int clockEnablePin = 4;// Q7 pin 7int dataIn = 5;// CP pin 2int clockIn = 6; void setup(){ // Setup Serial Monitor Serial.begin(9600); // Setup 74HC165 connections pinMode(load, OUTPUT); pinMode(clockEnablePin, OUTPUT); pinMode(clockIn, OUTPUT); pinMode(dataIn, INPUT);} void loop(){ // Write pulse to load pin digitalWrite(load, LOW); delayMicroseconds(5); digitalWrite(load, HIGH); delayMicroseconds(5); // Get data from 74HC165 digitalWrite(clockIn, HIGH); digitalWrite(clockEnablePin, LOW); byte incoming = shiftIn(dataIn, clockIn, LSBFIRST); digitalWrite(clockEnablePin, HIGH); // Print to serial monitor Serial.print(Pin States:rn); Serial.println(incoming, BIN); delay(200);}代码与我们之前的所有代码一样,定义了到 IC 的四个连接 。
在设置中,我们初始化串行监视器,然后根据需要设置连接 。
在循环中,我们首先向加载引脚写入一个脉冲,这将使其将并行输入中的数据加载到要处理的缓冲区中 。
接下来,我们设置 74HC165 准备发送数据,然后使用shiftIn函数获取该数据,首先是 LSB(最低有效位) 。我们通过将时钟引脚拉高来完成,这表示我们已经完成了 。
最后,我们将结果打印到串行监视器 。
加载代码,打开串行监视器并观察输出 。马上你就会注意到一些事情 。

数据在输出端全部保持高电平,与板上接线相反 。按下按钮将使其读数为低,即使这与实际发生的情况相反 。
这是因为我们使用的是 74HC165 的取反输出 。我们的数据是相反的 。
我将在稍后的代码中向您展示如何以正确的方式将其转回来 。继续阅读!
我们刚刚使用的示例有许多实际应用,其中一个明显的应用是作为小键盘(尽管有更好的方法来制作大键盘) 。对于需要大量开关的项目来说,这是一种有用的设计技巧 。
该电路的一个重要应用是将它与 DIP 开关或跳线一起使用,这些开关或跳线只是偶尔设置 。您可以使用 74NC165 来减少读取 8 位 DIP 开关所需的连接数量,只需在设置程序中读取它,以便仅在设备通电或复位时读取 。
推荐阅读
- 避孕套戴上就能用? 戴避孕套
- 身份证过期多久不能用微信支付
- word有哪些视图方式各有什么用途
- iphone手表有什么功能怎么用
- 为什么眼线液用什么都洗不掉
- 韩国g2面霜和G2精华使用方法
- 40岁以上用雅诗兰黛哪个眼霜
- 芦荟胶怎么用了要洗吗
- 7z文件用什么打开
- airpods用什么充电头
