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.
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 }
Generated on Tue Jul 19 2022 05:17:08 by
1.7.2