Princeton PT6964 LED controller supports 4 Digits @ 13 Segments, 5 Digits @ 12 Segments, 6 Digits @ 11 Segments or 7 Digits @ 10 Segments. Also supports a scanned keyboard of upto 20 keys. SPI bus interface.
Princeton PT6964 LED controller supports 4 Digits @ 13 Segments, 5 Digits @ 12 Segments, 6 Digits @ 11 Segments or 7 Digits @ 10 Segments. Also supports a scanned keyboard of upto 20 keys. SPI bus interface.
See Component page here.
Revision 1:1adf993a3e34, committed 2016-01-09
- Comitter:
- wim
- Date:
- Sat Jan 09 13:40:06 2016 +0000
- Parent:
- 0:27f32a087e5a
- Child:
- 2:eaf2f5d1af34
- Commit message:
- Updated Icon handling, UDCs and _putc()
Changed in this revision
--- a/Font_7Seg.cpp Sat Nov 21 16:43:15 2015 +0000
+++ b/Font_7Seg.cpp Sat Jan 09 13:40:06 2016 +0000
@@ -1,5 +1,6 @@
/* mbed LED Font Library, for Princeton PT6964 controller as used in DVD538A
* Copyright (c) 2015, v01: WH, Initial version
+ * 2016, v02: WH, fonttable changed to short
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -21,29 +22,42 @@
*/
#include "Font_7Seg.h"
+
+//Mask for blending out and restoring Icons
+const char MASK_ICON_GRID[][2] = {
+ {LO(S7_ICON_GR1), HI(S7_ICON_GR1)},
+ {LO(S7_ICON_GR2), HI(S7_ICON_GR2)},
+ {LO(S7_ICON_GR3), HI(S7_ICON_GR3)},
+ {LO(S7_ICON_GR4), HI(S7_ICON_GR4)},
+ {LO(S7_ICON_GR5), HI(S7_ICON_GR5)},
+ {LO(S7_ICON_GR6), HI(S7_ICON_GR6)},
+ {LO(S7_ICON_GR7), HI(S7_ICON_GR7)}
+ };
+
+
// ASCII Font definition table for transmission to PT6964
//
//#define FONT_7S_START 0x20
//#define FONT_7S_END 0x7F
//#define FONT_7S_NR_CHARS (FONT_7_END - FONT_7S_START + 1)
-const char FONT_7S[][2] = {
- {LO(C_0), HI(C_0)}, //48 0x30
- {LO(C_1), HI(C_1)},
- {LO(C_2), HI(C_2)},
- {LO(C_3), HI(C_3)},
- {LO(C_4), HI(C_4)},
- {LO(C_5), HI(C_5)},
- {LO(C_6), HI(C_6)},
- {LO(C_7), HI(C_7)},
- {LO(C_8), HI(C_8)},
- {LO(C_9), HI(C_9)},
- {LO(C_A), HI(C_A)}, //65 0x41, A
- {LO(C_B), HI(C_B)},
- {LO(C_C), HI(C_C)},
- {LO(C_D), HI(C_D)},
- {LO(C_E), HI(C_E)},
- {LO(C_F), HI(C_F)}
- };// 127
-
+const short FONT_7S[] = {
+ C7_0, //48 0x30
+ C7_1,
+ C7_2,
+ C7_3,
+ C7_4,
+ C7_5,
+ C7_6,
+ C7_7,
+ C7_8,
+ C7_9,
+ C7_A, //65 0x41, A
+ C7_B,
+ C7_C,
+ C7_D,
+ C7_E,
+ C7_F
+ };// 127
+
\ No newline at end of file
--- a/Font_7Seg.h Sat Nov 21 16:43:15 2015 +0000 +++ b/Font_7Seg.h Sat Jan 09 13:40:06 2016 +0000 @@ -1,5 +1,6 @@ /* mbed LED Font Library, for Princeton PT6964 controller as used in DVD538A * Copyright (c) 2015, v01: WH, Initial version + * 2016, v02: WH, fonttable changed to short, added symbols * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -27,56 +28,121 @@ // will be adapted automatically according to the bit-to-segment mapping. Obviously this will only work when the segment // mapping is identical for every digit position. This will be the case unless the hardware designer really hates software developers. // -#define S_D 0x0008 -#define S_C 0x0010 -#define S_B 0x0020 -#define S_A 0x0040 -#define S_E 0x0080 -#define S_F 0x0100 -#define S_G 0x0200 +#define S7_D 0x0008 +#define S7_C 0x0010 +#define S7_B 0x0020 +#define S7_A 0x0040 +#define S7_E 0x0080 +#define S7_F 0x0100 +#define S7_G 0x0200 + +//Mask for blending out and setting 7 segments digits +#define MASK_7S_ALL = (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F | S7_G} -#define S_LD2 0x0001 -#define S_LD1 0x0002 -#define S_CD 0x0008 -#define S_DVD 0x0010 -#define S_PSE 0x0020 -#define S_PLY 0x0040 -#define S_COL 0x0080 -#define S_MP4 0x0100 -#define S_MP3 0x0200 +//Icons Grid 1 +#define S7_LD2 0x0001 +#define S7_LD1 0x0002 +#define S7_CD 0x0008 +#define S7_DVD 0x0010 +#define S7_PSE 0x0020 +#define S7_PLY 0x0040 +#define S7_COL2 0x0080 +#define S7_MP4 0x0100 +#define S7_MP3 0x0200 +#define S7_ICON_GR1 (S7_LD2 | S7_LD1 | S7_CD | S7_DVD | S7_PSE | S7_PLY | S7_COL2 | S7_MP4 | S7_MP3) + +//Icons Grid 2 +#define S7_ICON_GR2 (0x0000) + +//Icons Grid 3 +#define S7_ICON_GR3 (0x0000) + +//Icons Grid 4 +#define S7_ICON_GR4 (0x0000) + +//Icons Grid 5 +#define S7_ICON_GR5 (0x0000) + +//Icons Grid 6 +#define S7_ICON_GR6 (0x0000) + +//Icons Grid 7 +#define S7_ICON_GR7 (0x0000) //Mask for blending out and restoring Icons //One mask pattern will be sufficient assuming that all digits use the same mapping. -#define S_ICON_MSK (0x0000) +//#define S_ICON_MSK (0x0000) +//Mask for blending out and restoring Icons +extern const char MASK_ICON_GRID[][2]; // ASCII Font definitions for segments in each character // +//32 0x20 Symbols +#define C7_SPC (0x0000) +//#define C_CMA (S_DP) +//#define C_DPT (S_DP) +#define C7_MIN (S7_G) + //48 0x30 digits -#define C_0 (S_A | S_B | S_C | S_D | S_E | S_F) -#define C_1 (S_B | S_C) -#define C_2 (S_A | S_B | S_D | S_E | S_G) -#define C_3 (S_A | S_B | S_C | S_D | S_G) -#define C_4 (S_B | S_C | S_F | S_G) -#define C_5 (S_A | S_C | S_D | S_F | S_G) -#define C_6 (S_A | S_C | S_D | S_E | S_F | S_G) -#define C_7 (S_A | S_B | S_C) -#define C_8 (S_A | S_B | S_C | S_D | S_E | S_F | S_G) -#define C_9 (S_A | S_B | S_C | S_D | S_F | S_G) +#define C7_0 (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F) +#define C7_1 (S7_B | S7_C) +#define C7_2 (S7_A | S7_B | S7_D | S7_E | S7_G) +#define C7_3 (S7_A | S7_B | S7_C | S7_D | S7_G) +#define C7_4 (S7_B | S7_C | S7_F | S7_G) +#define C7_5 (S7_A | S7_C | S7_D | S7_F | S7_G) +#define C7_6 (S7_A | S7_C | S7_D | S7_E | S7_F | S7_G) +#define C7_7 (S7_A | S7_B | S7_C) +#define C7_8 (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F | S7_G) +#define C7_9 (S7_A | S7_B | S7_C | S7_D | S7_F | S7_G) //64 0x40 -#define C_A (S_A | S_B | S_C | S_E | S_F | S_G ) // Upper case alphabet -#define C_B (S_C | S_D | S_E | S_F | S_G) -#define C_C (S_A | S_D | S_E | S_F) -#define C_D (S_B | S_C | S_D | S_E | S_G) -#define C_E (S_A | S_D | S_E | S_F | S_G) -#define C_F (S_A | S_E | S_F | S_G) -//97 0x61 -#define C_a (S_A | S_B | S_C | S_E | S_F | S_G ) // Lower case alphabet -#define C_b (S_C | S_D | S_E | S_F | S_G) -#define C_c (S_A | S_D | S_E | S_F) -#define C_d (S_B | S_C | S_D | S_E | S_G) -#define C_e (S_A | S_D | S_E | S_F | S_G) -#define C_f (S_A | S_E | S_F | S_G) +#define C7_A (S7_A | S7_B | S7_C | S7_E | S7_F | S7_G ) // Upper case alphabet +#define C7_B (S7_C | S7_D | S7_E | S7_F | S7_G) +#define C7_C (S7_A | S7_D | S7_E | S7_F) +#define C7_D (S7_B | S7_C | S7_D | S7_E | S7_G) +#define C7_E (S7_A | S7_D | S7_E | S7_F | S7_G) +#define C7_F (S7_A | S7_E | S7_F | S7_G) +#define C7_G (S7_A | S7_B | S7_C | S7_F | S7_G) +#define C7_H (S7_B | S7_C | S7_E | S7_F | S7_G) +#define C7_I (S7_B | S7_C) +#define C7_J (S7_B | S7_C | S7_D) +#define C7_L (S7_D | S7_E | S7_F) +#define C7_M (S7_C | S7_E | S7_G) +#define C7_N (S7_C | S7_E | S7_G) +#define C7_O (S7_A | S7_B | S7_C | S7_D | S7_E | S7_F) +#define C7_P (S7_A | S7_B | S7_E | S7_F | S7_G) +#define C7_Q (S7_A | S7_B | S7_C | S7_F | S7_G) +#define C7_R (S7_E | S7_G) +#define C7_S (S7_A | S7_C | S7_D | S7_F | S7_G) +#define C7_T (S7_D | S7_E | S7_F | S7_G) +#define C7_U (S7_B | S7_C | S7_D | S7_E | S7_F) +#define C7_Y (S7_B | S7_C | S7_D | S7_F | S7_G) +#define C7_Z (S7_A | S7_B | S7_D | S7_E | S7_G) + +//97 0x61 Lower case alphabet +#define C7_a C7_A +#define C7_b C7_B +#define C7_c C7_C +#define C7_d C7_D +#define C7_e C7_E +#define C7_f C7_H +#define C7_g C7_G +#define C7_h C7_H +#define C7_i C7_I +#define C7_j C7_J +#define C7_l C7_L +#define C7_m C7_M +#define C7_n C7_N +#define C7_o C7_O +#define C7_p C7_P +#define C7_q C7_Q +#define C7_r C7_R +#define C7_s C7_S +#define C7_t C7_T +#define C7_u C7_U +#define C7_y C7_Y +#define C7_z C7_Z + // Font data selection for transmission to PT6964 memory #define LO(x) ( x & 0xFF) @@ -88,6 +154,6 @@ //#define FONT_7S_START 0x20 //#define FONT_7S_END 0x7F //#define FONT_7S_NR_CHARS (FONT_7S_END - FONT_7S_START + 1) -extern const char FONT_7S[][2]; +extern const short FONT_7S[]; #endif \ No newline at end of file
--- a/PT6964.cpp Sat Nov 21 16:43:15 2015 +0000
+++ b/PT6964.cpp Sat Jan 09 13:40:06 2016 +0000
@@ -1,5 +1,7 @@
/* mbed PT6964 Library, for PT6964 LED controller
* Copyright (c) 2015, v01: WH, Initial version
+ * 2015, v02: WH, rename Digit/Grid
+ * 2016, v03: WH, updated Icon handling, UDCs and _putc()
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -277,40 +279,43 @@
return _columns;
}
-
+
/** Clear the screen and locate to 0
- */
-void PT6964_DVD538A::cls() {
-
-#if(0)
- //clear local buffer (including Icons)
- for (int idx = 0; idx < DVD538A_NR_GRIDS; idx++) {
- _displaybuffer[(idx<<1)] = 0x00;
- _displaybuffer[(idx<<1) + 1] = 0x00;
+ * @param bool clrAll Clear Icons also (default = false)
+ */
+void PT6964_DVD538A::cls(bool clrAll) {
+
+ if (clrAll) {
+ //clear local buffer (including Icons)
+ for (int idx=0; idx < (DVD538A_NR_GRIDS << 1); idx++) {
+ _displaybuffer[idx] = 0x00;
+ }
+ }
+ else {
+ //clear local buffer (preserving Icons)
+ for (int idx=0; idx < DVD538A_NR_GRIDS; idx++) {
+ _displaybuffer[(idx<<1)] = _displaybuffer[(idx<<1)] & MASK_ICON_GRID[idx][0];
+ _displaybuffer[(idx<<1) + 1] = _displaybuffer[(idx<<1) + 1] & MASK_ICON_GRID[idx][1];
+ }
}
-#else
- //clear local buffer (preserving Icons)
- for (int idx = DVD538A_DIG1_IDX; idx < (DVD538A_DIG1_IDX + DVD538A_NR_DIGITS); idx++) {
- _displaybuffer[(idx<<1)] = _displaybuffer[(idx<<1)] & LO(S_ICON_MSK);
- _displaybuffer[(idx<<1) + 1] = _displaybuffer[(idx<<1) + 1] & HI(S_ICON_MSK);
- }
-#endif
writeData(_displaybuffer, (DVD538A_NR_GRIDS*2));
_column = 0;
-}
+}
+
/** Set Icon
*
- * @param Icon icon Enums Icon has Grid position encoded in 16 MSBs, Icon pattern encoded in 16 LSBs
+ * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
* @return none
*/
void PT6964_DVD538A::setIcon(Icon icon) {
int addr, icn;
- icn = icon & 0xFFFF;
- addr = ((icon >> 16) & 0xFFFF) - 1;
+ icn = icon & 0xFFFF;
+ addr = (icon >> 24) & 0xFF;
+ addr = (addr - 1) << 1;
//Save char...and set bits for icon to write
_displaybuffer[addr] = _displaybuffer[addr] | LO(icn);
@@ -320,15 +325,16 @@
/** Clr Icon
*
- * @param Icon icon Enums Icon has Grid position encoded in 16 MSBs, Icon pattern encoded in 16 LSBs
+ * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
* @return none
*/
void PT6964_DVD538A::clrIcon(Icon icon) {
int addr, icn;
- icn = icon & 0xFFFF;
- addr = ((icon >> 16) & 0xFFFF) - 1;
-
+ icn = icon & 0xFFFF;
+ addr = (icon >> 24) & 0xFF;
+ addr = (addr - 1) << 1;
+
//Save char...and clr bits for icon to write
_displaybuffer[addr] = _displaybuffer[addr] & ~LO(icn);
_displaybuffer[addr+1] = _displaybuffer[addr+1] & ~HI(icn);
@@ -349,90 +355,77 @@
}
// Mask out Icon bits?
- _UDC_16S[udc_idx][0] = LO(udc_data);
- _UDC_16S[udc_idx][1] = HI(udc_data);
+ _UDC_7S[udc_idx] = udc_data;
}
+
/** Write a single character (Stream implementation)
*/
int PT6964_DVD538A::_putc(int value) {
- int addr;
+ int addr;
+ bool validChar = false;
+ short pattern = 0x0000;
if ((value == '\n') || (value == '\r')) {
//No character to write
+ validChar = false;
//Update Cursor
_column = 0;
+ }
+ else if (value == '-') {
+ //No character to write
+ validChar = true;
+ pattern = C7_MIN;
}
else if ((value >= 0) && (value < DVD538A_NR_UDC)) {
//Character to write
- addr = (DVD538A_DIG1_IDX + ((DVD538A_NR_DIGITS - 1) - _column)) << 1;
-
- //Save icons...and set bits for character to write
- _displaybuffer[addr] = (_displaybuffer[addr] & LO(S_ICON_MSK)) | _UDC_16S[value][0];
- _displaybuffer[addr+1] = (_displaybuffer[addr+1] & HI(S_ICON_MSK)) | _UDC_16S[value][1];
- writeData(_displaybuffer, (DVD538A_NR_GRIDS*2));
-
- //Update Cursor
- _column++;
- if (_column > (DVD538A_NR_DIGITS - 1)) {
- _column = 0;
- }
+ validChar = true;
+ pattern = _UDC_7S[value];
}
else if ((value >= (int)'0') && (value <= (int) '9')) {
//Character to write
- value = value - (int) '0';
- addr = (DVD538A_DIG1_IDX + ((DVD538A_NR_DIGITS - 1) - _column)) << 1;
-
+ validChar = true;
+ pattern = FONT_7S[value - (int) '0'];
+ }
+ else if ((value >= (int) 'A') && (value <= (int) 'F')) {
+ //Character to write
+ validChar = true;
+ pattern = FONT_7S[10 + value - (int) 'A'];
+ }
+ else if ((value >= (int) 'a') && (value <= (int) 'f')) {
+ //Character to write
+ validChar = true;
+ pattern = FONT_7S[10 + value - (int) 'a'];
+ } //else
+
+ if (validChar) {
+ //Character to write
+
+ //Translate between _column and displaybuffer entries
+ //_column == 0 => Grid5 => addr = 8
+ //_column == 1 => Grid4 => addr = 6
+ //_column == 2 => Grid3 => addr = 4
+ //_column == 3 => Grid4 => addr = 2
+ addr = (4 - _column) << 1;
+
//Save icons...and set bits for character to write
- _displaybuffer[addr] = (_displaybuffer[addr] & LO(S_ICON_MSK)) | FONT_7S[value][0];
- _displaybuffer[addr+1] = (_displaybuffer[addr+1] & HI(S_ICON_MSK)) | FONT_7S[value][1];
+ _displaybuffer[addr] = (_displaybuffer[addr] & MASK_ICON_GRID[4 - _column][0]) | LO(pattern);
+ _displaybuffer[addr+1] = (_displaybuffer[addr+1] & MASK_ICON_GRID[4 - _column][1]) | HI(pattern);
+
writeData(_displaybuffer, (DVD538A_NR_GRIDS*2));
-
+
//Update Cursor
_column++;
if (_column > (DVD538A_NR_DIGITS - 1)) {
_column = 0;
}
- }
- else if ((value >= (int) 'A') && (value <= (int) 'F')) {
- //Character to write
- value = 10 + value - (int) 'A';
- addr = (DVD538A_DIG1_IDX + ((DVD538A_NR_DIGITS - 1) - _column)) << 1;
-
- //Save icons...and set bits for character to write
- _displaybuffer[addr] = (_displaybuffer[addr] & LO(S_ICON_MSK)) | FONT_7S[value][0];
- _displaybuffer[addr+1] = (_displaybuffer[addr+1] & HI(S_ICON_MSK)) | FONT_7S[value][1];
- writeData(_displaybuffer, (DVD538A_NR_GRIDS*2));
-
- //Update Cursor
- _column++;
- if (_column > (DVD538A_NR_DIGITS - 1)) {
- _column = 0;
- }
- }
- else if ((value >= (int) 'a') && (value <= (int) 'f')) {
- //Character to write
- value = 10 + value - (int) 'a';
- addr = (DVD538A_DIG1_IDX + ((DVD538A_NR_DIGITS - 1) - _column)) << 1;
-
- //Save icons...and set bits for character to write
- _displaybuffer[addr] = (_displaybuffer[addr] & LO(S_ICON_MSK)) | FONT_7S[value][0];
- _displaybuffer[addr+1] = (_displaybuffer[addr+1] & HI(S_ICON_MSK)) | FONT_7S[value][1];
- writeData(_displaybuffer, (DVD538A_NR_GRIDS*2));
-
- //Update Cursor
- _column++;
- if (_column > (DVD538A_NR_DIGITS - 1)) {
- _column = 0;
- }
- } //else
+ } // if validChar
return value;
}
-
// get a single character (Stream implementation)
int PT6964_DVD538A::_getc() {
return -1;
--- a/PT6964.h Sat Nov 21 16:43:15 2015 +0000
+++ b/PT6964.h Sat Jan 09 13:40:06 2016 +0000
@@ -1,5 +1,7 @@
/* mbed PT6964 Library, for PT6964 LED controller
* Copyright (c) 2015, v01: WH, Initial version
+ * 2015, v02: WH, rename Digit/Grid
+ * 2016, v03: WH, updated Icon handling, UDCs and _putc()
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -222,7 +224,7 @@
#define DVD538A_NR_GRIDS 5
#define DVD538A_NR_DIGITS 4
-#define DVD538A_DIG1_IDX 1
+//#define DVD538A_DIG1_IDX 1
#define DVD538A_NR_UDC 8
/** Constructor for class for driving Princeton PT6964 controller as used in DVD538A
@@ -235,20 +237,20 @@
public:
/** Enums for Icons */
- // Grid encoded in 16 MSBs, Icon pattern encoded in 16 LSBs
+ // Grid encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
enum Icon {
- Grid1_LD1 = (1<<16) | S_LD1,
- Grid1_LD2 = (1<<16) | S_LD2,
- Grid1_CD = (1<<16) | S_CD,
- Grid1_DVD = (1<<16) | S_DVD,
- Grid1_PSE = (1<<16) | S_PSE,
- Grid1_PLY = (1<<16) | S_PLY,
- Grid1_COL = (1<<16) | S_COL,
- Grid1_MP4 = (1<<16) | S_MP4,
- Grid1_MP3 = (1<<16) | S_MP3
+ LD1 = (1<<24) | S7_LD1,
+ LD2 = (1<<24) | S7_LD2,
+ CD = (1<<24) | S7_CD,
+ DVD = (1<<24) | S7_DVD,
+ PSE = (1<<24) | S7_PSE,
+ PLY = (1<<24) | S7_PLY,
+ COL2 = (1<<24) | S7_COL2,
+ MP4 = (1<<24) | S7_MP4,
+ MP3 = (1<<24) | S7_MP3
};
- typedef char UDCData_t[DVD538A_NR_UDC][2];
+ typedef short UDCData_t[DVD538A_NR_UDC];
/** Constructor for class for driving Princeton PT6964 VFD controller as used in DVD538A
*
@@ -280,19 +282,20 @@
void locate(int column);
/** Clear the screen and locate to 0
+ * @param bool clrAll Clear Icons also (default = false)
*/
- void cls();
+ void cls(bool clrAll = false);
/** Set Icon
*
- * @param Icon icon Enums Icon has Grid position encoded in 16 MSBs, Icon pattern encoded in 16 LSBs
+ * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
* @return none
*/
void setIcon(Icon icon);
/** Clr Icon
*
- * @param Icon icon Enums Icon has Grid position encoded in 16 MSBs, Icon pattern encoded in 16 LSBs
+ * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Icon pattern encoded in 16 LSBs
* @return none
*/
void clrIcon(Icon icon);
@@ -331,7 +334,7 @@
int _columns;
DisplayData_t _displaybuffer;
- UDCData_t _UDC_16S;
+ UDCData_t _UDC_7S;
};
PT6964 LED controller (70 LEDs max), Keyboard scan (20 keys max)