参考文章 参考文章 1-7,15号端口接8个LED或者8位数码管; 8号口接地; 9号口连接下一个595或者置空; 10号口接vcc; 11号口接D2; 11脚SRCLK移位寄存器时钟输入:当一个新的位数据要进来时,已经进入的位数据就在移位寄存器时钟脉冲的控制下,整体后移,让出位置。 12号口D3; 12脚RCLK存储寄存器:数据从位移寄存器转移到存储寄存器,也是需要时钟脉冲驱动的,这就是12脚的作用。它也是上升沿有效。 13号接口置空或者接GND; 14号接D4; 14脚串行输入:595的数据来源只有这一个口,一次只能输入一个位,那么连续输入8次,就可以积攒为一个字节了。 16号口接vcc
//淘宝店主配的代码,发觉后2个函数根本没用到,而是直接用shiftout函数 int data = 4; int clock = 3; int latch = 2; int ledState = 0; const int ON = HIGH; const int OFF = LOW; void setup() { pinMode(data, OUTPUT); pinMode(clock, OUTPUT); pinMode(latch, OUTPUT); } void loop() { int delayTime = 100; for(int i = 0; i < 256; i++) { updateLEDs(i); delay(delayTime); } } void updateLEDs(int value) { digitalWrite(latch, LOW); //移位寄存器 shiftOut(data, clock, MSBFIRST, value); digitalWrite(latch, HIGH); } /*void updateLEDsLong(int value) { digitalWrite(latch, LOW); for(int i = 0; i < 8; i++) { int bit = value & B10000000; value = value << 1; if(bit == 128){digitalWrite(data, HIGH);} else{digitalWrite(data, LOW);} digitalWrite(clock, HIGH); delay(1); digitalWrite(clock, LOW); } digitalWrite(latch, HIGH); } int bits[]={B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000}; int masks[] ={B11111110, B11111101, B11111011, B11110111, B11101111, B11011111, B10111111, B01111111}; void changeLED(int led, int state) { ledState = ledState & masks[led]; if(state == ON){ledState = ledState | bits[led];} updateLEDs(ledState); }*/Arduino中shiftOut怎么用?