Skip to content

Instantly share code, notes, and snippets.

@schreibfaul1
Created February 23, 2024 07:55
Show Gist options
  • Save schreibfaul1/f21554eea9900ee7d5683263ba3a7ce2 to your computer and use it in GitHub Desktop.
Save schreibfaul1/f21554eea9900ee7d5683263ba3a7ce2 to your computer and use it in GitHub Desktop.
LED 7 segment dusplay with 74HC595 and 8 digits
#include "Arduino.h"
void display_start();
void display_value(const char* value);
int indexOf (const char* base, char ch, int startIndex);
void setup(){
display_start();
}
void loop() {
display_value("12345678");
}
//****************************************************************************************************************************************************
// 7 S E G M E N T 8 D I G I T S 74HC595 D I S P L A Y *
//****************************************************************************************************************************************************
#define latchPin 22
#define dataPin 21
#define clockPin 17
const byte ARRAY_SIZE = 27;
byte segment_codes[ARRAY_SIZE];
String available_chars[ARRAY_SIZE];
void display_start() {
segment_codes[ 0]=0b11000000; // 0
segment_codes[ 1]=0b11111001; // 1
segment_codes[ 2]=0b10100100; // 2
segment_codes[ 3]=0b10110000; // 3
segment_codes[ 4]=0b10011001; // 4
segment_codes[ 5]=0b10010010; // 5
segment_codes[ 6]=0b10000010; // 6
segment_codes[ 7]=0b11111000; // 7
segment_codes[ 8]=0b10000000; // 8
segment_codes[ 9]=0b10010000; // 9
segment_codes[10]=0b10001000; // a
segment_codes[11]=0b10000011; // b
segment_codes[12]=0b10100111; // c
segment_codes[13]=0b10100001; // d
segment_codes[14]=0b10000110; // e
segment_codes[15]=0b10001110; // f
segment_codes[16]=0b10001001; // H
segment_codes[17]=0b11000111; // L
segment_codes[18]=0b10001100; // P
segment_codes[19]=0b10111111; // -
segment_codes[20]=0b11110111; // _
segment_codes[21]=0b11111111; // space
segment_codes[22]=0b10110110; // unknown
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
int findIndexOfChar(char character){
char s[24] = {"0123456789abcdefHLPS-_ "};
int p = indexOf(s, character, 0);
if(p == -1) p = 22;
return p;
}
void display_value(const char* value) {
uint8_t j[8] = {3, 2, 1, 0, 7, 6, 5, 4};
int skip = 0;
for(int i = 0; i < strlen(value); i++) {
if(!((String)value[i]).equals(".")) {
int indexOfCharToWrite = findIndexOfChar(value[j[i]]);
if(indexOfCharToWrite > -1) {
byte bitToWrite = 0;
digitalWrite(latchPin, LOW);
byte code = segment_codes[indexOfCharToWrite];
boolean skipNext = false;
if(((String)value[i + 1]).equals(".")) {
bitWrite(code, 7, 0);
skipNext = true;
}
shiftOut(dataPin, clockPin, MSBFIRST, code);
bitWrite(bitToWrite, i - skip, 1);
shiftOut(dataPin, clockPin, LSBFIRST, bitToWrite);
digitalWrite(latchPin, HIGH);
if(skipNext) { skip++; }
}
}
}
}
int indexOf (const char* base, char ch, int startIndex = 0) {
const char *p = base;
for (; startIndex > 0; startIndex--)
if (*p++ == '\0') return -1;
char *pos = strchr(p, ch);
if (pos == nullptr) return -1;
return pos - base;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment