#define MR 13
#define SHCP 12
#define STCP 11
#define OE 10
#define DS 9
void SHCP_CLK(){ // захоплення DS в регістр зсуву
digitalWrite( SHCP, HIGH );
digitalWrite( SHCP, LOW );
}
void STCP_CLK(){ // перенос регістра зсуву в регістр збереження
digitalWrite( STCP, HIGH );
digitalWrite( STCP, LOW );
}
void MR_CLK(){ // скидання даних в 0
digitalWrite(MR, LOW);
digitalWrite(MR, HIGH);
}
// 255 - 0b11111111
// 0 - 0b00000000
// 1 - 0b00000001
// 2 - 0b00000010
// 3 - 0b00000011
// 4 - 0b00000100
void set_led(byte data) {
//Serial.println( data, BIN );
for (byte i=0; i<8; i++) {
if ( (data & 0b10000000) >= 0b10000000 ) {
digitalWrite(DS, HIGH);
}
else {
digitalWrite(DS, LOW);
}
SHCP_CLK(); // захоплення DS в регістр зсуву
data = data << 1;
}
STCP_CLK(); // перенос регістра зсуву в регістр збереження
}
void setup() {
Serial.begin(115200);
pinMode( MR, OUTPUT );
pinMode( SHCP, OUTPUT );
pinMode( STCP, OUTPUT );
pinMode( OE, OUTPUT );
pinMode( DS, OUTPUT );
MR_CLK(); // обнулення
digitalWrite( OE, LOW ); // включити виходи Q0-Q7
digitalWrite(DS, 1);
SHCP_CLK(); // захоплення DS в регістр зсуву
SHCP_CLK(); // захоплення DS в регістр зсуву
digitalWrite(DS, 0);
SHCP_CLK(); // захоплення DS в регістр зсуву
for (int i=0; i<5; i++) {
SHCP_CLK(); // захоплення DS в регістр зсуву
}
SHCP_CLK(); // захоплення DS в регістр зсуву
SHCP_CLK(); // захоплення DS в регістр зсуву
STCP_CLK(); // перенос регістра зсуву в регістр збереження
set_led( 0b10101010 ); // 170
set_led( 170 ); // 170
delay(500);
set_led( 1 );
delay(500);
set_led( 2 );
}
void loop() {
// put your main code here, to run repeatedly:
}