/* Program 8-2: Display "2018" on the seven-segment display with Edubase-V2 board * * The four-digit seven-segment display is connected to two shift registers that * are connected to the microcontroller by SPI serially. The output of one shift * register is connected to the segment controls of all four digits in parrallel. * The other shift register is connected to the common cathodes of each digit * individually. To display one digit, the segment pattern is written to the * SPI first then the digit select is written next. Four digits are written * sequentially. If each digit is turned on more then 50 times a second, the * digit will appear to be on consistently. */ #include "SPI.h" /* use built-in SPI library */ const int slaveSelect = 17; /* slave select (SS) pin for chip select pin 17 */ void setup() { pinMode (slaveSelect, OUTPUT); /* set the slaveSelect pin as output */ SPI.begin(); /* initialize SPI */ SPI.setDataMode(SPI_MODE0); /* 74HCT595 operates at Mode 0 */ } void loop() { digitalWrite(slaveSelect, LOW); /* assert SS low to the shift register of seven-segment LED */ SPI.transfer(~0x5B); /* write pattern 2 to the seven segments */ SPI.transfer((1 << 3)); /* select digit 3 */ digitalWrite(slaveSelect, HIGH); /* deassert SS */ delay(4); digitalWrite(slaveSelect, LOW); /* assert SS */ SPI.transfer(~0x3F); /* write pattern 0 to the seven segments */ SPI.transfer((1 << 2)); /* select digit 2 */ digitalWrite(slaveSelect, HIGH); /* deassert SS */ delay(4); digitalWrite(slaveSelect, LOW); /* assert SS */ SPI.transfer(~0x06); /* write pattern 1 to the seven segments */ SPI.transfer((1 << 1)); /* select digit 1 */ digitalWrite(slaveSelect, HIGH); /* deassert SS */ delay(4); digitalWrite(slaveSelect, LOW); /* assert SS */ SPI.transfer(~0x7F); /* write pattern 8 to the seven segments */ SPI.transfer((1 << 0)); /* select digit 0 */ digitalWrite(slaveSelect, HIGH); /* deassert SS */ delay(4); }