Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
bubble.cpp@2:3604f34e944b, 2015-03-26 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |