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.

Dependents:   QDSP-6064-hello

Fork of BubbleDisplay by Michael Dushkoff

Committer:
mdu7078
Date:
Thu Mar 26 07:51:53 2015 +0000
Revision:
1:0dd75913f211
Parent:
0:cc6e3bfecab4
Child:
2:3604f34e944b
Fixed the '_' character which was displaying as a '.' instead (0x08 vs 0x80).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mdu7078 0:cc6e3bfecab4 1 /* * * * * * * * * * * * * * * * * * * * * * * * * * *
mdu7078 0:cc6e3bfecab4 2 * This drives the popular QDSP6064 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 #include "bubble.h"
mdu7078 0:cc6e3bfecab4 7
mdu7078 0:cc6e3bfecab4 8 /*
mdu7078 0:cc6e3bfecab4 9 *
mdu7078 0:cc6e3bfecab4 10 */
mdu7078 0:cc6e3bfecab4 11 void BubbleDisplay::init(PinName m0, PinName m1, PinName m2, PinName m3,
mdu7078 0:cc6e3bfecab4 12 PinName m4, PinName m5, PinName m6, PinName m7,
mdu7078 0:cc6e3bfecab4 13 PinName m8, PinName m9, PinName m10, PinName m11){
mdu7078 0:cc6e3bfecab4 14 // Set up pins
mdu7078 0:cc6e3bfecab4 15 _cat1 = new DigitalOut(m0);
mdu7078 0:cc6e3bfecab4 16 _anE = new DigitalOut(m1);
mdu7078 0:cc6e3bfecab4 17 _anC = new DigitalOut(m2);
mdu7078 0:cc6e3bfecab4 18 _cat3 = new DigitalOut(m3);
mdu7078 0:cc6e3bfecab4 19 _anDP = new DigitalOut(m4);
mdu7078 0:cc6e3bfecab4 20 _cat4 = new DigitalOut(m5);
mdu7078 0:cc6e3bfecab4 21 _anG = new DigitalOut(m6);
mdu7078 0:cc6e3bfecab4 22 _anD = new DigitalOut(m7);
mdu7078 0:cc6e3bfecab4 23 _anF = new DigitalOut(m8);
mdu7078 0:cc6e3bfecab4 24 _cat2 = new DigitalOut(m9);
mdu7078 0:cc6e3bfecab4 25 _anB = new DigitalOut(m10);
mdu7078 0:cc6e3bfecab4 26 _anA = new DigitalOut(m11);
mdu7078 0:cc6e3bfecab4 27
mdu7078 0:cc6e3bfecab4 28 // Initialize the Ticker
mdu7078 0:cc6e3bfecab4 29 _freq = DEF_DISPL_FREQ;
mdu7078 0:cc6e3bfecab4 30 _cycler.attach(this,&BubbleDisplay::cycle,1.0/(_freq));
mdu7078 0:cc6e3bfecab4 31
mdu7078 0:cc6e3bfecab4 32 // Set the initial display number
mdu7078 0:cc6e3bfecab4 33 _seg = 0;
mdu7078 0:cc6e3bfecab4 34
mdu7078 0:cc6e3bfecab4 35 // Set the initial character values
mdu7078 1:0dd75913f211 36 _chrs[0] = dispTabl[' '];
mdu7078 1:0dd75913f211 37 _chrs[1] = dispTabl[' '];
mdu7078 1:0dd75913f211 38 _chrs[2] = dispTabl[' '];
mdu7078 1:0dd75913f211 39 _chrs[3] = dispTabl[' '];
mdu7078 0:cc6e3bfecab4 40 }
mdu7078 0:cc6e3bfecab4 41
mdu7078 0:cc6e3bfecab4 42 /*
mdu7078 0:cc6e3bfecab4 43 * This is the default BubbleDisplay constructor that
mdu7078 0:cc6e3bfecab4 44 * maps the pins in a simple way for the LPC11U24.
mdu7078 0:cc6e3bfecab4 45 */
mdu7078 0:cc6e3bfecab4 46 BubbleDisplay::BubbleDisplay(){
mdu7078 0:cc6e3bfecab4 47 init(p21,p22,p23,p24,p25,p26,p36,p35,p34,p33,p30,p29);
mdu7078 0:cc6e3bfecab4 48 }
mdu7078 0:cc6e3bfecab4 49
mdu7078 0:cc6e3bfecab4 50 /*
mdu7078 0:cc6e3bfecab4 51 * This allows a user to map the pins of the bubble display
mdu7078 0:cc6e3bfecab4 52 * to any possible pin that they desire.
mdu7078 0:cc6e3bfecab4 53 */
mdu7078 0:cc6e3bfecab4 54 BubbleDisplay::BubbleDisplay(PinName m0, PinName m1, PinName m2, PinName m3,
mdu7078 0:cc6e3bfecab4 55 PinName m4, PinName m5, PinName m6, PinName m7,
mdu7078 0:cc6e3bfecab4 56 PinName m8, PinName m9, PinName m10, PinName m11){
mdu7078 0:cc6e3bfecab4 57 init(m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11);
mdu7078 0:cc6e3bfecab4 58 }
mdu7078 0:cc6e3bfecab4 59
mdu7078 0:cc6e3bfecab4 60 /*
mdu7078 0:cc6e3bfecab4 61 * Default destructor
mdu7078 0:cc6e3bfecab4 62 */
mdu7078 0:cc6e3bfecab4 63 BubbleDisplay::~BubbleDisplay(){
mdu7078 0:cc6e3bfecab4 64 // Clean up all of our pointers
mdu7078 0:cc6e3bfecab4 65 delete _cat1;
mdu7078 0:cc6e3bfecab4 66 delete _anE;
mdu7078 0:cc6e3bfecab4 67 delete _anC;
mdu7078 0:cc6e3bfecab4 68 delete _cat3;
mdu7078 0:cc6e3bfecab4 69 delete _anDP;
mdu7078 0:cc6e3bfecab4 70 delete _cat4;
mdu7078 0:cc6e3bfecab4 71 delete _anG;
mdu7078 0:cc6e3bfecab4 72 delete _anD;
mdu7078 0:cc6e3bfecab4 73 delete _anF;
mdu7078 0:cc6e3bfecab4 74 delete _cat2;
mdu7078 0:cc6e3bfecab4 75 delete _anB;
mdu7078 0:cc6e3bfecab4 76 delete _anA;
mdu7078 0:cc6e3bfecab4 77 }
mdu7078 0:cc6e3bfecab4 78
mdu7078 0:cc6e3bfecab4 79 /*
mdu7078 0:cc6e3bfecab4 80 * This sets the cycle frequency to a specific value instead of the
mdu7078 0:cc6e3bfecab4 81 * default 10kHz.
mdu7078 0:cc6e3bfecab4 82 */
mdu7078 0:cc6e3bfecab4 83 void BubbleDisplay::setFreq(double freq){
mdu7078 0:cc6e3bfecab4 84 // Detach the cycler and then reattach it with the new frequency
mdu7078 0:cc6e3bfecab4 85 _freq=freq;
mdu7078 0:cc6e3bfecab4 86 _cycler.detach();
mdu7078 0:cc6e3bfecab4 87 _cycler.attach(this,&BubbleDisplay::cycle,1.0/(_freq));
mdu7078 0:cc6e3bfecab4 88 }
mdu7078 0:cc6e3bfecab4 89
mdu7078 0:cc6e3bfecab4 90 /*
mdu7078 0:cc6e3bfecab4 91 * This cycles through the four seven segment displays on the
mdu7078 0:cc6e3bfecab4 92 * bubble display by switching on and off the correct cathodes.
mdu7078 0:cc6e3bfecab4 93 */
mdu7078 0:cc6e3bfecab4 94 void BubbleDisplay::cycle(){
mdu7078 0:cc6e3bfecab4 95 // Set anodes to current display
mdu7078 0:cc6e3bfecab4 96 (*_anDP) = ((dispTabl[_chrs[_seg]] >> 7) & (0x01));
mdu7078 0:cc6e3bfecab4 97 (*_anA) = ((dispTabl[_chrs[_seg]] >> 6) & (0x01));
mdu7078 0:cc6e3bfecab4 98 (*_anB) = ((dispTabl[_chrs[_seg]] >> 5) & (0x01));
mdu7078 0:cc6e3bfecab4 99 (*_anC) = ((dispTabl[_chrs[_seg]] >> 4) & (0x01));
mdu7078 0:cc6e3bfecab4 100 (*_anD) = ((dispTabl[_chrs[_seg]] >> 3) & (0x01));
mdu7078 0:cc6e3bfecab4 101 (*_anE) = ((dispTabl[_chrs[_seg]] >> 2) & (0x01));
mdu7078 0:cc6e3bfecab4 102 (*_anF) = ((dispTabl[_chrs[_seg]] >> 1) & (0x01));
mdu7078 0:cc6e3bfecab4 103 (*_anG) = ((dispTabl[_chrs[_seg]] >> 0) & (0x01));
mdu7078 0:cc6e3bfecab4 104
mdu7078 0:cc6e3bfecab4 105 switch(_seg){
mdu7078 0:cc6e3bfecab4 106 case 0:
mdu7078 0:cc6e3bfecab4 107 // Switch appropriate cathodes
mdu7078 0:cc6e3bfecab4 108 (*_cat1) = 0;
mdu7078 0:cc6e3bfecab4 109 (*_cat2) = 1;
mdu7078 0:cc6e3bfecab4 110 (*_cat3) = 1;
mdu7078 0:cc6e3bfecab4 111 (*_cat4) = 1;
mdu7078 0:cc6e3bfecab4 112 _seg = 1;
mdu7078 0:cc6e3bfecab4 113 break;
mdu7078 0:cc6e3bfecab4 114 case 1:
mdu7078 0:cc6e3bfecab4 115 // Switch appropriate cathodes
mdu7078 0:cc6e3bfecab4 116 (*_cat1) = 1;
mdu7078 0:cc6e3bfecab4 117 (*_cat2) = 0;
mdu7078 0:cc6e3bfecab4 118 (*_cat3) = 1;
mdu7078 0:cc6e3bfecab4 119 (*_cat4) = 1;
mdu7078 0:cc6e3bfecab4 120 _seg = 2;
mdu7078 0:cc6e3bfecab4 121 break;
mdu7078 0:cc6e3bfecab4 122 case 2:
mdu7078 0:cc6e3bfecab4 123 // Switch appropriate cathodes
mdu7078 0:cc6e3bfecab4 124 (*_cat1) = 1;
mdu7078 0:cc6e3bfecab4 125 (*_cat2) = 1;
mdu7078 0:cc6e3bfecab4 126 (*_cat3) = 0;
mdu7078 0:cc6e3bfecab4 127 (*_cat4) = 1;
mdu7078 0:cc6e3bfecab4 128 _seg = 3;
mdu7078 0:cc6e3bfecab4 129 break;
mdu7078 0:cc6e3bfecab4 130 default:
mdu7078 0:cc6e3bfecab4 131 // Switch appropriate cathodes
mdu7078 0:cc6e3bfecab4 132 (*_cat1) = 1;
mdu7078 0:cc6e3bfecab4 133 (*_cat2) = 1;
mdu7078 0:cc6e3bfecab4 134 (*_cat3) = 1;
mdu7078 0:cc6e3bfecab4 135 (*_cat4) = 0;
mdu7078 0:cc6e3bfecab4 136 _seg = 0;
mdu7078 0:cc6e3bfecab4 137 break;
mdu7078 0:cc6e3bfecab4 138 }
mdu7078 0:cc6e3bfecab4 139 }
mdu7078 0:cc6e3bfecab4 140
mdu7078 0:cc6e3bfecab4 141 /*
mdu7078 0:cc6e3bfecab4 142 * This writes a sequence of characters from left to right
mdu7078 0:cc6e3bfecab4 143 * to the seven-segment displays.
mdu7078 0:cc6e3bfecab4 144 */
mdu7078 0:cc6e3bfecab4 145 void BubbleDisplay::write(char c1, char c2, char c3, char c4){
mdu7078 0:cc6e3bfecab4 146 _chrs[0] = c1;
mdu7078 0:cc6e3bfecab4 147 _chrs[1] = c2;
mdu7078 0:cc6e3bfecab4 148 _chrs[2] = c3;
mdu7078 0:cc6e3bfecab4 149 _chrs[3] = c4;
mdu7078 0:cc6e3bfecab4 150 }
mdu7078 0:cc6e3bfecab4 151
mdu7078 0:cc6e3bfecab4 152 /*
mdu7078 0:cc6e3bfecab4 153 * This writes a sequence of characters from left to right
mdu7078 0:cc6e3bfecab4 154 * to the seven-segment displays.
mdu7078 0:cc6e3bfecab4 155 */
mdu7078 0:cc6e3bfecab4 156 void BubbleDisplay::write(char* c){
mdu7078 0:cc6e3bfecab4 157 _chrs[0] = c[0];
mdu7078 0:cc6e3bfecab4 158 _chrs[1] = c[1];
mdu7078 0:cc6e3bfecab4 159 _chrs[2] = c[2];
mdu7078 0:cc6e3bfecab4 160 _chrs[3] = c[3];
mdu7078 0:cc6e3bfecab4 161 }