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.

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     init(p21,p22,p23,p24,p25,p26,p36,p35,p34,p33,p30,p29);
00048 }
00049 
00050 /*
00051  * This allows a user to map the pins of the bubble display
00052  * to any possible pin that they desire.
00053  */
00054 BubbleDisplay::BubbleDisplay(PinName m0, PinName m1, PinName m2, PinName m3,
00055               PinName m4, PinName m5, PinName m6, PinName m7,
00056               PinName m8, PinName m9, PinName m10, PinName m11){
00057     init(m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11);
00058 }
00059 
00060 /*
00061  * Default destructor
00062  */
00063 BubbleDisplay::~BubbleDisplay(){
00064     // Clean up all of our pointers
00065     delete _cat1;
00066     delete _anE;
00067     delete _anC;
00068     delete _cat3;
00069     delete _anDP;
00070     delete _cat4;
00071     delete _anG;
00072     delete _anD;
00073     delete _anF;
00074     delete _cat2;
00075     delete _anB;
00076     delete _anA;
00077 }
00078 
00079 /*
00080  * This sets the cycle frequency to a specific value instead of the
00081  * default 10kHz.
00082  */
00083  void BubbleDisplay::setFreq(double freq){
00084      // Detach the cycler and then reattach it with the new frequency
00085      _freq=freq;
00086      _cycler.detach();
00087      _cycler.attach(this,&BubbleDisplay::cycle,1.0/(_freq));
00088 }
00089 
00090 /*
00091  * This cycles through the four seven segment displays on the
00092  * bubble display by switching on and off the correct cathodes.
00093  */
00094 void BubbleDisplay::cycle(){
00095     // Set anodes to current display
00096     (*_anDP) = ((dispTabl[_chrs[_seg]] >> 7) & (0x01));
00097     (*_anA) = ((dispTabl[_chrs[_seg]] >> 6) & (0x01));
00098     (*_anB) = ((dispTabl[_chrs[_seg]] >> 5) & (0x01));
00099     (*_anC) = ((dispTabl[_chrs[_seg]] >> 4) & (0x01));
00100     (*_anD) = ((dispTabl[_chrs[_seg]] >> 3) & (0x01));
00101     (*_anE) = ((dispTabl[_chrs[_seg]] >> 2) & (0x01));
00102     (*_anF) = ((dispTabl[_chrs[_seg]] >> 1) & (0x01));
00103     (*_anG) = ((dispTabl[_chrs[_seg]] >> 0) & (0x01));
00104     
00105     switch(_seg){
00106         case 0:
00107             // Switch appropriate cathodes
00108             (*_cat1) = 0;
00109             (*_cat2) = 1;
00110             (*_cat3) = 1;
00111             (*_cat4) = 1;
00112             _seg = 1;
00113             break;
00114         case 1:
00115             // Switch appropriate cathodes
00116             (*_cat1) = 1;
00117             (*_cat2) = 0;
00118             (*_cat3) = 1;
00119             (*_cat4) = 1;
00120             _seg = 2;
00121             break;
00122         case 2:
00123             // Switch appropriate cathodes
00124             (*_cat1) = 1;
00125             (*_cat2) = 1;
00126             (*_cat3) = 0;
00127             (*_cat4) = 1;
00128             _seg = 3;
00129             break;
00130         default:
00131             // Switch appropriate cathodes
00132             (*_cat1) = 1;
00133             (*_cat2) = 1;
00134             (*_cat3) = 1;
00135             (*_cat4) = 0;
00136             _seg = 0;
00137             break;
00138     }
00139 }
00140 
00141 /*
00142  * This writes a sequence of characters from left to right
00143  * to the seven-segment displays.
00144  */
00145 void BubbleDisplay::write(char c1, char c2, char c3, char c4){
00146     _chrs[0] = c1;
00147     _chrs[1] = c2;
00148     _chrs[2] = c3;
00149     _chrs[3] = c4;
00150 }
00151 
00152 /*
00153  * This writes a sequence of characters from left to right
00154  * to the seven-segment displays.
00155  */
00156 void BubbleDisplay::write(char* c){
00157     _chrs[0] = c[0];
00158     _chrs[1] = c[1];
00159     _chrs[2] = c[2];
00160     _chrs[3] = c[3];
00161 }