完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,
我有一个 16 通道继电器控制器(12v 版本),内置 wifi 和 8266 处理器,周围看到过它们该板有 2 x 74HC595控制哪些继电器打开和关闭的单元我已经设法推断出下面代码中定义的引脚可以工作,我可以打开一些继电器。我不明白的是数据需要如何格式化才能发送到 74HC595 移位寄存器。例如,根据我首先触发的中继,我得到不同的结果,这可能对我说我发送了太多数据并溢出到下一个请求。 我没有这块板的原理图,但我假设它们的接线类似于本页上的双 74HC595 设置,但我不知道。 代码:全选// LCTech 16ch Relay board with 2x74HC595 shift registers - replicates close to out of box relay testing function int latchPin = 12; // Latch pin of 74HC595 is connected to Digital pin 5 int clockPin = 13; // Clock pin of 74HC595 is connected to Digital pin 6 int dataPin = 14; // Data pin of 74HC595 is connected to Digital pin 4 int oePin = 5; // oePin - not using this void setup() { // Set all the pins of 74HC595 as OUTPUT pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(oePin, OUTPUT); // Setup serial comms Serial.begin(115200); } void loop() { Serial.println("Relay #16 = 0b0000"); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, 0b0000); digitalWrite(latchPin, HIGH); delay(3000); Serial.println("Relay #8 = 0b0001"); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, 0b0001); digitalWrite(latchPin, HIGH); delay(3000); } |
|
相关推荐
1个回答
|
|
在使用74HC595移位寄存器时,数据格式需要满足以下要求:
1. 数据需要先通过串行输入(SER)引脚逐位输入到移位寄存器中,最高位先入寄存器。 2. 在输入完16个数据位后,需要通过“锁存”引脚(RCLK)将数据存入内部寄存器,然后输出到相应的输出引脚(Q1~Q16)控制继电器的开关。 3. 当输入的数据位数不足16位时,需要在不足的高位填充零。 因此在编写控制代码时,需要按照上述要求将控制数据转换为二进制格式,然后逐位输出到SER引脚。 以下是一个示例代码,控制其中的num变量即可控制继电器的开关状态: 全选 #include #define SRCLR 12 #define RCLK 14 #define SRCLK 16 #define SER 4 void setup() { pinMode(SRCLR, OUTPUT); // 清除寄存器 pinMode(RCLK, OUTPUT); // 进行锁存 pinMode(SRCLK, OUTPUT); // 控制移位 pinMode(SER, OUTPUT); // 串行输入 digitalWrite(SRCLR, HIGH); // 状态清除 digitalWrite(RCLK, LOW); // 禁止锁存 digitalWrite(SRCLK, LOW); // 状态清除 digitalWrite(SER, LOW); // 状态清除 } void loop() { int num = 0b0010001000100010; // 控制1、5、9、13通道继电器开启 digitalWrite(RCLK, LOW); // 禁止锁存 for (int i = 0; i < 16; i++) { digitalWrite(SRCLK, LOW); // 状态清除 digitalWrite(SER, (num >> (15 - i)) & 1); // 逐位控制 digitalWrite(SRCLK, HIGH); // 转移位 } digitalWrite(RCLK, HIGH); // 完成转移,锁定状态 } 需要注意的是,由于可控通道数量较多,数据位数较多,因此需要分多次发送数据。同时,由于电路中可能存在串扰等干扰,因此还需设置一定的延时和控制方式,以保证正确的数据传输和输出。 |
|
|
|
只有小组成员才能发言,加入小组>>
540浏览 6评论
451浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
434浏览 5评论
435浏览 4评论
407浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 15:30 , Processed in 0.915780 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号