-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSevenSegment.cpp
137 lines (111 loc) · 3.5 KB
/
SevenSegment.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/***************
* NTP Clock
*
* Brad Hines
* Feb 2020
*/
#include "SevenSegment.h"
// ASCII codes
// 48-57 are the digits 0-9
// 65-90 are the letters A-Z
// 97-122 are the letters a-z. Subtract 32 to get the capitals
// LED Segments go clockwise from top:
//
// A
// F B
// G
// E C
// D
// This array starts at ASCII 48 for 0
const tSegmentPattern SegmentPatterns[] = {
// a b c d e f g dot
{ 1, 1, 1, 1, 1, 1, 0, 0 }, // 0
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // 1
{ 1, 1, 0, 1, 1, 0, 1, 0 }, // 2
{ 1, 1, 1, 1, 0, 0, 1, 0 }, // 3
{ 0, 1, 1, 0, 0, 1, 1, 0 }, // 4
{ 1, 0, 1, 1, 0, 1, 1, 0 }, // 5
{ 1, 0, 1, 1, 1, 1, 1, 0 }, // 6
{ 1, 1, 1, 0, 0, 0, 0, 0 }, // 7
{ 1, 1, 1, 1, 1, 1, 1, 0 }, // 8
{ 1, 1, 1, 1, 0, 1, 1, 0 }, // 9
{ 0, 0, 0, 1, 0, 0, 0, 0 }, // ascii 58 : (shows as underscore)
{ 0, 0, 0, 1, 0, 0, 0, 0 }, // ascii 59 ; (underscore)
{ 0, 0, 0, 1, 1, 0, 0, 0 }, // ascii 60 <
{ 0, 0, 0, 1, 0, 0, 1, 0 }, // ascii 61 =
{ 0, 0, 1, 1, 0, 0, 0, 0 }, // ascii 62 >
{ 1, 1, 0, 0, 1, 0, 1, 0 }, // ascii 63 ?
{ 1, 0, 1, 1, 1, 1, 1, 0 }, // ascii 64 @
{ 1, 1, 1, 0, 1, 1, 1, 0 }, // A
{ 0, 0, 1, 1, 1, 1, 1, 0 }, // b
{ 0, 0, 0, 1, 1, 0, 1, 0 }, // c
{ 0, 1, 1, 1, 1, 0, 1, 0 }, // d
{ 1, 0, 0, 1, 1, 1, 1, 0 }, // E
{ 1, 0, 0, 0, 1, 1, 1, 0 }, // F
{ 1, 1, 1, 1, 0, 1, 1, 0 }, // g (same as 9)
{ 0, 0, 1, 0, 1, 1, 1, 0 }, // h
{ 0, 0, 1, 0, 0, 0, 0, 0 }, // i
{ 0, 1, 1, 1, 0, 0, 0, 0 }, // J
{ 0, 0, 0, 0, 1, 1, 1, 0 }, // k
{ 0, 0, 0, 1, 1, 1, 0, 0 }, // L
{ 1, 1, 1, 0, 1, 1, 0, 0 }, // M (A but no middle)
{ 0, 0, 1, 0, 1, 0, 1, 0 }, // n
{ 0, 0, 1, 1, 1, 0, 1, 0 }, // o
{ 1, 1, 0, 0, 1, 1, 1, 0 }, // P
{ 1, 1, 1, 0, 0, 1, 1, 0 }, // q (same as 9 without base)
{ 0, 0, 0, 0, 1, 0, 1, 0 }, // r
{ 1, 0, 1, 1, 0, 1, 1, 0 }, // S
{ 0, 0, 0, 1, 1, 1, 1, 0 }, // t
{ 0, 0, 1, 1, 1, 0, 0, 0 }, // u
{ 0, 0, 1, 1, 0, 0, 0, 0 }, // v (u minus left bar)
{ 0, 1, 1, 0, 1, 1, 0, 0 }, // w ('11 shape')
{ 0, 1, 1, 0, 1, 1, 1, 0 }, // x (H)
{ 0, 1, 1, 1, 0, 1, 1, 0 }, // y (9 missing top bar)
{ 1, 1, 0, 1, 1, 0, 1, 0 } // Z (same as 2)
};
const tSegmentPattern Blank = { 0, 0, 0, 0, 0, 0, 0, 0 };
const tSegmentPattern *Encode7Segments(char cAscii)
{
// Convert lower case to upper
if (cAscii > 90) cAscii -= 32;
// Space is a special case
if (cAscii == 32) return &Blank;
// Unknown characters
if (cAscii < 48 || cAscii > 90) return NULL;
return &SegmentPatterns[cAscii-48];
}
// LED Segments go clockwise from top:
//
// A
// F B
// G
// E C
// D
void PrintSevenSegmentDigit(char cAscii) {
const tSegmentPattern *pSegs;
pSegs = Encode7Segments(cAscii);
if (pSegs == NULL) {
Serial.print(F("PrintSevenSegmentDigit: Unknown character: "));
Serial.print(cAscii);
return;
}
if (pSegs->a) Serial.println(F(" -- "));
else Serial.println(' ');
if (pSegs->f) Serial.print(F("| "));
else Serial.print(F(" "));
if (pSegs->b) Serial.println('|');
else Serial.println(' ');
if (pSegs->g) Serial.println(F(" -- "));
else Serial.println(' ');
if (pSegs->e) Serial.print(F("| "));
else Serial.print(F(" "));
if (pSegs->c) Serial.println('|');
else Serial.println(' ');
if (pSegs->d) Serial.println(F(" -- "));
else Serial.println(' ');
}
void PrintAllSevenSegmentDigits() {
char c;
for (c=48; c<=90; c++)
PrintSevenSegmentDigit(c);
}