【问题标题】:74HC595 Shift register with Arduino74HC595 带 Arduino 的移位寄存器
【发布时间】:2023-01-11 17:37:12
【问题描述】:

我在 Arduino 中使用移位寄存器来增加我的输出引脚。在这里我想单独编辑每个串行位并存储它。简而言之,我想在使用 Arduino I/O 引脚时控制寄存器的每个引脚。我尝试使用以下程序来完成它,但它不起作用。

#include<ShiftOutX.h>
 #include<ShiftPinNo.h>
// Define Connections to 74HC595
 
// ST_CP pin 12
const int latchPin = 10;
// SH_CP pin 11
const int clockPin = 11;
// DS pin 14
const int dataPin = 12;


String S1 = "1";
String   S2 = "0";
String   S3 = "0";
String  S4 = "0";
String   S5 = "0";
String   S6 = "0";
String   S7 = "0";
String   S8 = "0";
String   S9 = "0";
String   S10 = "1";
String  S11 = "0";
String   S12 = "0";
String   S13 = "0";
String  S14 = "0";
String   S15 = "0";
String   S16 = "0";
String  S17 = "0";
String   S18 = "0";
String  S19 = "0";
String   S20 = "1";
String  S21 = "0";
String  S22 = "0";
String   S23 = "0";
String  S24 = "0";
String  S25 = "0";
String  SB = "b";
String  S = "0";


shiftOutX reg(latchPin, dataPin, clockPin, LSBFIRST, 3);


void setup ()
{
  // Setup pins as Outputs
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{

    digitalWrite(latchPin, HIGH);

    String  one =S+SB+ S1+ S2+ S3+ S4+ S5+ S6+ S7+ S8+ S9+ S10+ S11+ S12+ S13+ S14+ S15+ S16+ S17+ S18+ S19+ S20+ S21+ S22+ S23+ S24+ S25;
    Serial.println(one);
    char buf[27];
    one.toCharArray(buf,one.length());
    Serial.println(buf);
    shiftOut_24(dataPin, clockPin, LSBFIRST, buf);
    digitalWrite(latchPin, LOW);
    digitalWrite(latchPin, HIGH);
    delay(1000);

}

“0b1000000001000000000100000 0b100000000100000000010000" 我把上面的内容放在串行屏幕上,但是寄存器的输出是不同的。请给我一些解决方案。

【问题讨论】:

标签: arduino byte bit shift-register


【解决方案1】:

我知道你想链接 3 个移位寄存器

byte data[3] = {0b01000000, 0b00100000, 0b00100000 };

void shiftOut24(byte* data) {
   digitalWrite(latchPin, 0);
   shiftOut(dataPin, clockPin,MSBFIRST,data[2]);
   shiftOut(dataPin, clockPin,MSBFIRST,data[1]);
   shiftOut(dataPin, clockPin,MSBFIRST,data[0]);
   digitalWrite(latchPin, 1);
}
void debugPrint24(byte* data) {
// TODO print more nicely
// leading zeros by adding bit 24 currently
long out = 1L<<24;
out |= (long)data[0] | (long)data[1] << 8 | (long)data[2] << 16;
Serial.println(out,BIN); 
}

byte pos = 0;  // 0 .. 23  for test data
void loop() {
   debugPrint24(data); 
   shiftOut24(data);
   // adding test data for fun
   byte b = pos / 8;
   if (b > 2) b = pos = data[0] = data[1] = data[2] = 0;  
   data[b] |= 1 << (pos++ & 7); // set another bit for next round  
   delay(1000);    
}

只是一些设置单个位的演示代码。

【讨论】:

    猜你喜欢
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多