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 #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 // Set the initial display number
mdu7078 0:cc6e3bfecab4 29 _seg = 0;
mdu7078 0:cc6e3bfecab4 30
mdu7078 0:cc6e3bfecab4 31 // Set the initial character values
mdu7078 2:3604f34e944b 32 _chrs[0] = ' ';
mdu7078 2:3604f34e944b 33 _chrs[1] = ' ';
mdu7078 2:3604f34e944b 34 _chrs[2] = ' ';
mdu7078 2:3604f34e944b 35 _chrs[3] = ' ';
mdu7078 2:3604f34e944b 36
mdu7078 2:3604f34e944b 37 // Initialize the Ticker
mdu7078 2:3604f34e944b 38 _freq = DEF_DISPL_FREQ;
mdu7078 2:3604f34e944b 39 _cycler.attach(this,&BubbleDisplay::cycle,1.0/(_freq));
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 }