This is a driver library for the popular QDSP-6064 bubble display. These miniature displays can be leveraged for small breadboard projects in order to display debug information or even in larger projects where LCD displays are unpractical.

About

Hardware

/media/uploads/mdu7078/bubble1.jpg

Usage

Committer:
mdu7078
Date:
Thu Mar 26 08:10:08 2015 +0000
Revision:
2:3604f34e944b
Parent:
1:0dd75913f211
Fixed issue with display starting out as "0000" which was due to the fact that a table lookup is not necessary for initializing the character values since these characters are looked up in the LUT already (redundant call).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mdu7078 0:cc6e3bfecab4 1 /* * * * * * * * * * * * * * * * * * * * * * * * * * *
mdu7078 2:3604f34e944b 2 * This drives the popular QDSP-6064 bubble display. *
mdu7078 0:cc6e3bfecab4 3 * *
mdu7078 0:cc6e3bfecab4 4 * Created by: Michael Dushkoff (mad1841@rit.edu) *
mdu7078 0:cc6e3bfecab4 5 * * * * * * * * * * * * * * * * * * * * * * * * * * */
mdu7078 0:cc6e3bfecab4 6
mdu7078 0:cc6e3bfecab4 7 #ifndef BUBBLE_DISPLAY_H
mdu7078 0:cc6e3bfecab4 8 #define BUBBLE_DISPLAY_H
mdu7078 0:cc6e3bfecab4 9
mdu7078 0:cc6e3bfecab4 10 #include "mbed.h"
mdu7078 0:cc6e3bfecab4 11
mdu7078 0:cc6e3bfecab4 12 // Definitions
mdu7078 0:cc6e3bfecab4 13 #define DEF_DISPL_FREQ (10000.0) // 10kHz display frequency
mdu7078 0:cc6e3bfecab4 14
mdu7078 0:cc6e3bfecab4 15 // LUT for character to display
mdu7078 0:cc6e3bfecab4 16 const char dispTabl[] = {
mdu7078 0:cc6e3bfecab4 17 0x7E, // 0
mdu7078 0:cc6e3bfecab4 18 0x30, // 1
mdu7078 0:cc6e3bfecab4 19 0x6D, // 2
mdu7078 0:cc6e3bfecab4 20 0x79, // 3
mdu7078 0:cc6e3bfecab4 21 0x33, // 4
mdu7078 0:cc6e3bfecab4 22 0x5B, // 5
mdu7078 0:cc6e3bfecab4 23 0x5F, // 6
mdu7078 0:cc6e3bfecab4 24 0x70, // 7
mdu7078 0:cc6e3bfecab4 25 0x7F, // 8
mdu7078 0:cc6e3bfecab4 26 0x7B, // 9
mdu7078 0:cc6e3bfecab4 27 0x77, // 10 "A"
mdu7078 0:cc6e3bfecab4 28 0x1F, // 11 "B"
mdu7078 0:cc6e3bfecab4 29 0x4E, // 12 "C"
mdu7078 0:cc6e3bfecab4 30 0x3D, // 13 "D"
mdu7078 0:cc6e3bfecab4 31 0x4F, // 14 "E"
mdu7078 0:cc6e3bfecab4 32 0x47, // 15 "F"
mdu7078 0:cc6e3bfecab4 33 0x00, // 16 NO DISPLAY
mdu7078 0:cc6e3bfecab4 34 0x00, // 17 NO DISPLAY
mdu7078 0:cc6e3bfecab4 35 0x00, // 18 NO DISPLAY
mdu7078 0:cc6e3bfecab4 36 0x00, // 19 NO DISPLAY
mdu7078 0:cc6e3bfecab4 37 0x00, // 20 NO DISPLAY
mdu7078 0:cc6e3bfecab4 38 0x00, // 21 NO DISPLAY
mdu7078 0:cc6e3bfecab4 39 0x00, // 22 NO DISPLAY
mdu7078 0:cc6e3bfecab4 40 0x00, // 23 NO DISPLAY
mdu7078 0:cc6e3bfecab4 41 0x00, // 24 NO DISPLAY
mdu7078 0:cc6e3bfecab4 42 0x00, // 25 NO DISPLAY
mdu7078 0:cc6e3bfecab4 43 0x00, // 26 NO DISPLAY
mdu7078 0:cc6e3bfecab4 44 0x00, // 27 NO DISPLAY
mdu7078 0:cc6e3bfecab4 45 0x00, // 28 NO DISPLAY
mdu7078 0:cc6e3bfecab4 46 0x00, // 29 NO DISPLAY
mdu7078 0:cc6e3bfecab4 47 0x00, // 30 NO DISPLAY
mdu7078 0:cc6e3bfecab4 48 0x00, // 31 NO DISPLAY
mdu7078 0:cc6e3bfecab4 49 0x00, // 32 ' '
mdu7078 0:cc6e3bfecab4 50 0x00, // 33 '!' NO DISPLAY
mdu7078 0:cc6e3bfecab4 51 0x22, // 34 '"'
mdu7078 0:cc6e3bfecab4 52 0x00, // 35 '#' NO DISPLAY
mdu7078 0:cc6e3bfecab4 53 0x00, // 36 '$' NO DISPLAY
mdu7078 0:cc6e3bfecab4 54 0x00, // 37 '%' NO DISPLAY
mdu7078 0:cc6e3bfecab4 55 0x00, // 38 '&' NO DISPLAY
mdu7078 0:cc6e3bfecab4 56 0x20, // 39 '''
mdu7078 0:cc6e3bfecab4 57 0x4E, // 40 '('
mdu7078 0:cc6e3bfecab4 58 0x78, // 41 ')'
mdu7078 0:cc6e3bfecab4 59 0x00, // 42 '*' NO DISPLAY
mdu7078 0:cc6e3bfecab4 60 0x00, // 43 '+' NO DISPLAY
mdu7078 0:cc6e3bfecab4 61 0x04, // 44 ','
mdu7078 0:cc6e3bfecab4 62 0x01, // 45 '-'
mdu7078 0:cc6e3bfecab4 63 0x80, // 46 '.' Decimal
mdu7078 0:cc6e3bfecab4 64 0x00, // 47 '/' NO DISPLAY
mdu7078 0:cc6e3bfecab4 65 0x7E, // 48 '0'
mdu7078 0:cc6e3bfecab4 66 0x30, // 49 '1'
mdu7078 0:cc6e3bfecab4 67 0x6D, // 50 '2'
mdu7078 0:cc6e3bfecab4 68 0x79, // 51 '3'
mdu7078 0:cc6e3bfecab4 69 0x33, // 52 '4'
mdu7078 0:cc6e3bfecab4 70 0x5B, // 53 '5'
mdu7078 0:cc6e3bfecab4 71 0x5F, // 54 '6'
mdu7078 0:cc6e3bfecab4 72 0x70, // 55 '7'
mdu7078 0:cc6e3bfecab4 73 0x7F, // 56 '8'
mdu7078 0:cc6e3bfecab4 74 0x7B, // 57 '9'
mdu7078 0:cc6e3bfecab4 75 0x00, // 58 ':' NO DISPLAY
mdu7078 0:cc6e3bfecab4 76 0x00, // 59 ';' NO DISPLAY
mdu7078 0:cc6e3bfecab4 77 0x00, // 60 '<' NO DISPLAY
mdu7078 0:cc6e3bfecab4 78 0x00, // 61 '=' NO DISPLAY
mdu7078 0:cc6e3bfecab4 79 0x00, // 62 '>' NO DISPLAY
mdu7078 0:cc6e3bfecab4 80 0x00, // 63 '?' NO DISPLAY
mdu7078 0:cc6e3bfecab4 81 0x00, // 64 '@' NO DISPLAY
mdu7078 0:cc6e3bfecab4 82 0x77, // 65 'A'
mdu7078 0:cc6e3bfecab4 83 0x1F, // 66 'B'
mdu7078 0:cc6e3bfecab4 84 0x4E, // 67 'C'
mdu7078 0:cc6e3bfecab4 85 0x3D, // 68 'D'
mdu7078 0:cc6e3bfecab4 86 0x4F, // 69 'E'
mdu7078 0:cc6e3bfecab4 87 0x47, // 70 'F'
mdu7078 0:cc6e3bfecab4 88 0x5E, // 71 'G'
mdu7078 0:cc6e3bfecab4 89 0x37, // 72 'H'
mdu7078 0:cc6e3bfecab4 90 0x30, // 73 'I'
mdu7078 0:cc6e3bfecab4 91 0x38, // 74 'J'
mdu7078 0:cc6e3bfecab4 92 0x00, // 75 'K' NO DISPLAY
mdu7078 0:cc6e3bfecab4 93 0x0E, // 76 'L'
mdu7078 0:cc6e3bfecab4 94 0x00, // 77 'M' NO DISPLAY
mdu7078 0:cc6e3bfecab4 95 0x15, // 78 'N'
mdu7078 0:cc6e3bfecab4 96 0x7E, // 79 'O'
mdu7078 0:cc6e3bfecab4 97 0x67, // 80 'P'
mdu7078 0:cc6e3bfecab4 98 0x73, // 81 'Q'
mdu7078 0:cc6e3bfecab4 99 0x05, // 82 'R'
mdu7078 0:cc6e3bfecab4 100 0x5B, // 83 'S'
mdu7078 0:cc6e3bfecab4 101 0x0F, // 84 'T'
mdu7078 0:cc6e3bfecab4 102 0x3E, // 85 'U'
mdu7078 0:cc6e3bfecab4 103 0x00, // 86 'V' NO DISPLAY
mdu7078 0:cc6e3bfecab4 104 0x00, // 87 'W' NO DISPLAY
mdu7078 0:cc6e3bfecab4 105 0x00, // 88 'X' NO DISPLAY
mdu7078 0:cc6e3bfecab4 106 0x3B, // 89 'Y'
mdu7078 0:cc6e3bfecab4 107 0x00, // 90 'Z' NO DISPLAY
mdu7078 0:cc6e3bfecab4 108 0x4E, // 91 '['
mdu7078 0:cc6e3bfecab4 109 0x00, // 92 '\' NO DISPLAY
mdu7078 0:cc6e3bfecab4 110 0x78, // 93 ']'
mdu7078 0:cc6e3bfecab4 111 0x00, // 94 '^' NO DISPLAY
mdu7078 1:0dd75913f211 112 0x08, // 95 '_'
mdu7078 0:cc6e3bfecab4 113 0x02, // 96 '`'
mdu7078 0:cc6e3bfecab4 114 0x77, // 97 'a' SAME AS CAP
mdu7078 0:cc6e3bfecab4 115 0x1F, // 98 'b' SAME AS CAP
mdu7078 0:cc6e3bfecab4 116 0x0D, // 99 'c'
mdu7078 0:cc6e3bfecab4 117 0x3D, // 100 'd' SAME AS CAP
mdu7078 0:cc6e3bfecab4 118 0x6F, // 101 'e'
mdu7078 0:cc6e3bfecab4 119 0x47, // 102 'f' SAME AS CAP
mdu7078 0:cc6e3bfecab4 120 0x5E, // 103 'g' SAME AS CAP
mdu7078 0:cc6e3bfecab4 121 0x17, // 104 'h'
mdu7078 0:cc6e3bfecab4 122 0x10, // 105 'i'
mdu7078 0:cc6e3bfecab4 123 0x38, // 106 'j' SAME AS CAP
mdu7078 0:cc6e3bfecab4 124 0x00, // 107 'k' NO DISPLAY
mdu7078 0:cc6e3bfecab4 125 0x30, // 108 'l'
mdu7078 0:cc6e3bfecab4 126 0x00, // 109 'm' NO DISPLAY
mdu7078 0:cc6e3bfecab4 127 0x15, // 110 'n' SAME AS CAP
mdu7078 0:cc6e3bfecab4 128 0x1D, // 111 'o'
mdu7078 0:cc6e3bfecab4 129 0x67, // 112 'p' SAME AS CAP
mdu7078 0:cc6e3bfecab4 130 0x73, // 113 'q' SAME AS CAP
mdu7078 0:cc6e3bfecab4 131 0x05, // 114 'r' SAME AS CAP
mdu7078 0:cc6e3bfecab4 132 0x5B, // 115 's' SAME AS CAP
mdu7078 0:cc6e3bfecab4 133 0x0F, // 116 't' SAME AS CAP
mdu7078 0:cc6e3bfecab4 134 0x1C, // 117 'u'
mdu7078 0:cc6e3bfecab4 135 0x00, // 118 'b' NO DISPLAY
mdu7078 0:cc6e3bfecab4 136 0x00, // 119 'w' NO DISPLAY
mdu7078 0:cc6e3bfecab4 137 0x00, // 120 'x' NO DISPLAY
mdu7078 0:cc6e3bfecab4 138 0x00, // 121 'y' NO DISPLAY
mdu7078 0:cc6e3bfecab4 139 0x00, // 122 'z' NO DISPLAY
mdu7078 0:cc6e3bfecab4 140 0x00, // 123 '0b' NO DISPLAY
mdu7078 0:cc6e3bfecab4 141 0x00, // 124 '|' NO DISPLAY
mdu7078 0:cc6e3bfecab4 142 0x00, // 125 ',' NO DISPLAY
mdu7078 0:cc6e3bfecab4 143 0x00, // 126 '~' NO DISPLAY
mdu7078 0:cc6e3bfecab4 144 0x00, // 127 'DEL' NO DISPLAY
mdu7078 0:cc6e3bfecab4 145 };
mdu7078 0:cc6e3bfecab4 146
mdu7078 0:cc6e3bfecab4 147 class BubbleDisplay{
mdu7078 0:cc6e3bfecab4 148 public:
mdu7078 0:cc6e3bfecab4 149 /*
mdu7078 0:cc6e3bfecab4 150 * This is the default BubbleDisplay constructor that
mdu7078 0:cc6e3bfecab4 151 * maps the pins in a simple way for the LPC11U24.
mdu7078 0:cc6e3bfecab4 152 */
mdu7078 0:cc6e3bfecab4 153 BubbleDisplay();
mdu7078 0:cc6e3bfecab4 154
mdu7078 0:cc6e3bfecab4 155 /*
mdu7078 0:cc6e3bfecab4 156 * This allows a user to map the pins of the bubble display
mdu7078 0:cc6e3bfecab4 157 * to any possible pin that they desire.
mdu7078 0:cc6e3bfecab4 158 */
mdu7078 0:cc6e3bfecab4 159 BubbleDisplay(PinName m0, PinName m1, PinName m2, PinName m3,
mdu7078 0:cc6e3bfecab4 160 PinName m4, PinName m5, PinName m6, PinName m7,
mdu7078 0:cc6e3bfecab4 161 PinName m8, PinName m9, PinName m10, PinName m11);
mdu7078 0:cc6e3bfecab4 162
mdu7078 0:cc6e3bfecab4 163 /*
mdu7078 0:cc6e3bfecab4 164 * Default destructor
mdu7078 0:cc6e3bfecab4 165 */
mdu7078 0:cc6e3bfecab4 166 ~BubbleDisplay();
mdu7078 0:cc6e3bfecab4 167
mdu7078 0:cc6e3bfecab4 168 /*
mdu7078 0:cc6e3bfecab4 169 * This sets the cycle frequency to a specific value instead of the
mdu7078 0:cc6e3bfecab4 170 * default 10kHz.
mdu7078 0:cc6e3bfecab4 171 */
mdu7078 0:cc6e3bfecab4 172 void setFreq(double freq);
mdu7078 0:cc6e3bfecab4 173
mdu7078 0:cc6e3bfecab4 174 /*
mdu7078 0:cc6e3bfecab4 175 * This writes a sequence of characters from left to right
mdu7078 0:cc6e3bfecab4 176 * to the seven-segment displays.
mdu7078 0:cc6e3bfecab4 177 */
mdu7078 0:cc6e3bfecab4 178 void write(char c1, char c2, char c3, char c4);
mdu7078 0:cc6e3bfecab4 179
mdu7078 0:cc6e3bfecab4 180 /*
mdu7078 0:cc6e3bfecab4 181 * This writes a sequence of characters from left to right
mdu7078 0:cc6e3bfecab4 182 * to the seven-segment displays.
mdu7078 0:cc6e3bfecab4 183 */
mdu7078 0:cc6e3bfecab4 184 void write(char* c);
mdu7078 0:cc6e3bfecab4 185 private:
mdu7078 0:cc6e3bfecab4 186 /*
mdu7078 0:cc6e3bfecab4 187 * This is a constructor helper function
mdu7078 0:cc6e3bfecab4 188 */
mdu7078 0:cc6e3bfecab4 189 void init(PinName m0, PinName m1, PinName m2, PinName m3,
mdu7078 0:cc6e3bfecab4 190 PinName m4, PinName m5, PinName m6, PinName m7,
mdu7078 0:cc6e3bfecab4 191 PinName m8, PinName m9, PinName m10, PinName m11);
mdu7078 0:cc6e3bfecab4 192
mdu7078 0:cc6e3bfecab4 193 /*
mdu7078 0:cc6e3bfecab4 194 * This cycles through the four seven segment displays on the
mdu7078 0:cc6e3bfecab4 195 * bubble display by switching on and off the correct cathodes.
mdu7078 0:cc6e3bfecab4 196 */
mdu7078 0:cc6e3bfecab4 197 void cycle();
mdu7078 0:cc6e3bfecab4 198
mdu7078 0:cc6e3bfecab4 199 /* Private variables */
mdu7078 0:cc6e3bfecab4 200 Ticker _cycler;
mdu7078 0:cc6e3bfecab4 201 double _freq; // The cycle frequency
mdu7078 0:cc6e3bfecab4 202 char _seg; // The current display number
mdu7078 0:cc6e3bfecab4 203 // All of the pins
mdu7078 0:cc6e3bfecab4 204 DigitalOut* _cat1;
mdu7078 0:cc6e3bfecab4 205 DigitalOut* _anE;
mdu7078 0:cc6e3bfecab4 206 DigitalOut* _anC;
mdu7078 0:cc6e3bfecab4 207 DigitalOut* _cat3;
mdu7078 0:cc6e3bfecab4 208 DigitalOut* _anDP;
mdu7078 0:cc6e3bfecab4 209 DigitalOut* _cat4;
mdu7078 0:cc6e3bfecab4 210 DigitalOut* _anG;
mdu7078 0:cc6e3bfecab4 211 DigitalOut* _anD;
mdu7078 0:cc6e3bfecab4 212 DigitalOut* _anF;
mdu7078 0:cc6e3bfecab4 213 DigitalOut* _cat2;
mdu7078 0:cc6e3bfecab4 214 DigitalOut* _anB;
mdu7078 0:cc6e3bfecab4 215 DigitalOut* _anA;
mdu7078 0:cc6e3bfecab4 216 // Segement values
mdu7078 0:cc6e3bfecab4 217 char _chrs[4];
mdu7078 0:cc6e3bfecab4 218 };
mdu7078 0:cc6e3bfecab4 219
mdu7078 0:cc6e3bfecab4 220 #endif