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:
MACRUM
Date:
Tue Mar 29 07:51:47 2016 +0000
Revision:
3:1d85399fdea3
Parent:
2:3604f34e944b
Add a write(uint16_t) method

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(){
MACRUM 3:1d85399fdea3 47 #if defined(TARGET_LPC1768) || defined(TARGET_LPC11U24)
mdu7078 0:cc6e3bfecab4 48 init(p21,p22,p23,p24,p25,p26,p36,p35,p34,p33,p30,p29);
MACRUM 3:1d85399fdea3 49 #endif
mdu7078 0:cc6e3bfecab4 50 }
mdu7078 0:cc6e3bfecab4 51
mdu7078 0:cc6e3bfecab4 52 /*
mdu7078 0:cc6e3bfecab4 53 * This allows a user to map the pins of the bubble display
mdu7078 0:cc6e3bfecab4 54 * to any possible pin that they desire.
mdu7078 0:cc6e3bfecab4 55 */
mdu7078 0:cc6e3bfecab4 56 BubbleDisplay::BubbleDisplay(PinName m0, PinName m1, PinName m2, PinName m3,
mdu7078 0:cc6e3bfecab4 57 PinName m4, PinName m5, PinName m6, PinName m7,
mdu7078 0:cc6e3bfecab4 58 PinName m8, PinName m9, PinName m10, PinName m11){
mdu7078 0:cc6e3bfecab4 59 init(m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11);
mdu7078 0:cc6e3bfecab4 60 }
mdu7078 0:cc6e3bfecab4 61
mdu7078 0:cc6e3bfecab4 62 /*
mdu7078 0:cc6e3bfecab4 63 * Default destructor
mdu7078 0:cc6e3bfecab4 64 */
mdu7078 0:cc6e3bfecab4 65 BubbleDisplay::~BubbleDisplay(){
mdu7078 0:cc6e3bfecab4 66 // Clean up all of our pointers
mdu7078 0:cc6e3bfecab4 67 delete _cat1;
mdu7078 0:cc6e3bfecab4 68 delete _anE;
mdu7078 0:cc6e3bfecab4 69 delete _anC;
mdu7078 0:cc6e3bfecab4 70 delete _cat3;
mdu7078 0:cc6e3bfecab4 71 delete _anDP;
mdu7078 0:cc6e3bfecab4 72 delete _cat4;
mdu7078 0:cc6e3bfecab4 73 delete _anG;
mdu7078 0:cc6e3bfecab4 74 delete _anD;
mdu7078 0:cc6e3bfecab4 75 delete _anF;
mdu7078 0:cc6e3bfecab4 76 delete _cat2;
mdu7078 0:cc6e3bfecab4 77 delete _anB;
mdu7078 0:cc6e3bfecab4 78 delete _anA;
mdu7078 0:cc6e3bfecab4 79 }
mdu7078 0:cc6e3bfecab4 80
mdu7078 0:cc6e3bfecab4 81 /*
mdu7078 0:cc6e3bfecab4 82 * This sets the cycle frequency to a specific value instead of the
mdu7078 0:cc6e3bfecab4 83 * default 10kHz.
mdu7078 0:cc6e3bfecab4 84 */
mdu7078 0:cc6e3bfecab4 85 void BubbleDisplay::setFreq(double freq){
mdu7078 0:cc6e3bfecab4 86 // Detach the cycler and then reattach it with the new frequency
mdu7078 0:cc6e3bfecab4 87 _freq=freq;
mdu7078 0:cc6e3bfecab4 88 _cycler.detach();
mdu7078 0:cc6e3bfecab4 89 _cycler.attach(this,&BubbleDisplay::cycle,1.0/(_freq));
mdu7078 0:cc6e3bfecab4 90 }
mdu7078 0:cc6e3bfecab4 91
mdu7078 0:cc6e3bfecab4 92 /*
mdu7078 0:cc6e3bfecab4 93 * This cycles through the four seven segment displays on the
mdu7078 0:cc6e3bfecab4 94 * bubble display by switching on and off the correct cathodes.
mdu7078 0:cc6e3bfecab4 95 */
mdu7078 0:cc6e3bfecab4 96 void BubbleDisplay::cycle(){
mdu7078 0:cc6e3bfecab4 97 // Set anodes to current display
mdu7078 0:cc6e3bfecab4 98 (*_anDP) = ((dispTabl[_chrs[_seg]] >> 7) & (0x01));
mdu7078 0:cc6e3bfecab4 99 (*_anA) = ((dispTabl[_chrs[_seg]] >> 6) & (0x01));
mdu7078 0:cc6e3bfecab4 100 (*_anB) = ((dispTabl[_chrs[_seg]] >> 5) & (0x01));
mdu7078 0:cc6e3bfecab4 101 (*_anC) = ((dispTabl[_chrs[_seg]] >> 4) & (0x01));
mdu7078 0:cc6e3bfecab4 102 (*_anD) = ((dispTabl[_chrs[_seg]] >> 3) & (0x01));
mdu7078 0:cc6e3bfecab4 103 (*_anE) = ((dispTabl[_chrs[_seg]] >> 2) & (0x01));
mdu7078 0:cc6e3bfecab4 104 (*_anF) = ((dispTabl[_chrs[_seg]] >> 1) & (0x01));
mdu7078 0:cc6e3bfecab4 105 (*_anG) = ((dispTabl[_chrs[_seg]] >> 0) & (0x01));
mdu7078 0:cc6e3bfecab4 106
mdu7078 0:cc6e3bfecab4 107 switch(_seg){
mdu7078 0:cc6e3bfecab4 108 case 0:
mdu7078 0:cc6e3bfecab4 109 // Switch appropriate cathodes
mdu7078 0:cc6e3bfecab4 110 (*_cat1) = 0;
mdu7078 0:cc6e3bfecab4 111 (*_cat2) = 1;
mdu7078 0:cc6e3bfecab4 112 (*_cat3) = 1;
mdu7078 0:cc6e3bfecab4 113 (*_cat4) = 1;
mdu7078 0:cc6e3bfecab4 114 _seg = 1;
mdu7078 0:cc6e3bfecab4 115 break;
mdu7078 0:cc6e3bfecab4 116 case 1:
mdu7078 0:cc6e3bfecab4 117 // Switch appropriate cathodes
mdu7078 0:cc6e3bfecab4 118 (*_cat1) = 1;
mdu7078 0:cc6e3bfecab4 119 (*_cat2) = 0;
mdu7078 0:cc6e3bfecab4 120 (*_cat3) = 1;
mdu7078 0:cc6e3bfecab4 121 (*_cat4) = 1;
mdu7078 0:cc6e3bfecab4 122 _seg = 2;
mdu7078 0:cc6e3bfecab4 123 break;
mdu7078 0:cc6e3bfecab4 124 case 2:
mdu7078 0:cc6e3bfecab4 125 // Switch appropriate cathodes
mdu7078 0:cc6e3bfecab4 126 (*_cat1) = 1;
mdu7078 0:cc6e3bfecab4 127 (*_cat2) = 1;
mdu7078 0:cc6e3bfecab4 128 (*_cat3) = 0;
mdu7078 0:cc6e3bfecab4 129 (*_cat4) = 1;
mdu7078 0:cc6e3bfecab4 130 _seg = 3;
mdu7078 0:cc6e3bfecab4 131 break;
mdu7078 0:cc6e3bfecab4 132 default:
mdu7078 0:cc6e3bfecab4 133 // Switch appropriate cathodes
mdu7078 0:cc6e3bfecab4 134 (*_cat1) = 1;
mdu7078 0:cc6e3bfecab4 135 (*_cat2) = 1;
mdu7078 0:cc6e3bfecab4 136 (*_cat3) = 1;
mdu7078 0:cc6e3bfecab4 137 (*_cat4) = 0;
mdu7078 0:cc6e3bfecab4 138 _seg = 0;
mdu7078 0:cc6e3bfecab4 139 break;
mdu7078 0:cc6e3bfecab4 140 }
mdu7078 0:cc6e3bfecab4 141 }
mdu7078 0:cc6e3bfecab4 142
mdu7078 0:cc6e3bfecab4 143 /*
mdu7078 0:cc6e3bfecab4 144 * This writes a sequence of characters from left to right
mdu7078 0:cc6e3bfecab4 145 * to the seven-segment displays.
mdu7078 0:cc6e3bfecab4 146 */
mdu7078 0:cc6e3bfecab4 147 void BubbleDisplay::write(char c1, char c2, char c3, char c4){
mdu7078 0:cc6e3bfecab4 148 _chrs[0] = c1;
mdu7078 0:cc6e3bfecab4 149 _chrs[1] = c2;
mdu7078 0:cc6e3bfecab4 150 _chrs[2] = c3;
mdu7078 0:cc6e3bfecab4 151 _chrs[3] = c4;
mdu7078 0:cc6e3bfecab4 152 }
mdu7078 0:cc6e3bfecab4 153
mdu7078 0:cc6e3bfecab4 154 /*
mdu7078 0:cc6e3bfecab4 155 * This writes a sequence of characters from left to right
mdu7078 0:cc6e3bfecab4 156 * to the seven-segment displays.
mdu7078 0:cc6e3bfecab4 157 */
mdu7078 0:cc6e3bfecab4 158 void BubbleDisplay::write(char* c){
mdu7078 0:cc6e3bfecab4 159 _chrs[0] = c[0];
mdu7078 0:cc6e3bfecab4 160 _chrs[1] = c[1];
mdu7078 0:cc6e3bfecab4 161 _chrs[2] = c[2];
mdu7078 0:cc6e3bfecab4 162 _chrs[3] = c[3];
MACRUM 3:1d85399fdea3 163 }
MACRUM 3:1d85399fdea3 164
MACRUM 3:1d85399fdea3 165 /*
MACRUM 3:1d85399fdea3 166 * This writes a sequence of integer number
MACRUM 3:1d85399fdea3 167 * to the seven-segment displays.
MACRUM 3:1d85399fdea3 168 */
MACRUM 3:1d85399fdea3 169 void BubbleDisplay::write(uint16_t num){
MACRUM 3:1d85399fdea3 170 num %= 10000;
MACRUM 3:1d85399fdea3 171 _chrs[0] = (num/1000);
MACRUM 3:1d85399fdea3 172 _chrs[1] = ((num/100)%10);
MACRUM 3:1d85399fdea3 173 _chrs[2] = (((num/10)%100)%10);
MACRUM 3:1d85399fdea3 174 _chrs[3] = (((num%1000)%100)%10);
MACRUM 3:1d85399fdea3 175 }