8位七段顯示器

http://goods.ruten.com.tw/item/show?21520386660896

74HC595 之控制原理

影片一

影片二

const int RCLK = 7; //RCLK

const int SCLK = 6; //SCLK

const int DIO = 5; //DIO

byte value[] ={ B11000000, // 0

B11111001, // 1

B10100100, // 2

B10110000, // 3

B10011001, // 4

B10010010, // 5

B10000010, // 6

B11111000, // 7

B10000000, // 8

B10010000, // 9

B01000000, // 0.

B01111001, // 1.

B00100100, // 2.

B00110000, // 3.

B00011001, // 4.

B00010010, // 5.

B00000010, // 6.

B01111000, // 7.

B00000000, // 8.

B00010000, // 9.

B10111111, // -

B11111111};// display nothing

byte digit[] ={ B00000000,

B00000001, // left segment

B00000010,

B00000100,

B00001000,

B00010000,

B00100000,

B01000000,

B10000000}; // right segment

void setup() {

Serial.begin(9600);

pinMode(SCLK, OUTPUT);

pinMode(RCLK, OUTPUT);

pinMode(DIO, OUTPUT);

}

void loop() {;

sign(1);

disp(2,8);

}

void disp(int d , int num ){ //透過本動作函數 disp( 位數, 數字 ); 依序顯示

digitalWrite(RCLK,LOW);

shiftOut(DIO,SCLK,MSBFIRST,B11111111); // select all segments

shiftOut(DIO,SCLK,MSBFIRST,B11111111); // display nothing

digitalWrite(RCLK,HIGH);

digitalWrite(RCLK,LOW);

// select the fourth segment from left

shiftOut(DIO,SCLK,MSBFIRST,digit[d]);

// show the digit "5" ( the array starts with 0 to count!)

shiftOut(DIO,SCLK,MSBFIRST,value[num]);

digitalWrite(RCLK,HIGH);

}

void sign(int d ){ //透過本動作函數加上負號

digitalWrite(RCLK,LOW);

shiftOut(DIO,SCLK,MSBFIRST,B11111111); // select all segments

shiftOut(DIO,SCLK,MSBFIRST,B11111111); // display nothing

digitalWrite(RCLK,HIGH);

digitalWrite(RCLK,LOW);

// select the fourth segment from left

shiftOut(DIO,SCLK,MSBFIRST,digit[d]);

shiftOut(DIO,SCLK,MSBFIRST,value[20]);

digitalWrite(RCLK,HIGH);

}