Conversions for the LCD display in FRDM-KL46Z
Dependents: eem202a_display eem202a_resolutedreamer_1
convert.cpp@2:9467805cb02b, 2014-04-19 (annotated)
- Committer:
- Waldek
- Date:
- Sat Apr 19 22:07:19 2014 +0000
- Revision:
- 2:9467805cb02b
- Parent:
- 1:cf83568dc17a
- Child:
- 3:551fe797c723
-
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Waldek | 0:ca69bce3284f | 1 | #include "convert.h" |
Waldek | 0:ca69bce3284f | 2 | |
Waldek | 2:9467805cb02b | 3 | /*------------------------------------------------------------- |
Waldek | 2:9467805cb02b | 4 | |
Waldek | 2:9467805cb02b | 5 | (c) W.D. 2014 |
Waldek | 2:9467805cb02b | 6 | |
Waldek | 2:9467805cb02b | 7 | -------------------------------------------------------------*/ |
Waldek | 2:9467805cb02b | 8 | |
Waldek | 1:cf83568dc17a | 9 | Convert::Convert() |
Waldek | 0:ca69bce3284f | 10 | { |
Waldek | 0:ca69bce3284f | 11 | this->prepare(); |
Waldek | 0:ca69bce3284f | 12 | |
Waldek | 0:ca69bce3284f | 13 | return; |
Waldek | 0:ca69bce3284f | 14 | } |
Waldek | 0:ca69bce3284f | 15 | |
Waldek | 1:cf83568dc17a | 16 | void Convert::prepare(void) |
Waldek | 0:ca69bce3284f | 17 | { |
Waldek | 0:ca69bce3284f | 18 | this->blink(-1); |
Waldek | 0:ca69bce3284f | 19 | this->clear(); |
Waldek | 0:ca69bce3284f | 20 | this->DP1(0); |
Waldek | 0:ca69bce3284f | 21 | this->DP2(0); |
Waldek | 0:ca69bce3284f | 22 | this->DP3(0); |
Waldek | 0:ca69bce3284f | 23 | this->Colon(0); |
Waldek | 0:ca69bce3284f | 24 | this->Home(); |
Waldek | 0:ca69bce3284f | 25 | |
Waldek | 0:ca69bce3284f | 26 | return; |
Waldek | 0:ca69bce3284f | 27 | } |
Waldek | 0:ca69bce3284f | 28 | |
Waldek | 2:9467805cb02b | 29 | void Convert::display_digits(unsigned int number, bool negate) |
Waldek | 0:ca69bce3284f | 30 | { |
Waldek | 0:ca69bce3284f | 31 | register unsigned short int c1 = ((unsigned int) number / 1000); |
Waldek | 0:ca69bce3284f | 32 | register unsigned short int c2 = ((unsigned int) number / 100) - (c1 * 10); |
Waldek | 0:ca69bce3284f | 33 | register unsigned short int c3 = ((unsigned int) number / 10) - ((c1 *100) + (c2 *10)); |
Waldek | 0:ca69bce3284f | 34 | register unsigned short int c4 = number - ((c1 *1000) + (c2 *100) + (c3 *10)); |
Waldek | 0:ca69bce3284f | 35 | |
Waldek | 0:ca69bce3284f | 36 | this->blink(-1); |
Waldek | 0:ca69bce3284f | 37 | this->Home(); |
Waldek | 0:ca69bce3284f | 38 | if (negate) |
Waldek | 0:ca69bce3284f | 39 | this->putc('-'); |
Waldek | 0:ca69bce3284f | 40 | else |
Waldek | 0:ca69bce3284f | 41 | this->putc('0'+c1); |
Waldek | 0:ca69bce3284f | 42 | this->putc('0'+c2); |
Waldek | 0:ca69bce3284f | 43 | this->putc('0'+c3); |
Waldek | 0:ca69bce3284f | 44 | this->putc('0'+c4); |
Waldek | 0:ca69bce3284f | 45 | |
Waldek | 2:9467805cb02b | 46 | return; |
Waldek | 0:ca69bce3284f | 47 | } |
Waldek | 0:ca69bce3284f | 48 | |
Waldek | 1:cf83568dc17a | 49 | bool Convert::display(unsigned int number) |
Waldek | 0:ca69bce3284f | 50 | { |
Waldek | 2:9467805cb02b | 51 | this->DP1(false); |
Waldek | 2:9467805cb02b | 52 | this->DP2(false); |
Waldek | 2:9467805cb02b | 53 | this->DP3(false); |
Waldek | 2:9467805cb02b | 54 | this->Colon(false); |
Waldek | 2:9467805cb02b | 55 | |
Waldek | 0:ca69bce3284f | 56 | if (number > 9999) |
Waldek | 0:ca69bce3284f | 57 | { |
Waldek | 0:ca69bce3284f | 58 | this->blink(2); |
Waldek | 2:9467805cb02b | 59 | this->display(" OFL"); |
Waldek | 0:ca69bce3284f | 60 | return true; |
Waldek | 0:ca69bce3284f | 61 | } |
Waldek | 0:ca69bce3284f | 62 | else |
Waldek | 0:ca69bce3284f | 63 | { |
Waldek | 0:ca69bce3284f | 64 | this->display_digits(number); |
Waldek | 2:9467805cb02b | 65 | return false; |
Waldek | 0:ca69bce3284f | 66 | } |
Waldek | 0:ca69bce3284f | 67 | } |
Waldek | 0:ca69bce3284f | 68 | |
Waldek | 1:cf83568dc17a | 69 | bool Convert::display(int number) |
Waldek | 0:ca69bce3284f | 70 | { |
Waldek | 2:9467805cb02b | 71 | this->DP1(false); |
Waldek | 2:9467805cb02b | 72 | this->DP2(false); |
Waldek | 2:9467805cb02b | 73 | this->DP3(false); |
Waldek | 2:9467805cb02b | 74 | this->Colon(false); |
Waldek | 2:9467805cb02b | 75 | |
Waldek | 2:9467805cb02b | 76 | if (number < 0) |
Waldek | 0:ca69bce3284f | 77 | { |
Waldek | 0:ca69bce3284f | 78 | if (number < -999) |
Waldek | 0:ca69bce3284f | 79 | { |
Waldek | 0:ca69bce3284f | 80 | this->blink(3); |
Waldek | 2:9467805cb02b | 81 | this->display("-OFL"); |
Waldek | 0:ca69bce3284f | 82 | return true; |
Waldek | 0:ca69bce3284f | 83 | } |
Waldek | 0:ca69bce3284f | 84 | else |
Waldek | 0:ca69bce3284f | 85 | { |
Waldek | 2:9467805cb02b | 86 | this->display_digits ((unsigned int) -number, true); |
Waldek | 2:9467805cb02b | 87 | return false; |
Waldek | 0:ca69bce3284f | 88 | } |
Waldek | 0:ca69bce3284f | 89 | } |
Waldek | 2:9467805cb02b | 90 | else if (number > 9999) |
Waldek | 2:9467805cb02b | 91 | { |
Waldek | 2:9467805cb02b | 92 | this->blink(3); |
Waldek | 2:9467805cb02b | 93 | this->display(" OFL"); |
Waldek | 2:9467805cb02b | 94 | return true; |
Waldek | 2:9467805cb02b | 95 | } |
Waldek | 0:ca69bce3284f | 96 | else |
Waldek | 0:ca69bce3284f | 97 | { |
Waldek | 2:9467805cb02b | 98 | this->display_digits ((unsigned int) number, false); |
Waldek | 2:9467805cb02b | 99 | return false; |
Waldek | 0:ca69bce3284f | 100 | } |
Waldek | 0:ca69bce3284f | 101 | } |
Waldek | 0:ca69bce3284f | 102 | |
Waldek | 1:cf83568dc17a | 103 | bool Convert::display(double number) |
Waldek | 0:ca69bce3284f | 104 | { |
Waldek | 2:9467805cb02b | 105 | this->Colon(false); |
Waldek | 0:ca69bce3284f | 106 | // >=10000 OVL |
Waldek | 2:9467805cb02b | 107 | if (number >= 10000.) |
Waldek | 2:9467805cb02b | 108 | { |
Waldek | 2:9467805cb02b | 109 | this->blink(3); |
Waldek | 2:9467805cb02b | 110 | this->display(" OFL"); |
Waldek | 2:9467805cb02b | 111 | return true; |
Waldek | 2:9467805cb02b | 112 | } |
Waldek | 0:ca69bce3284f | 113 | // >=1000 1234 |
Waldek | 2:9467805cb02b | 114 | else if (number >= 1000.) |
Waldek | 0:ca69bce3284f | 115 | { |
Waldek | 0:ca69bce3284f | 116 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 117 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 118 | this->DP3(false); |
Waldek | 2:9467805cb02b | 119 | this->display_digits ((unsigned int) number); |
Waldek | 2:9467805cb02b | 120 | return false; |
Waldek | 0:ca69bce3284f | 121 | } |
Waldek | 0:ca69bce3284f | 122 | // >=100 123.4 |
Waldek | 0:ca69bce3284f | 123 | else if (number >= 100.) |
Waldek | 0:ca69bce3284f | 124 | { |
Waldek | 0:ca69bce3284f | 125 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 126 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 127 | this->DP3(true); |
Waldek | 2:9467805cb02b | 128 | this->display_digits ((unsigned int) number*10.); |
Waldek | 2:9467805cb02b | 129 | return false; |
Waldek | 0:ca69bce3284f | 130 | } |
Waldek | 0:ca69bce3284f | 131 | // >=10 12.34 |
Waldek | 0:ca69bce3284f | 132 | else if (number >= 10.) |
Waldek | 0:ca69bce3284f | 133 | { |
Waldek | 0:ca69bce3284f | 134 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 135 | this->DP2(true); |
Waldek | 0:ca69bce3284f | 136 | this->DP3(false); |
Waldek | 2:9467805cb02b | 137 | this->display_digits ((unsigned int) number*100.); |
Waldek | 2:9467805cb02b | 138 | return false; |
Waldek | 0:ca69bce3284f | 139 | } |
Waldek | 0:ca69bce3284f | 140 | // >=0 1.234 |
Waldek | 0:ca69bce3284f | 141 | else if (number >= 0.) |
Waldek | 0:ca69bce3284f | 142 | { |
Waldek | 0:ca69bce3284f | 143 | this->DP1(true); |
Waldek | 0:ca69bce3284f | 144 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 145 | this->DP3(false); |
Waldek | 2:9467805cb02b | 146 | this->display_digits ((unsigned int) number*1000.); |
Waldek | 2:9467805cb02b | 147 | return false; |
Waldek | 0:ca69bce3284f | 148 | } |
Waldek | 0:ca69bce3284f | 149 | // <0 |
Waldek | 0:ca69bce3284f | 150 | // <=-1 -1.23 |
Waldek | 0:ca69bce3284f | 151 | else if (number >= -10.) |
Waldek | 0:ca69bce3284f | 152 | { |
Waldek | 0:ca69bce3284f | 153 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 154 | this->DP2(true); |
Waldek | 0:ca69bce3284f | 155 | this->DP3(false); |
Waldek | 2:9467805cb02b | 156 | this->display_digits ((unsigned int) number*-100., true); |
Waldek | 2:9467805cb02b | 157 | return false; |
Waldek | 0:ca69bce3284f | 158 | } |
Waldek | 2:9467805cb02b | 159 | // <=-10 -12.3 |
Waldek | 0:ca69bce3284f | 160 | else if (number >= -100.) |
Waldek | 0:ca69bce3284f | 161 | { |
Waldek | 0:ca69bce3284f | 162 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 163 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 164 | this->DP3(true); |
Waldek | 2:9467805cb02b | 165 | this->display_digits ((unsigned int) number*-10., true); |
Waldek | 2:9467805cb02b | 166 | return false; |
Waldek | 0:ca69bce3284f | 167 | } |
Waldek | 2:9467805cb02b | 168 | // <=-100 -123 |
Waldek | 2:9467805cb02b | 169 | else if (number >= -1000.) |
Waldek | 0:ca69bce3284f | 170 | { |
Waldek | 0:ca69bce3284f | 171 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 172 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 173 | this->DP3(false); |
Waldek | 2:9467805cb02b | 174 | this->display_digits ((unsigned int) -number, true); |
Waldek | 2:9467805cb02b | 175 | return false; |
Waldek | 2:9467805cb02b | 176 | } |
Waldek | 2:9467805cb02b | 177 | else |
Waldek | 0:ca69bce3284f | 178 | // <=-1000 -OVL |
Waldek | 2:9467805cb02b | 179 | { |
Waldek | 2:9467805cb02b | 180 | this->blink(3); |
Waldek | 2:9467805cb02b | 181 | this->display("-OFL"); |
Waldek | 2:9467805cb02b | 182 | return true; |
Waldek | 2:9467805cb02b | 183 | } |
Waldek | 0:ca69bce3284f | 184 | |
Waldek | 0:ca69bce3284f | 185 | } |
Waldek | 0:ca69bce3284f | 186 | |
Waldek | 1:cf83568dc17a | 187 | bool Convert::display(float number) |
Waldek | 0:ca69bce3284f | 188 | { |
Waldek | 2:9467805cb02b | 189 | return this->display((double) number); |
Waldek | 0:ca69bce3284f | 190 | } |
Waldek | 1:cf83568dc17a | 191 | |
Waldek | 2:9467805cb02b | 192 | bool Convert::display(char *text) |
Waldek | 1:cf83568dc17a | 193 | { |
Waldek | 1:cf83568dc17a | 194 | this->DP1(false); |
Waldek | 1:cf83568dc17a | 195 | this->DP2(false); |
Waldek | 1:cf83568dc17a | 196 | this->DP3(false); |
Waldek | 2:9467805cb02b | 197 | this->Colon(false); |
Waldek | 2:9467805cb02b | 198 | this->Home(); |
Waldek | 2:9467805cb02b | 199 | for(int i=0; i<4; i++) |
Waldek | 2:9467805cb02b | 200 | { |
Waldek | 2:9467805cb02b | 201 | if (text[i]==0) |
Waldek | 2:9467805cb02b | 202 | break; |
Waldek | 2:9467805cb02b | 203 | else |
Waldek | 2:9467805cb02b | 204 | this->putc(text[i]); |
Waldek | 2:9467805cb02b | 205 | } |
Waldek | 1:cf83568dc17a | 206 | return false; |
Waldek | 1:cf83568dc17a | 207 | } |