Conversions for the LCD display in FRDM-KL46Z
Dependents: eem202a_display eem202a_resolutedreamer_1
convert.cpp@0:ca69bce3284f, 2014-04-19 (annotated)
- Committer:
- Waldek
- Date:
- Sat Apr 19 08:20:12 2014 +0000
- Revision:
- 0:ca69bce3284f
- Child:
- 1:cf83568dc17a
Converted to library
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 | 0:ca69bce3284f | 3 | convert::convert() |
Waldek | 0:ca69bce3284f | 4 | { |
Waldek | 0:ca69bce3284f | 5 | this->prepare(); |
Waldek | 0:ca69bce3284f | 6 | |
Waldek | 0:ca69bce3284f | 7 | return; |
Waldek | 0:ca69bce3284f | 8 | } |
Waldek | 0:ca69bce3284f | 9 | |
Waldek | 0:ca69bce3284f | 10 | void convert::prepare(void) |
Waldek | 0:ca69bce3284f | 11 | { |
Waldek | 0:ca69bce3284f | 12 | this->blink(-1); |
Waldek | 0:ca69bce3284f | 13 | this->clear(); |
Waldek | 0:ca69bce3284f | 14 | this->DP1(0); |
Waldek | 0:ca69bce3284f | 15 | this->DP2(0); |
Waldek | 0:ca69bce3284f | 16 | this->DP3(0); |
Waldek | 0:ca69bce3284f | 17 | this->Colon(0); |
Waldek | 0:ca69bce3284f | 18 | this->Home(); |
Waldek | 0:ca69bce3284f | 19 | |
Waldek | 0:ca69bce3284f | 20 | return; |
Waldek | 0:ca69bce3284f | 21 | } |
Waldek | 0:ca69bce3284f | 22 | |
Waldek | 0:ca69bce3284f | 23 | bool convert::display_digits(unsigned int number, bool negate) |
Waldek | 0:ca69bce3284f | 24 | { |
Waldek | 0:ca69bce3284f | 25 | register unsigned short int c1 = ((unsigned int) number / 1000); |
Waldek | 0:ca69bce3284f | 26 | register unsigned short int c2 = ((unsigned int) number / 100) - (c1 * 10); |
Waldek | 0:ca69bce3284f | 27 | register unsigned short int c3 = ((unsigned int) number / 10) - ((c1 *100) + (c2 *10)); |
Waldek | 0:ca69bce3284f | 28 | register unsigned short int c4 = number - ((c1 *1000) + (c2 *100) + (c3 *10)); |
Waldek | 0:ca69bce3284f | 29 | |
Waldek | 0:ca69bce3284f | 30 | this->blink(-1); |
Waldek | 0:ca69bce3284f | 31 | this->Home(); |
Waldek | 0:ca69bce3284f | 32 | if (negate) |
Waldek | 0:ca69bce3284f | 33 | this->putc('-'); |
Waldek | 0:ca69bce3284f | 34 | else |
Waldek | 0:ca69bce3284f | 35 | this->putc('0'+c1); |
Waldek | 0:ca69bce3284f | 36 | this->putc('0'+c2); |
Waldek | 0:ca69bce3284f | 37 | this->putc('0'+c3); |
Waldek | 0:ca69bce3284f | 38 | this->putc('0'+c4); |
Waldek | 0:ca69bce3284f | 39 | |
Waldek | 0:ca69bce3284f | 40 | return false; |
Waldek | 0:ca69bce3284f | 41 | } |
Waldek | 0:ca69bce3284f | 42 | |
Waldek | 0:ca69bce3284f | 43 | bool convert::display(unsigned int number) |
Waldek | 0:ca69bce3284f | 44 | { |
Waldek | 0:ca69bce3284f | 45 | if (number > 9999) |
Waldek | 0:ca69bce3284f | 46 | { |
Waldek | 0:ca69bce3284f | 47 | this->Home(); |
Waldek | 0:ca69bce3284f | 48 | this->blink(2); |
Waldek | 0:ca69bce3284f | 49 | this->putc(' '); |
Waldek | 0:ca69bce3284f | 50 | this->putc('O'); |
Waldek | 0:ca69bce3284f | 51 | this->putc('F'); |
Waldek | 0:ca69bce3284f | 52 | this->putc('L'); |
Waldek | 0:ca69bce3284f | 53 | return true; |
Waldek | 0:ca69bce3284f | 54 | } |
Waldek | 0:ca69bce3284f | 55 | else |
Waldek | 0:ca69bce3284f | 56 | { |
Waldek | 0:ca69bce3284f | 57 | this->display_digits(number); |
Waldek | 0:ca69bce3284f | 58 | } |
Waldek | 0:ca69bce3284f | 59 | return false; |
Waldek | 0:ca69bce3284f | 60 | } |
Waldek | 0:ca69bce3284f | 61 | |
Waldek | 0:ca69bce3284f | 62 | bool convert::display(int number) |
Waldek | 0:ca69bce3284f | 63 | { |
Waldek | 0:ca69bce3284f | 64 | bool negate = (number < 0); |
Waldek | 0:ca69bce3284f | 65 | if (negate) |
Waldek | 0:ca69bce3284f | 66 | { |
Waldek | 0:ca69bce3284f | 67 | if (number < -999) |
Waldek | 0:ca69bce3284f | 68 | { |
Waldek | 0:ca69bce3284f | 69 | this->Home(); |
Waldek | 0:ca69bce3284f | 70 | this->blink(3); |
Waldek | 0:ca69bce3284f | 71 | this->putc('-'); |
Waldek | 0:ca69bce3284f | 72 | this->putc('O'); |
Waldek | 0:ca69bce3284f | 73 | this->putc('F'); |
Waldek | 0:ca69bce3284f | 74 | this->putc('L'); |
Waldek | 0:ca69bce3284f | 75 | return true; |
Waldek | 0:ca69bce3284f | 76 | } |
Waldek | 0:ca69bce3284f | 77 | else |
Waldek | 0:ca69bce3284f | 78 | { |
Waldek | 0:ca69bce3284f | 79 | return this->display_digits ((unsigned int) -number, negate); |
Waldek | 0:ca69bce3284f | 80 | } |
Waldek | 0:ca69bce3284f | 81 | } |
Waldek | 0:ca69bce3284f | 82 | else |
Waldek | 0:ca69bce3284f | 83 | { |
Waldek | 0:ca69bce3284f | 84 | return this->display ((unsigned int) number); |
Waldek | 0:ca69bce3284f | 85 | } |
Waldek | 0:ca69bce3284f | 86 | } |
Waldek | 0:ca69bce3284f | 87 | |
Waldek | 0:ca69bce3284f | 88 | bool convert::display(double number) |
Waldek | 0:ca69bce3284f | 89 | { |
Waldek | 0:ca69bce3284f | 90 | // >=10000 OVL |
Waldek | 0:ca69bce3284f | 91 | // >=1000 1234 |
Waldek | 0:ca69bce3284f | 92 | if (number >= 1000.) |
Waldek | 0:ca69bce3284f | 93 | { |
Waldek | 0:ca69bce3284f | 94 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 95 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 96 | this->DP3(false); |
Waldek | 0:ca69bce3284f | 97 | this->display((unsigned int) (number)); |
Waldek | 0:ca69bce3284f | 98 | } |
Waldek | 0:ca69bce3284f | 99 | // >=100 123.4 |
Waldek | 0:ca69bce3284f | 100 | else if (number >= 100.) |
Waldek | 0:ca69bce3284f | 101 | { |
Waldek | 0:ca69bce3284f | 102 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 103 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 104 | this->DP3(true); |
Waldek | 0:ca69bce3284f | 105 | this->display((unsigned int) (number*10.)); |
Waldek | 0:ca69bce3284f | 106 | } |
Waldek | 0:ca69bce3284f | 107 | // >=10 12.34 |
Waldek | 0:ca69bce3284f | 108 | else if (number >= 10.) |
Waldek | 0:ca69bce3284f | 109 | { |
Waldek | 0:ca69bce3284f | 110 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 111 | this->DP2(true); |
Waldek | 0:ca69bce3284f | 112 | this->DP3(false); |
Waldek | 0:ca69bce3284f | 113 | this->display((unsigned int) (number*100.)); |
Waldek | 0:ca69bce3284f | 114 | } |
Waldek | 0:ca69bce3284f | 115 | // >=0 1.234 |
Waldek | 0:ca69bce3284f | 116 | else if (number >= 0.) |
Waldek | 0:ca69bce3284f | 117 | { |
Waldek | 0:ca69bce3284f | 118 | this->DP1(true); |
Waldek | 0:ca69bce3284f | 119 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 120 | this->DP3(false); |
Waldek | 0:ca69bce3284f | 121 | this->display((int) (number*1000.)); |
Waldek | 0:ca69bce3284f | 122 | } |
Waldek | 0:ca69bce3284f | 123 | // <0 |
Waldek | 0:ca69bce3284f | 124 | // <=-1 -1.23 |
Waldek | 0:ca69bce3284f | 125 | // <=-10 -12.3 |
Waldek | 0:ca69bce3284f | 126 | else if (number >= -10.) |
Waldek | 0:ca69bce3284f | 127 | { |
Waldek | 0:ca69bce3284f | 128 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 129 | this->DP2(true); |
Waldek | 0:ca69bce3284f | 130 | this->DP3(false); |
Waldek | 0:ca69bce3284f | 131 | this->display((int) (number*100.)); |
Waldek | 0:ca69bce3284f | 132 | } |
Waldek | 0:ca69bce3284f | 133 | // <=-100 -123 |
Waldek | 0:ca69bce3284f | 134 | else if (number >= -100.) |
Waldek | 0:ca69bce3284f | 135 | { |
Waldek | 0:ca69bce3284f | 136 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 137 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 138 | this->DP3(true); |
Waldek | 0:ca69bce3284f | 139 | this->display((int) (number*10.)); |
Waldek | 0:ca69bce3284f | 140 | } |
Waldek | 0:ca69bce3284f | 141 | else |
Waldek | 0:ca69bce3284f | 142 | { |
Waldek | 0:ca69bce3284f | 143 | this->DP1(false); |
Waldek | 0:ca69bce3284f | 144 | this->DP2(false); |
Waldek | 0:ca69bce3284f | 145 | this->DP3(false); |
Waldek | 0:ca69bce3284f | 146 | this->display((int) (number*1.)); |
Waldek | 0:ca69bce3284f | 147 | }; |
Waldek | 0:ca69bce3284f | 148 | // <=-1000 -OVL |
Waldek | 0:ca69bce3284f | 149 | |
Waldek | 0:ca69bce3284f | 150 | return true; |
Waldek | 0:ca69bce3284f | 151 | } |
Waldek | 0:ca69bce3284f | 152 | |
Waldek | 0:ca69bce3284f | 153 | bool convert::display(float number) |
Waldek | 0:ca69bce3284f | 154 | { |
Waldek | 0:ca69bce3284f | 155 | return display((double) number); |
Waldek | 0:ca69bce3284f | 156 | } |