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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers bubble.cpp Source File

bubble.cpp

00001 /* * * * * * * * * * * * * * * * * * * * * * * * * * *
00002  * This drives the popular QDSP-6064 bubble display. *
00003  *                                                   *
00004  * Created by: Michael Dushkoff (mad1841@rit.edu)    *
00005  * * * * * * * * * * * * * * * * * * * * * * * * * * */
00006 #include "bubble.h"
00007 
00008 /*
00009  * 
00010  */
00011 void BubbleDisplay::init(PinName m0, PinName m1, PinName m2, PinName m3,
00012                   PinName m4, PinName m5, PinName m6, PinName m7,
00013                   PinName m8, PinName m9, PinName m10, PinName m11){
00014     // Set up pins
00015     _cat1 = new DigitalOut(m0);
00016     _anE = new DigitalOut(m1);
00017     _anC = new DigitalOut(m2);
00018     _cat3 = new DigitalOut(m3);
00019     _anDP = new DigitalOut(m4);
00020     _cat4 = new DigitalOut(m5);
00021     _anG = new DigitalOut(m6);
00022     _anD = new DigitalOut(m7);
00023     _anF = new DigitalOut(m8);
00024     _cat2 = new DigitalOut(m9);
00025     _anB = new DigitalOut(m10);
00026     _anA = new DigitalOut(m11);
00027     
00028     // Set the initial display number
00029     _seg = 0;
00030     
00031     // Set the initial character values
00032     _chrs[0] = ' ';
00033     _chrs[1] = ' ';
00034     _chrs[2] = ' ';
00035     _chrs[3] = ' ';
00036     
00037     // Initialize the Ticker
00038     _freq = DEF_DISPL_FREQ;
00039     _cycler.attach(this,&BubbleDisplay::cycle,1.0/(_freq));
00040 }
00041 
00042 /*
00043  * This is the default BubbleDisplay constructor that
00044  * maps the pins in a simple way for the LPC11U24.
00045  */ 
00046 BubbleDisplay::BubbleDisplay(){
00047 #if defined(TARGET_LPC1768) || defined(TARGET_LPC11U24)
00048     init(p21,p22,p23,p24,p25,p26,p36,p35,p34,p33,p30,p29);
00049 #endif
00050 }
00051 
00052 /*
00053  * This allows a user to map the pins of the bubble display
00054  * to any possible pin that they desire.
00055  */
00056 BubbleDisplay::BubbleDisplay(PinName m0, PinName m1, PinName m2, PinName m3,
00057               PinName m4, PinName m5, PinName m6, PinName m7,
00058               PinName m8, PinName m9, PinName m10, PinName m11){
00059     init(m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11);
00060 }
00061 
00062 /*
00063  * Default destructor
00064  */
00065 BubbleDisplay::~BubbleDisplay(){
00066     // Clean up all of our pointers
00067     delete _cat1;
00068     delete _anE;
00069     delete _anC;
00070     delete _cat3;
00071     delete _anDP;
00072     delete _cat4;
00073     delete _anG;
00074     delete _anD;
00075     delete _anF;
00076     delete _cat2;
00077     delete _anB;
00078     delete _anA;
00079 }
00080 
00081 /*
00082  * This sets the cycle frequency to a specific value instead of the
00083  * default 10kHz.
00084  */
00085  void BubbleDisplay::setFreq(double freq){
00086      // Detach the cycler and then reattach it with the new frequency
00087      _freq=freq;
00088      _cycler.detach();
00089      _cycler.attach(this,&BubbleDisplay::cycle,1.0/(_freq));
00090 }
00091 
00092 /*
00093  * This cycles through the four seven segment displays on the
00094  * bubble display by switching on and off the correct cathodes.
00095  */
00096 void BubbleDisplay::cycle(){
00097     // Set anodes to current display
00098     (*_anDP) = ((dispTabl[_chrs[_seg]] >> 7) & (0x01));
00099     (*_anA) = ((dispTabl[_chrs[_seg]] >> 6) & (0x01));
00100     (*_anB) = ((dispTabl[_chrs[_seg]] >> 5) & (0x01));
00101     (*_anC) = ((dispTabl[_chrs[_seg]] >> 4) & (0x01));
00102     (*_anD) = ((dispTabl[_chrs[_seg]] >> 3) & (0x01));
00103     (*_anE) = ((dispTabl[_chrs[_seg]] >> 2) & (0x01));
00104     (*_anF) = ((dispTabl[_chrs[_seg]] >> 1) & (0x01));
00105     (*_anG) = ((dispTabl[_chrs[_seg]] >> 0) & (0x01));
00106     
00107     switch(_seg){
00108         case 0:
00109             // Switch appropriate cathodes
00110             (*_cat1) = 0;
00111             (*_cat2) = 1;
00112             (*_cat3) = 1;
00113             (*_cat4) = 1;
00114             _seg = 1;
00115             break;
00116         case 1:
00117             // Switch appropriate cathodes
00118             (*_cat1) = 1;
00119             (*_cat2) = 0;
00120             (*_cat3) = 1;
00121             (*_cat4) = 1;
00122             _seg = 2;
00123             break;
00124         case 2:
00125             // Switch appropriate cathodes
00126             (*_cat1) = 1;
00127             (*_cat2) = 1;
00128             (*_cat3) = 0;
00129             (*_cat4) = 1;
00130             _seg = 3;
00131             break;
00132         default:
00133             // Switch appropriate cathodes
00134             (*_cat1) = 1;
00135             (*_cat2) = 1;
00136             (*_cat3) = 1;
00137             (*_cat4) = 0;
00138             _seg = 0;
00139             break;
00140     }
00141 }
00142 
00143 /*
00144  * This writes a sequence of characters from left to right
00145  * to the seven-segment displays.
00146  */
00147 void BubbleDisplay::write(char c1, char c2, char c3, char c4){
00148     _chrs[0] = c1;
00149     _chrs[1] = c2;
00150     _chrs[2] = c3;
00151     _chrs[3] = c4;
00152 }
00153 
00154 /*
00155  * This writes a sequence of characters from left to right
00156  * to the seven-segment displays.
00157  */
00158 void BubbleDisplay::write(char* c){
00159     _chrs[0] = c[0];
00160     _chrs[1] = c[1];
00161     _chrs[2] = c[2];
00162     _chrs[3] = c[3];
00163 }
00164 
00165 /*
00166  * This writes a sequence of integer number
00167  * to the seven-segment displays.
00168  */
00169 void BubbleDisplay::write(uint16_t num){
00170     num %= 10000;
00171     _chrs[0] = (num/1000);
00172     _chrs[1] = ((num/100)%10);
00173     _chrs[2] = (((num/10)%100)%10);
00174     _chrs[3] = (((num%1000)%100)%10);
00175 }