Conversions for the LCD display in FRDM-KL46Z

Dependents:   eem202a_display eem202a_resolutedreamer_1

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?

UserRevisionLine numberNew 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 }