#include <string.h>
#define DATA_PIN 8
#define LATCH_PIN 10
#define CLOCK_PIN 11
#define MAX_SSD 4
#define SHIFT_REG_COUNT 3
#define SOURCE_SSD 2
#define SOURCE_LED 1
#define ZERO 0x7E
#define ONE 0x18
#define TWO 0x6D
#define THREE 0x3D
#define FOUR 0x1B
#define FIVE 0xB7
#define SIX 0x77
#define SEVEN 0x1C
#define EIGHT 0x7F
#define NINE 0x3F
#define A 0x7D
#define B 0x73
#define C 0x61//0x66
#define D 0x79
#define E 0x6F
#define F 0x47
#define R 0x4D
// Segment byte maps for numbers 0-9
const byte digitMap[10] = {
ZERO, ONE, TWO, THREE,
FOUR, FIVE, SIX, SEVEN,
EIGHT, NINE
};
// Segment byte maps for letters A-F
const byte charMap[] = {A, B, C, D, E, F};
void setup()
{
// Set pin modes
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
// Keep all the pins as
digitalWrite(LATCH_PIN, LOW);
digitalWrite(CLOCK_PIN, LOW);
digitalWrite(DATA_PIN, LOW);
}
void shift_out_data(byte value)//, byte source)
{
for (int i = 0; i < 8; i++)
{
digitalWrite(DATA_PIN, (((1 << i) & value) ? 1 : 0));
digitalWrite(CLOCK_PIN, HIGH);
digitalWrite(CLOCK_PIN, LOW);
}
}
// ShiftType write() {
// for(byte i = 0; i < chipCount; i++) {
// shiftOut(dataPin, clockPin, MSBFIRST, (byte)(state >> (8 * i)));
// }
// digitalWrite(latchPin, HIGH);
// digitalWrite(latchPin, LOW);
// return state;
// }
// void display_data(int ssd_data, uint8_t led_data)
// {
// shift_out_data(led_data);
// shift_out_data(digitMap[ssd_data % 10]);
// shift_out_data(digitMap[ssd_data / 10]);
// digitalWrite(LATCH_PIN, LOW);
// digitalWrite(LATCH_PIN, HIGH);
// }
void show_info_on_ssd (char *ssd_data, uint8_t led_data)
{
int i;
for (i = (SHIFT_REG_COUNT - 1); i >= 0; i--)
{
if (i == (SHIFT_REG_COUNT - 1))
{
shift_out_data(led_data);
}
else if (ssd_data[i] >= 'a' && ssd_data[i] <= 'f')
{
shift_out_data(charMap[ssd_data[i] - 'a']);
}
else if (ssd_data[i] >= '0' && ssd_data[i] <= '9')
{
shift_out_data(digitMap[ssd_data[i] - '0']);
}
else
{
// Print ER (error) if passed character is not mapped in segment.
shift_out_data(R);
shift_out_data(E);
break;
}
}
digitalWrite(LATCH_PIN, LOW);
digitalWrite(LATCH_PIN, HIGH);
}
void loop()
{
int count = 0, led_data = 0x0;
char info[3];
show_info_on_ssd("cd", 0xff);
delay(1000);
// for (count = 0; count < 99; count++)
// {
// sprintf(info, "f%d", random(0, 9));
// led_data = ((1 << ((count % 4) + 4)) & 0xf0);
// show_info_on_ssd(info, led_data);
// delay(1000); // Delay for 1 second (1000 milliseconds)
// }
}