Created
February 24, 2024 07:21
-
-
Save schreibfaul1/9bdcd744b1b4c860366c664099b7565b to your computer and use it in GitHub Desktop.
MAX7219_ LED_7segm_8digits
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "Arduino.h" | |
void display_start(); | |
void DisplayText(char *text); | |
void setup() { | |
Serial.begin(115200); | |
display_start(); | |
DisplayText("01234567"); | |
} | |
void loop() {} | |
//**************************************************************************************************************************************************** | |
// 7 S E G M E N T 8 D I G I T S MAX7219 D I S P L A Y * | |
//**************************************************************************************************************************************************** | |
#define MAX_CS 21 | |
#define MAX_DIN 22 | |
#define MAX_CLK 17 | |
#define SHUTDOWN_ADDR 12 | |
#define DISPLAYTEST_ADDR 15 | |
#define SCANLIMIT_ADDR 11 | |
#define DECODEMODE_ADDR 9 | |
#define BRIGHTNESS_ADDR 10 | |
const byte ARRAY_SIZE = 23; | |
byte segment_codes[ARRAY_SIZE]; | |
String available_chars[ARRAY_SIZE]; | |
int indexOf(const char *base, char ch, int startIndex); | |
int findIndexOfChar(char character) { | |
char s[24] = {"0123456789abcdefHLPS-_ "}; | |
int p = indexOf(s, character, 0); | |
if(p == -1) p = 22; | |
return p; | |
} | |
void MAX7219_Write(volatile byte opcode, volatile byte data) { | |
digitalWrite(MAX_CS, LOW); | |
shiftOut(MAX_DIN, MAX_CLK, MSBFIRST, opcode); | |
shiftOut(MAX_DIN, MAX_CLK, MSBFIRST, data); | |
digitalWrite(MAX_CS, HIGH); | |
} | |
void _clear() { | |
for(int i = 1; i <= 8; i++) { MAX7219_Write(i, segment_codes[21]); } | |
} | |
void DisplayText(char *text) { | |
_clear(); | |
int s = strlen(text); | |
for(int i = 0; i < 8; i++) { | |
if(s < i) break; | |
int p = findIndexOfChar(text[i]); | |
MAX7219_Write(s - i, segment_codes[p]); | |
} | |
} | |
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; | |
} | |
void display_start() { | |
segment_codes[0] = 0b1111110; // 0 | |
segment_codes[1] = 0b0110000; // 1 | |
segment_codes[2] = 0b1101101; // 2 | |
segment_codes[3] = 0b1111001; // 3 | |
segment_codes[4] = 0b0110011; // 4 | |
segment_codes[5] = 0b1011011; // 5 | |
segment_codes[6] = 0b1011111; // 6 | |
segment_codes[7] = 0b1110000; // 7 | |
segment_codes[8] = 0b1111111; // 8 | |
segment_codes[9] = 0b1111011; // 9 | |
segment_codes[10] = 0b1110111; // a | |
segment_codes[11] = 0b0011111; // b | |
segment_codes[12] = 0b0001101; // c | |
segment_codes[13] = 0b0111101; // d | |
segment_codes[14] = 0b1001111; // e | |
segment_codes[15] = 0b1000111; // f | |
segment_codes[16] = 0b0110111; // H | |
segment_codes[17] = 0b0001110; // L | |
segment_codes[18] = 0b1100111; // P | |
segment_codes[19] = 0b0000001; // - | |
segment_codes[20] = 0b0001000; // _ | |
segment_codes[21] = 0b0000000; // space | |
segment_codes[22] = 0b1001001; // unknown | |
pinMode(MAX_DIN, OUTPUT); | |
pinMode(MAX_CS, OUTPUT); | |
pinMode(MAX_CLK, OUTPUT); | |
MAX7219_Write(DISPLAYTEST_ADDR, 0); | |
MAX7219_Write(SCANLIMIT_ADDR, 8 - 1); | |
MAX7219_Write(DECODEMODE_ADDR, 0); | |
MAX7219_Write(BRIGHTNESS_ADDR, 4); // 0 ... 15 | |
MAX7219_Write(SHUTDOWN_ADDR, 0x01); | |
_clear(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment