七段顯示板連接:
先進行範例程式測試
你覺得可以做甚麼樣的變化?
#define LED_1 13 // LED pins
#define LED_2 12
#define LED_3 11
#define LED_4 10
#define BUZ 3 // The speaker enable
#define POT A0 // The analog input for the potentiometer
#define S_1 A1 // The input pushbuttons
#define S_2 A2
#define S_3 A3
#define D_LATCH 4 // The 3 pins that control the display
#define D_CLK 7
#define D_DATA 8
const byte numMap[] = {0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09, 0x11, 0xC1, 0x63, 0x85, 0x61, 0x71, 0xFF};
const byte digitMap[] = {0x00, 0x80, 0x40, 0x20, 0x10};
int dig1, dig2, dig3, dig4;
int count;
long timer = millis();
void dispNum(int digitNum, int Value) {
digitalWrite(D_LATCH, LOW);
shiftOut(D_DATA, D_CLK, LSBFIRST, numMap[Value]);
shiftOut(D_DATA, D_CLK, LSBFIRST, digitMap[digitNum] );
digitalWrite(D_LATCH, HIGH);
}
void setup() {
//Leds
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, HIGH);
pinMode(LED_2, OUTPUT);
digitalWrite(LED_2, HIGH);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, HIGH);
pinMode(LED_4, OUTPUT);
digitalWrite(LED_4, HIGH);
//Drukknoppen
pinMode(S_1, INPUT);
pinMode(S_2, INPUT);
pinMode(S_3, INPUT);
//Buzzer
pinMode(BUZ, OUTPUT);
digitalWrite(BUZ, HIGH);
//Display
pinMode(D_LATCH , OUTPUT);
pinMode(D_CLK , OUTPUT);
pinMode(D_DATA , OUTPUT);
dispNum(1, 16);
dispNum(2, 16);
dispNum(3, 16);
dispNum(4, 16);
dispNum(0, 16);
}
void loop() {
dig1 = count / 1000;
dispNum(1, dig1);
dig2 = (count - (dig1 * 1000)) / 100;
dispNum(2, dig2);
dig3 = (count - dig1 * 1000 - dig2 * 100) / 10;
dispNum(3, dig3);
dig4 = (count - dig1 * 1000 - dig2 * 100 - dig3 * 10);
dispNum(4, dig4);
dispNum(0, 16);
delay(25);
if (timer < millis()) {
count++;
timer = timer + 100;
}
}
/*Define shift register pins used for seven segment display */
#define LATCH_DIO 4
#define CLK_DIO 7
#define DATA_DIO 8
/* Segment byte maps for numbers 0 to 9 */
const byte SEGMENT_MAP[] ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90} ;
/* Byte maps to select digit 1 to 4 */
const byte SEGMENT_SELECT[] ={0xF1,0XF2,0XF4,0XF8};
void setup ()
{
/* Set DIO pins to outputs */
pinMode (LATCH_DIO,OUTPUT);
pinMode (CLK_DIO,OUTPUT) ;
pinMode (DATA_DIO,OUTPUT) ;
}
/* Main program */
void loop()
{
/* Update the display with the current counter value */
WriteNumberToSegment(0,0);
WriteNumberToSegment(1,1);
WriteNumberToSegment(2,2);
WriteNumberToSegment(3,3);
}
/* Write a decimal number between O and 9 to one of the 4 digits of the display */
void WriteNumberToSegment(byte Segment, byte Value)
{
digitalWrite(LATCH_DIO,LOW);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );
digitalWrite(LATCH_DIO,HIGH);
}