8位七段顯示器
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);
}