suu pen / EightDotMatrixLed

Dependents:   eightDotMatrixLedLibraryExample test10_rev2

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?

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