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.
Dependents: eightDotMatrixLedLibraryExample test10_rev2
EightDotMatrixLed.cpp@0:3df409a1aa42, 2011-12-03 (annotated)
- Committer:
- suupen
- Date:
- Sat Dec 03 23:01:36 2011 +0000
- Revision:
- 0:3df409a1aa42
V1.01 12/04 example program comment fix.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| suupen | 0:3df409a1aa42 | 1 | /********************************************************** |
| suupen | 0:3df409a1aa42 | 2 | |
| suupen | 0:3df409a1aa42 | 3 | * EightDotMatrixLed.cpp |
| suupen | 0:3df409a1aa42 | 4 | * dynamic control of eight dot matrix led |
| suupen | 0:3df409a1aa42 | 5 | * |
| suupen | 0:3df409a1aa42 | 6 | **********************************************************/ |
| suupen | 0:3df409a1aa42 | 7 | #define _EIGHTDOTMATRIXLED_C |
| suupen | 0:3df409a1aa42 | 8 | |
| suupen | 0:3df409a1aa42 | 9 | #include "types.h" |
| suupen | 0:3df409a1aa42 | 10 | #include "mbed.h" |
| suupen | 0:3df409a1aa42 | 11 | #include "EightDotMatrixLed.h" |
| suupen | 0:3df409a1aa42 | 12 | |
| suupen | 0:3df409a1aa42 | 13 | |
| suupen | 0:3df409a1aa42 | 14 | |
| suupen | 0:3df409a1aa42 | 15 | |
| suupen | 0:3df409a1aa42 | 16 | /** Create a eight dot matrix led object connected to the specified DigtalOutput pin |
| suupen | 0:3df409a1aa42 | 17 | */ |
| suupen | 0:3df409a1aa42 | 18 | EightDotMatrixLed::EightDotMatrixLed(uint8_t commonPole, |
| suupen | 0:3df409a1aa42 | 19 | PinName seg_a, PinName seg_b, PinName seg_c, PinName seg_d, PinName seg_e, PinName seg_f, PinName seg_g, PinName seg_h, |
| suupen | 0:3df409a1aa42 | 20 | PinName com_1, PinName com_2, PinName com_3, PinName com_4, PinName com_5, PinName com_6, PinName com_7, PinName com_8): |
| suupen | 0:3df409a1aa42 | 21 | _seg_a(seg_a), _seg_b(seg_b), _seg_c(seg_c), _seg_d(seg_d), _seg_e(seg_e), _seg_f(seg_f), _seg_g(seg_g), _seg_h(seg_h), |
| suupen | 0:3df409a1aa42 | 22 | _com_1(com_1), _com_2(com_2), _com_3(com_3), _com_4(com_4), _com_5(com_5), _com_6(com_6), _com_7(com_7), _com_8(com_8){ |
| suupen | 0:3df409a1aa42 | 23 | |
| suupen | 0:3df409a1aa42 | 24 | |
| suupen | 0:3df409a1aa42 | 25 | timer.attach_us(this, &EightDotMatrixLed::segmentGrayDataKosin, 10000); // led smooth control 10ms timer inttruupt |
| suupen | 0:3df409a1aa42 | 26 | |
| suupen | 0:3df409a1aa42 | 27 | // data table set of Brightness |
| suupen | 0:3df409a1aa42 | 28 | // DT_pwmGray[] = i ^ 2 |
| suupen | 0:3df409a1aa42 | 29 | for(uint32_t i = 0; i < Z_grayMax + 1; i++){ |
| suupen | 0:3df409a1aa42 | 30 | DT_pwmGray[i] = (uint8_t)(((i * i) * Z_pwmGrayMax ) / (Z_grayMax * Z_grayMax)); |
| suupen | 0:3df409a1aa42 | 31 | } |
| suupen | 0:3df409a1aa42 | 32 | |
| suupen | 0:3df409a1aa42 | 33 | // check connect com_x |
| suupen | 0:3df409a1aa42 | 34 | D_comNull = Z_comSuu; |
| suupen | 0:3df409a1aa42 | 35 | if(com_8 == NC){D_comNull--;} |
| suupen | 0:3df409a1aa42 | 36 | if(com_7 == NC){D_comNull--;} |
| suupen | 0:3df409a1aa42 | 37 | if(com_6 == NC){D_comNull--;} |
| suupen | 0:3df409a1aa42 | 38 | if(com_5 == NC){D_comNull--;} |
| suupen | 0:3df409a1aa42 | 39 | if(com_4 == NC){D_comNull--;} |
| suupen | 0:3df409a1aa42 | 40 | if(com_3 == NC){D_comNull--;} |
| suupen | 0:3df409a1aa42 | 41 | if(com_2 == NC){D_comNull--;} |
| suupen | 0:3df409a1aa42 | 42 | if(com_1 == NC){D_comNull--;} |
| suupen | 0:3df409a1aa42 | 43 | |
| suupen | 0:3df409a1aa42 | 44 | |
| suupen | 0:3df409a1aa42 | 45 | |
| suupen | 0:3df409a1aa42 | 46 | // common and segment pin display data set |
| suupen | 0:3df409a1aa42 | 47 | if(commonPole == 0){ |
| suupen | 0:3df409a1aa42 | 48 | // Anode common |
| suupen | 0:3df409a1aa42 | 49 | D_commonOn = 1; |
| suupen | 0:3df409a1aa42 | 50 | D_commonOff = 0; |
| suupen | 0:3df409a1aa42 | 51 | D_segmentOn = 0; |
| suupen | 0:3df409a1aa42 | 52 | D_segmentOff = 1; |
| suupen | 0:3df409a1aa42 | 53 | } |
| suupen | 0:3df409a1aa42 | 54 | else{ |
| suupen | 0:3df409a1aa42 | 55 | // Cathod common |
| suupen | 0:3df409a1aa42 | 56 | D_commonOn = 0; |
| suupen | 0:3df409a1aa42 | 57 | D_commonOff = 1; |
| suupen | 0:3df409a1aa42 | 58 | D_segmentOn = 1; |
| suupen | 0:3df409a1aa42 | 59 | D_segmentOff = 0; |
| suupen | 0:3df409a1aa42 | 60 | } |
| suupen | 0:3df409a1aa42 | 61 | |
| suupen | 0:3df409a1aa42 | 62 | } |
| suupen | 0:3df409a1aa42 | 63 | |
| suupen | 0:3df409a1aa42 | 64 | |
| suupen | 0:3df409a1aa42 | 65 | |
| suupen | 0:3df409a1aa42 | 66 | /************************************** |
| suupen | 0:3df409a1aa42 | 67 | * 7segment no gray data kosin |
| suupen | 0:3df409a1aa42 | 68 | * 100ms goto no syori |
| suupen | 0:3df409a1aa42 | 69 | **************************************/ |
| suupen | 0:3df409a1aa42 | 70 | void EightDotMatrixLed::segmentGrayDataKosin(void){ |
| suupen | 0:3df409a1aa42 | 71 | uint8_t com; |
| suupen | 0:3df409a1aa42 | 72 | uint8_t seg; |
| suupen | 0:3df409a1aa42 | 73 | |
| suupen | 0:3df409a1aa42 | 74 | for(com = 0; com < Z_comSuu; com++){ |
| suupen | 0:3df409a1aa42 | 75 | for(seg = 0; seg < Z_segSuu; seg++){ |
| suupen | 0:3df409a1aa42 | 76 | uint8_t D_dotGrayData = *(A_dotGrayData + (com * Z_segSuu) + seg); |
| suupen | 0:3df409a1aa42 | 77 | uint8_t D_dotDigitalData = *(A_dotDigitalData + (com * Z_segSuu) + seg); |
| suupen | 0:3df409a1aa42 | 78 | |
| suupen | 0:3df409a1aa42 | 79 | if((D_dotGrayData <= 100) && (D_dotDigitalData <= 1)){ |
| suupen | 0:3df409a1aa42 | 80 | // gray and digital data enable |
| suupen | 0:3df409a1aa42 | 81 | if(D_dotDigitalData == 1){ |
| suupen | 0:3df409a1aa42 | 82 | if(D_dotPwmData[com][seg] < D_dotGrayData){ |
| suupen | 0:3df409a1aa42 | 83 | D_dotPwmData[com][seg]++; |
| suupen | 0:3df409a1aa42 | 84 | } |
| suupen | 0:3df409a1aa42 | 85 | } |
| suupen | 0:3df409a1aa42 | 86 | else if(D_dotPwmData[com][seg] > 0){ |
| suupen | 0:3df409a1aa42 | 87 | D_dotPwmData[com][seg]--; |
| suupen | 0:3df409a1aa42 | 88 | } |
| suupen | 0:3df409a1aa42 | 89 | } |
| suupen | 0:3df409a1aa42 | 90 | else if((D_dotGrayData > 100) && (D_dotDigitalData <= 1)){ |
| suupen | 0:3df409a1aa42 | 91 | // gray data disable and digital data enable |
| suupen | 0:3df409a1aa42 | 92 | if(D_dotDigitalData == 1){ |
| suupen | 0:3df409a1aa42 | 93 | // digital data on |
| suupen | 0:3df409a1aa42 | 94 | if(D_dotPwmData[com][seg] < Z_grayMax){ |
| suupen | 0:3df409a1aa42 | 95 | D_dotPwmData[com][seg]++; |
| suupen | 0:3df409a1aa42 | 96 | } |
| suupen | 0:3df409a1aa42 | 97 | } |
| suupen | 0:3df409a1aa42 | 98 | else{ |
| suupen | 0:3df409a1aa42 | 99 | // digital data off |
| suupen | 0:3df409a1aa42 | 100 | if(D_dotPwmData[com][seg] > 0){ |
| suupen | 0:3df409a1aa42 | 101 | D_dotPwmData[com][seg]--; |
| suupen | 0:3df409a1aa42 | 102 | } |
| suupen | 0:3df409a1aa42 | 103 | } |
| suupen | 0:3df409a1aa42 | 104 | } |
| suupen | 0:3df409a1aa42 | 105 | else if((D_dotGrayData <= 100) && (D_dotDigitalData > 1)){ |
| suupen | 0:3df409a1aa42 | 106 | // gray data enable and digital data disable |
| suupen | 0:3df409a1aa42 | 107 | D_dotPwmData[com][seg] = D_dotGrayData; |
| suupen | 0:3df409a1aa42 | 108 | } |
| suupen | 0:3df409a1aa42 | 109 | else{ |
| suupen | 0:3df409a1aa42 | 110 | // gray data and digital data disable |
| suupen | 0:3df409a1aa42 | 111 | D_dotPwmData[com][seg] = 0; |
| suupen | 0:3df409a1aa42 | 112 | } |
| suupen | 0:3df409a1aa42 | 113 | } |
| suupen | 0:3df409a1aa42 | 114 | } |
| suupen | 0:3df409a1aa42 | 115 | } |
| suupen | 0:3df409a1aa42 | 116 | |
| suupen | 0:3df409a1aa42 | 117 | |
| suupen | 0:3df409a1aa42 | 118 | /************************************** |
| suupen | 0:3df409a1aa42 | 119 | * main |
| suupen | 0:3df409a1aa42 | 120 | **************************************/ |
| suupen | 0:3df409a1aa42 | 121 | void EightDotMatrixLed::EightDotMatrixLed_main(uint8_t* grayData, uint8_t* digitalData) { |
| suupen | 0:3df409a1aa42 | 122 | |
| suupen | 0:3df409a1aa42 | 123 | A_dotGrayData = grayData; |
| suupen | 0:3df409a1aa42 | 124 | A_dotDigitalData = digitalData; |
| suupen | 0:3df409a1aa42 | 125 | /* |
| suupen | 0:3df409a1aa42 | 126 | for(uint8_t com = 0; com < 8; com++){ |
| suupen | 0:3df409a1aa42 | 127 | for(uint8_t seg = 0; seg < 8; seg++){ |
| suupen | 0:3df409a1aa42 | 128 | D_dotGrayData[com][seg] = *(grayData + (com * Z_segSuu) + seg); |
| suupen | 0:3df409a1aa42 | 129 | D_dotDigitalData[com][seg] = *(digitalData + (com * Z_segSuu) +seg); |
| suupen | 0:3df409a1aa42 | 130 | } |
| suupen | 0:3df409a1aa42 | 131 | } |
| suupen | 0:3df409a1aa42 | 132 | */ |
| suupen | 0:3df409a1aa42 | 133 | // dynamic shuturyoku shori |
| suupen | 0:3df409a1aa42 | 134 | output(); |
| suupen | 0:3df409a1aa42 | 135 | } |
| suupen | 0:3df409a1aa42 | 136 | |
| suupen | 0:3df409a1aa42 | 137 | |
| suupen | 0:3df409a1aa42 | 138 | /************************************** |
| suupen | 0:3df409a1aa42 | 139 | * comAllClear |
| suupen | 0:3df409a1aa42 | 140 | * |
| suupen | 0:3df409a1aa42 | 141 | * common pin o subete OFF suru |
| suupen | 0:3df409a1aa42 | 142 | **************************************/ |
| suupen | 0:3df409a1aa42 | 143 | void EightDotMatrixLed::comAllClear(void){ |
| suupen | 0:3df409a1aa42 | 144 | |
| suupen | 0:3df409a1aa42 | 145 | switch (D_comNull){ |
| suupen | 0:3df409a1aa42 | 146 | case 8: // com_1 - com_8is all connect |
| suupen | 0:3df409a1aa42 | 147 | _com_8 = D_commonOff; |
| suupen | 0:3df409a1aa42 | 148 | //break; |
| suupen | 0:3df409a1aa42 | 149 | case 7: // com_8 Null |
| suupen | 0:3df409a1aa42 | 150 | _com_7 = D_commonOff; |
| suupen | 0:3df409a1aa42 | 151 | //break; |
| suupen | 0:3df409a1aa42 | 152 | case 6: // com_7 Null |
| suupen | 0:3df409a1aa42 | 153 | _com_6 = D_commonOff; |
| suupen | 0:3df409a1aa42 | 154 | //break; |
| suupen | 0:3df409a1aa42 | 155 | case 5: // com_6 Null |
| suupen | 0:3df409a1aa42 | 156 | _com_5 = D_commonOff; |
| suupen | 0:3df409a1aa42 | 157 | //break; |
| suupen | 0:3df409a1aa42 | 158 | case 4: // com_5 Null |
| suupen | 0:3df409a1aa42 | 159 | _com_4 = D_commonOff; |
| suupen | 0:3df409a1aa42 | 160 | //break; |
| suupen | 0:3df409a1aa42 | 161 | case 3: // com_4 Null |
| suupen | 0:3df409a1aa42 | 162 | _com_3 = D_commonOff; |
| suupen | 0:3df409a1aa42 | 163 | // break; |
| suupen | 0:3df409a1aa42 | 164 | case 2: // com_3 Null |
| suupen | 0:3df409a1aa42 | 165 | _com_2 = D_commonOff; |
| suupen | 0:3df409a1aa42 | 166 | //break; |
| suupen | 0:3df409a1aa42 | 167 | case 1: // com_2 Null |
| suupen | 0:3df409a1aa42 | 168 | _com_1 = D_commonOff; |
| suupen | 0:3df409a1aa42 | 169 | //break; |
| suupen | 0:3df409a1aa42 | 170 | case 0: // com_1 Null |
| suupen | 0:3df409a1aa42 | 171 | // nothing |
| suupen | 0:3df409a1aa42 | 172 | break; |
| suupen | 0:3df409a1aa42 | 173 | default: |
| suupen | 0:3df409a1aa42 | 174 | // nothing |
| suupen | 0:3df409a1aa42 | 175 | break; |
| suupen | 0:3df409a1aa42 | 176 | } |
| suupen | 0:3df409a1aa42 | 177 | } |
| suupen | 0:3df409a1aa42 | 178 | |
| suupen | 0:3df409a1aa42 | 179 | /************************************** |
| suupen | 0:3df409a1aa42 | 180 | * segAllClear |
| suupen | 0:3df409a1aa42 | 181 | * |
| suupen | 0:3df409a1aa42 | 182 | * segment pin o subete OFF suru |
| suupen | 0:3df409a1aa42 | 183 | **************************************/ |
| suupen | 0:3df409a1aa42 | 184 | void EightDotMatrixLed::segAllClear(void){ |
| suupen | 0:3df409a1aa42 | 185 | _seg_a = D_segmentOff; |
| suupen | 0:3df409a1aa42 | 186 | _seg_b = D_segmentOff; |
| suupen | 0:3df409a1aa42 | 187 | _seg_c = D_segmentOff; |
| suupen | 0:3df409a1aa42 | 188 | _seg_d = D_segmentOff; |
| suupen | 0:3df409a1aa42 | 189 | _seg_e = D_segmentOff; |
| suupen | 0:3df409a1aa42 | 190 | _seg_f = D_segmentOff; |
| suupen | 0:3df409a1aa42 | 191 | _seg_h = D_segmentOff; |
| suupen | 0:3df409a1aa42 | 192 | } |
| suupen | 0:3df409a1aa42 | 193 | |
| suupen | 0:3df409a1aa42 | 194 | /************************************** |
| suupen | 0:3df409a1aa42 | 195 | * segDataSet |
| suupen | 0:3df409a1aa42 | 196 | * |
| suupen | 0:3df409a1aa42 | 197 | * segment pin ni shuturyoku data o settei |
| suupen | 0:3df409a1aa42 | 198 | **************************************/ |
| suupen | 0:3df409a1aa42 | 199 | void EightDotMatrixLed::segDataSet(uint8_t keta){ |
| suupen | 0:3df409a1aa42 | 200 | |
| suupen | 0:3df409a1aa42 | 201 | for(uint8_t i = 0; i < Z_pwmGrayMax + 1; i++){ |
| suupen | 0:3df409a1aa42 | 202 | if(DT_pwmGray[D_dotPwmData[keta][0]] <= i){_seg_a = D_segmentOff;}else{_seg_a = D_segmentOn;} |
| suupen | 0:3df409a1aa42 | 203 | if(DT_pwmGray[D_dotPwmData[keta][1]] <= i){_seg_b = D_segmentOff;}else{_seg_b = D_segmentOn;} |
| suupen | 0:3df409a1aa42 | 204 | if(DT_pwmGray[D_dotPwmData[keta][2]] <= i){_seg_c = D_segmentOff;}else{_seg_c = D_segmentOn;} |
| suupen | 0:3df409a1aa42 | 205 | if(DT_pwmGray[D_dotPwmData[keta][3]] <= i){_seg_d = D_segmentOff;}else{_seg_d = D_segmentOn;} |
| suupen | 0:3df409a1aa42 | 206 | if(DT_pwmGray[D_dotPwmData[keta][4]] <= i){_seg_e = D_segmentOff;}else{_seg_e = D_segmentOn;} |
| suupen | 0:3df409a1aa42 | 207 | if(DT_pwmGray[D_dotPwmData[keta][5]] <= i){_seg_f = D_segmentOff;}else{_seg_f = D_segmentOn;} |
| suupen | 0:3df409a1aa42 | 208 | if(DT_pwmGray[D_dotPwmData[keta][6]] <= i){_seg_g = D_segmentOff;}else{_seg_g = D_segmentOn;} |
| suupen | 0:3df409a1aa42 | 209 | if(DT_pwmGray[D_dotPwmData[keta][7]] <= i){_seg_h = D_segmentOff;}else{_seg_h = D_segmentOn;} |
| suupen | 0:3df409a1aa42 | 210 | |
| suupen | 0:3df409a1aa42 | 211 | } |
| suupen | 0:3df409a1aa42 | 212 | } |
| suupen | 0:3df409a1aa42 | 213 | |
| suupen | 0:3df409a1aa42 | 214 | /************************************** |
| suupen | 0:3df409a1aa42 | 215 | * output |
| suupen | 0:3df409a1aa42 | 216 | * |
| suupen | 0:3df409a1aa42 | 217 | * dynamic dosa saseru. |
| suupen | 0:3df409a1aa42 | 218 | * kono kansu wo jiikou suru tabi ni common pin o kirikaeru |
| suupen | 0:3df409a1aa42 | 219 | **************************************/ |
| suupen | 0:3df409a1aa42 | 220 | void EightDotMatrixLed::output(void){ |
| suupen | 0:3df409a1aa42 | 221 | static uint8_t M_seg = 0; |
| suupen | 0:3df409a1aa42 | 222 | |
| suupen | 0:3df409a1aa42 | 223 | if(M_seg >= D_comNull){M_seg = 0;} |
| suupen | 0:3df409a1aa42 | 224 | |
| suupen | 0:3df409a1aa42 | 225 | // com, seg syokika |
| suupen | 0:3df409a1aa42 | 226 | comAllClear(); |
| suupen | 0:3df409a1aa42 | 227 | segAllClear(); |
| suupen | 0:3df409a1aa42 | 228 | |
| suupen | 0:3df409a1aa42 | 229 | |
| suupen | 0:3df409a1aa42 | 230 | |
| suupen | 0:3df409a1aa42 | 231 | // common output |
| suupen | 0:3df409a1aa42 | 232 | if(D_comNull != 0){ |
| suupen | 0:3df409a1aa42 | 233 | // If the terminal output processing |
| suupen | 0:3df409a1aa42 | 234 | switch(M_seg){ |
| suupen | 0:3df409a1aa42 | 235 | case 0: |
| suupen | 0:3df409a1aa42 | 236 | _com_1 = D_commonOn; |
| suupen | 0:3df409a1aa42 | 237 | break; |
| suupen | 0:3df409a1aa42 | 238 | case 1: |
| suupen | 0:3df409a1aa42 | 239 | _com_2 = D_commonOn; |
| suupen | 0:3df409a1aa42 | 240 | break; |
| suupen | 0:3df409a1aa42 | 241 | case 2: |
| suupen | 0:3df409a1aa42 | 242 | _com_3 = D_commonOn; |
| suupen | 0:3df409a1aa42 | 243 | break; |
| suupen | 0:3df409a1aa42 | 244 | case 3: |
| suupen | 0:3df409a1aa42 | 245 | _com_4 = D_commonOn; |
| suupen | 0:3df409a1aa42 | 246 | break; |
| suupen | 0:3df409a1aa42 | 247 | case 4: |
| suupen | 0:3df409a1aa42 | 248 | _com_5 = D_commonOn; |
| suupen | 0:3df409a1aa42 | 249 | break; |
| suupen | 0:3df409a1aa42 | 250 | case 5: |
| suupen | 0:3df409a1aa42 | 251 | _com_6 = D_commonOn; |
| suupen | 0:3df409a1aa42 | 252 | break; |
| suupen | 0:3df409a1aa42 | 253 | case 6: |
| suupen | 0:3df409a1aa42 | 254 | _com_7 = D_commonOn; |
| suupen | 0:3df409a1aa42 | 255 | break; |
| suupen | 0:3df409a1aa42 | 256 | case 7: |
| suupen | 0:3df409a1aa42 | 257 | _com_8 = D_commonOn; |
| suupen | 0:3df409a1aa42 | 258 | break; |
| suupen | 0:3df409a1aa42 | 259 | default: |
| suupen | 0:3df409a1aa42 | 260 | break; |
| suupen | 0:3df409a1aa42 | 261 | } |
| suupen | 0:3df409a1aa42 | 262 | } |
| suupen | 0:3df409a1aa42 | 263 | |
| suupen | 0:3df409a1aa42 | 264 | // segmant output |
| suupen | 0:3df409a1aa42 | 265 | if(M_seg < Z_comSuu){ |
| suupen | 0:3df409a1aa42 | 266 | segDataSet(M_seg); |
| suupen | 0:3df409a1aa42 | 267 | } |
| suupen | 0:3df409a1aa42 | 268 | |
| suupen | 0:3df409a1aa42 | 269 | |
| suupen | 0:3df409a1aa42 | 270 | // com, seg syokika |
| suupen | 0:3df409a1aa42 | 271 | comAllClear(); |
| suupen | 0:3df409a1aa42 | 272 | segAllClear(); |
| suupen | 0:3df409a1aa42 | 273 | M_seg++; |
| suupen | 0:3df409a1aa42 | 274 | } |