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.
Fork of BubbleDisplay by
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
- Child:
- 3:1d85399fdea3
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 | } |

QDSP-6040