Conversions for the LCD display in FRDM-KL46Z

Dependents:   eem202a_display eem202a_resolutedreamer_1

Committer:
Waldek
Date:
Sat May 10 19:09:52 2014 +0000
Revision:
5:4c6a9e109cd0
Parent:
3:551fe797c723
.

Who changed what in which revision?

UserRevisionLine numberNew 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 3:551fe797c723 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 3:551fe797c723 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 3:551fe797c723 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 3:551fe797c723 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 3:551fe797c723 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 3:551fe797c723 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 }