@@ -220,14 +220,26 @@ void SevSeg::DisplayString(char* toDisplay, byte DecAposColon)
220
220
// displayCharacter(toDisplay[digit-1]); //Now display this digit
221
221
// displayArray (defined in SevSeg.h) decides which segments are turned on for each number or symbol
222
222
char characterToDisplay = toDisplay[digit-1 ];
223
- if (characterArray[characterToDisplay][0 ]) digitalWrite (segmentA, SegOn);
224
- if (characterArray[characterToDisplay][1 ]) digitalWrite (segmentB, SegOn);
225
- if (characterArray[characterToDisplay][2 ]) digitalWrite (segmentC, SegOn);
226
- if (characterArray[characterToDisplay][3 ]) digitalWrite (segmentD, SegOn);
227
- if (characterArray[characterToDisplay][4 ]) digitalWrite (segmentE, SegOn);
228
- if (characterArray[characterToDisplay][5 ]) digitalWrite (segmentF, SegOn);
229
- if (characterArray[characterToDisplay][6 ]) digitalWrite (segmentG, SegOn);
230
-
223
+ if (characterToDisplay & 0x80 ) // bit 7 enables bit-per-segment control
224
+ { // Each bit of characterToDisplay turns on a single segment (from A-to-G)
225
+ if (characterToDisplay & 0x01 ) digitalWrite (segmentA, SegOn);
226
+ if (characterToDisplay & 0x02 ) digitalWrite (segmentB, SegOn);
227
+ if (characterToDisplay & 0x04 ) digitalWrite (segmentC, SegOn);
228
+ if (characterToDisplay & 0x08 ) digitalWrite (segmentD, SegOn);
229
+ if (characterToDisplay & 0x10 ) digitalWrite (segmentE, SegOn);
230
+ if (characterToDisplay & 0x20 ) digitalWrite (segmentF, SegOn);
231
+ if (characterToDisplay & 0x40 ) digitalWrite (segmentG, SegOn);
232
+ }
233
+ else
234
+ {
235
+ if (characterArray[characterToDisplay][0 ]) digitalWrite (segmentA, SegOn);
236
+ if (characterArray[characterToDisplay][1 ]) digitalWrite (segmentB, SegOn);
237
+ if (characterArray[characterToDisplay][2 ]) digitalWrite (segmentC, SegOn);
238
+ if (characterArray[characterToDisplay][3 ]) digitalWrite (segmentD, SegOn);
239
+ if (characterArray[characterToDisplay][4 ]) digitalWrite (segmentE, SegOn);
240
+ if (characterArray[characterToDisplay][5 ]) digitalWrite (segmentF, SegOn);
241
+ if (characterArray[characterToDisplay][6 ]) digitalWrite (segmentG, SegOn);
242
+ }
231
243
// Service the decimal point, apostrophe and colon
232
244
if ((DecAposColon & (1 <<(digit-1 ))) && (digit < 5 )) // Test DecAposColon to see if we need to turn on a decimal point
233
245
digitalWrite (segmentDP, SegOn);
0 commit comments