LEDMatrixDisplay Program 文字ごとに色を変更できるように修正

Dependencies:   mbed

Fork of LEDMatrix_Master by en 129

Committer:
nameless129
Date:
Fri Mar 28 15:33:29 2014 +0000
Revision:
10:e261964e4989
Parent:
8:b24bd32cd2ed
?????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nameless129 0:64f46cf1b2b4 1 #pragma import __use_all_ctype
nameless129 0:64f46cf1b2b4 2
nameless129 0:64f46cf1b2b4 3 #include "mbed.h"
nameless129 0:64f46cf1b2b4 4 #include <string.h>
nameless129 4:70a1803901d1 5 #include "displayCom.h"
nameless129 0:64f46cf1b2b4 6 #include "kfont8.h"
nameless129 4:70a1803901d1 7 #include "8x8fontsLib.h"
nameless129 4:70a1803901d1 8 #include "15x16fontsLib.h"
nameless129 1:d4d1951a4202 9
nameless129 4:70a1803901d1 10 SPI spi(p5, p6, p7); //mosi, miso, sclk
nameless129 4:70a1803901d1 11 BusOut buffer_CS(p15,p16,p17,p18,p19,p20);
nameless129 4:70a1803901d1 12 Serial pc(USBTX, USBRX); // tx, rx
MACRUM 6:d5bed5797bb1 13 LocalFileSystem local("local");
nameless129 0:64f46cf1b2b4 14
nameless129 1:d4d1951a4202 15 unsigned int ImageBuf[3][DISPLAY_XSIZE];//16*6
nameless129 1:d4d1951a4202 16 unsigned int ColerMap[3][DISPLAY_XSIZE];
nameless129 1:d4d1951a4202 17
nameless129 10:e261964e4989 18 unsigned int CountChar_full_W(char *str )
nameless129 10:e261964e4989 19 {
nameless129 10:e261964e4989 20 unsigned char f_SJISChar = 0;
nameless129 10:e261964e4989 21 unsigned char c = 0;
nameless129 10:e261964e4989 22 unsigned int CountChar = 0;
nameless129 10:e261964e4989 23
nameless129 10:e261964e4989 24 c = *str;
nameless129 10:e261964e4989 25 while(c != '\0')
nameless129 10:e261964e4989 26 {
nameless129 10:e261964e4989 27 //2バイト文字の判定
nameless129 10:e261964e4989 28 if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_SJISChar != 1 )
nameless129 10:e261964e4989 29 {
nameless129 10:e261964e4989 30 f_SJISChar = 1;
nameless129 10:e261964e4989 31 }
nameless129 10:e261964e4989 32 else if(f_SJISChar == 1)
nameless129 10:e261964e4989 33 {
nameless129 10:e261964e4989 34 CountChar++;
nameless129 10:e261964e4989 35 f_SJISChar = 0;
nameless129 10:e261964e4989 36 }
nameless129 10:e261964e4989 37 else
nameless129 10:e261964e4989 38 {
nameless129 10:e261964e4989 39 f_SJISChar = 0;
nameless129 10:e261964e4989 40 }
nameless129 10:e261964e4989 41
nameless129 10:e261964e4989 42 str++;
nameless129 10:e261964e4989 43 c = *str;
nameless129 10:e261964e4989 44 }
nameless129 10:e261964e4989 45 return CountChar;
nameless129 10:e261964e4989 46 }
nameless129 10:e261964e4989 47
nameless129 10:e261964e4989 48 unsigned int CountChar_half_W(char *str)
nameless129 1:d4d1951a4202 49 {
nameless129 1:d4d1951a4202 50 unsigned char f_SJISChar = 0;
nameless129 1:d4d1951a4202 51 unsigned char c = 0;
nameless129 1:d4d1951a4202 52 unsigned int CountChar = 0;
nameless129 1:d4d1951a4202 53
nameless129 1:d4d1951a4202 54 c = *str;
nameless129 1:d4d1951a4202 55 while(c != '\0')
nameless129 1:d4d1951a4202 56 {
nameless129 1:d4d1951a4202 57 //2バイト文字の判定
nameless129 1:d4d1951a4202 58 if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_SJISChar != 1 )
nameless129 1:d4d1951a4202 59 {
nameless129 1:d4d1951a4202 60 f_SJISChar = 1;
nameless129 1:d4d1951a4202 61 }
nameless129 1:d4d1951a4202 62 else
nameless129 1:d4d1951a4202 63 {
nameless129 10:e261964e4989 64 if( f_SJISChar == 1)
nameless129 10:e261964e4989 65 {
nameless129 10:e261964e4989 66 f_SJISChar = 0;
nameless129 10:e261964e4989 67 }
nameless129 10:e261964e4989 68 else
nameless129 10:e261964e4989 69 {
nameless129 10:e261964e4989 70 CountChar++;
nameless129 10:e261964e4989 71 }
nameless129 1:d4d1951a4202 72 }
nameless129 1:d4d1951a4202 73 str++;
nameless129 1:d4d1951a4202 74 c = *str;
nameless129 1:d4d1951a4202 75 }
nameless129 1:d4d1951a4202 76 return CountChar;
nameless129 1:d4d1951a4202 77 }
nameless129 0:64f46cf1b2b4 78 void SPILineOut(unsigned char setLine)
nameless129 0:64f46cf1b2b4 79 {
nameless129 0:64f46cf1b2b4 80 unsigned int data[3]={0};
nameless129 0:64f46cf1b2b4 81 unsigned int i = 0;
nameless129 0:64f46cf1b2b4 82 for(i=0;i<=5;i++)
nameless129 0:64f46cf1b2b4 83 {
nameless129 0:64f46cf1b2b4 84 data[0] |= ((ImageBuf[2][setLine]>>(15-i))&0x01) << (15-(3*i));
nameless129 0:64f46cf1b2b4 85 }
nameless129 0:64f46cf1b2b4 86 for(i=0;i<=4;i++)
nameless129 0:64f46cf1b2b4 87 {
nameless129 0:64f46cf1b2b4 88 data[0] |= ((ImageBuf[1][setLine]>>(15-i))&0x01) << (14-(3*i));
nameless129 0:64f46cf1b2b4 89 data[0] |= ((ImageBuf[0][setLine]>>(15-i))&0x01) << (13-(3*i));
nameless129 0:64f46cf1b2b4 90 }
nameless129 0:64f46cf1b2b4 91
nameless129 0:64f46cf1b2b4 92 for(i=0;i<=5;i++)
nameless129 0:64f46cf1b2b4 93 {
nameless129 0:64f46cf1b2b4 94 data[1] |= ((ImageBuf[1][setLine]>>(10-i))&0x01) << (15-(3*i));
nameless129 0:64f46cf1b2b4 95 }
nameless129 0:64f46cf1b2b4 96 for(i=0;i<=4;i++)
nameless129 0:64f46cf1b2b4 97 {
nameless129 0:64f46cf1b2b4 98 data[1] |= ((ImageBuf[0][setLine]>>(10-i))&0x01) << (14-(3*i));
nameless129 0:64f46cf1b2b4 99 data[1] |= ((ImageBuf[2][setLine]>>(9-i))&0x01) << (13-(3*i));
nameless129 0:64f46cf1b2b4 100 }
nameless129 0:64f46cf1b2b4 101
nameless129 0:64f46cf1b2b4 102 for(i=0;i<=5;i++)
nameless129 0:64f46cf1b2b4 103 {
nameless129 0:64f46cf1b2b4 104 data[2] |= ((ImageBuf[0][setLine]>>(5-i))&0x01) << (15-(3*i));
nameless129 0:64f46cf1b2b4 105 }
nameless129 0:64f46cf1b2b4 106 for(i=0;i<=4;i++)
nameless129 0:64f46cf1b2b4 107 {
nameless129 0:64f46cf1b2b4 108 data[2] |= ((ImageBuf[2][setLine]>>(4-i))&0x01) << (14-(3*i));
nameless129 0:64f46cf1b2b4 109 data[2] |= ((ImageBuf[1][setLine]>>(4-i))&0x01) << (13-(3*i));
nameless129 0:64f46cf1b2b4 110 }
nameless129 0:64f46cf1b2b4 111 spi.write(data[0]);
nameless129 0:64f46cf1b2b4 112 spi.write(data[1]);
nameless129 0:64f46cf1b2b4 113 spi.write(data[2]);
nameless129 0:64f46cf1b2b4 114 }
nameless129 0:64f46cf1b2b4 115
nameless129 1:d4d1951a4202 116 void outBordData()
nameless129 0:64f46cf1b2b4 117 {
nameless129 1:d4d1951a4202 118 unsigned char ch = 0,Max_ch=0;
nameless129 0:64f46cf1b2b4 119 unsigned int i = 0;
nameless129 1:d4d1951a4202 120 Max_ch = (DISPLAY_XSIZE-16)/16;
nameless129 1:d4d1951a4202 121 for(ch=0;ch<=Max_ch;ch++)
nameless129 0:64f46cf1b2b4 122 {
nameless129 1:d4d1951a4202 123 wait_us(10);
nameless129 4:70a1803901d1 124 buffer_CS = 0x01 << ch;
nameless129 1:d4d1951a4202 125 for(i=(ch*16);i<(ch*16+16);i++)
nameless129 1:d4d1951a4202 126 {
nameless129 1:d4d1951a4202 127 SPILineOut(i);
nameless129 1:d4d1951a4202 128 }
nameless129 0:64f46cf1b2b4 129 }
nameless129 0:64f46cf1b2b4 130 }
nameless129 0:64f46cf1b2b4 131
nameless129 1:d4d1951a4202 132 void bufLeftShift_Loop(void)
nameless129 1:d4d1951a4202 133 {
nameless129 1:d4d1951a4202 134 signed int i = 0;
nameless129 1:d4d1951a4202 135
nameless129 1:d4d1951a4202 136 for(i=(DISPLAY_XSIZE-1);i>=1;i--)
nameless129 1:d4d1951a4202 137 {
nameless129 1:d4d1951a4202 138 ImageBuf[0][i] = ImageBuf[0][i-1];
nameless129 1:d4d1951a4202 139 ImageBuf[1][i] = ImageBuf[1][i-1];
nameless129 1:d4d1951a4202 140 ImageBuf[2][i] = ImageBuf[2][i-1];
nameless129 1:d4d1951a4202 141 }
nameless129 1:d4d1951a4202 142 ImageBuf[0][0] = ImageBuf[0][(DISPLAY_XSIZE-1)];
nameless129 1:d4d1951a4202 143 ImageBuf[1][0] = ImageBuf[1][(DISPLAY_XSIZE-1)];
nameless129 1:d4d1951a4202 144 ImageBuf[2][0] = ImageBuf[2][(DISPLAY_XSIZE-1)];
nameless129 1:d4d1951a4202 145
nameless129 1:d4d1951a4202 146 }
nameless129 1:d4d1951a4202 147
nameless129 0:64f46cf1b2b4 148 void bufLeftShift(void)
nameless129 1:d4d1951a4202 149 {
nameless129 0:64f46cf1b2b4 150 signed int i = 0;
nameless129 0:64f46cf1b2b4 151
nameless129 1:d4d1951a4202 152 for(i=(DISPLAY_XSIZE-1);i>=1;i--)
nameless129 1:d4d1951a4202 153 {
nameless129 1:d4d1951a4202 154 ImageBuf[0][i] = ImageBuf[0][i-1];
nameless129 1:d4d1951a4202 155 ImageBuf[1][i] = ImageBuf[1][i-1];
nameless129 1:d4d1951a4202 156 ImageBuf[2][i] = ImageBuf[2][i-1];
nameless129 1:d4d1951a4202 157 }
nameless129 1:d4d1951a4202 158 ImageBuf[0][0] = 0;
nameless129 1:d4d1951a4202 159 ImageBuf[1][0] = 0;
nameless129 1:d4d1951a4202 160 ImageBuf[2][0] = 0;
nameless129 1:d4d1951a4202 161 }
nameless129 1:d4d1951a4202 162
nameless129 1:d4d1951a4202 163 void TestMode(void)
nameless129 1:d4d1951a4202 164 {
nameless129 1:d4d1951a4202 165 unsigned char i = 0;
nameless129 1:d4d1951a4202 166
nameless129 1:d4d1951a4202 167 for(i=0;i<16;i++)
nameless129 1:d4d1951a4202 168 {
nameless129 1:d4d1951a4202 169 ImageBuf[0][i] = 0xffff;
nameless129 1:d4d1951a4202 170 }
nameless129 1:d4d1951a4202 171 for(i=16;i<16+16;i++)
nameless129 1:d4d1951a4202 172 {
nameless129 1:d4d1951a4202 173 ImageBuf[1][i] = 0xffff;
nameless129 1:d4d1951a4202 174 }
nameless129 1:d4d1951a4202 175 for(i=32;i<32+16;i++)
nameless129 1:d4d1951a4202 176 {
nameless129 1:d4d1951a4202 177 ImageBuf[2][i] = 0xffff;
nameless129 1:d4d1951a4202 178 }
nameless129 1:d4d1951a4202 179
nameless129 1:d4d1951a4202 180 outBordData();
nameless129 1:d4d1951a4202 181
nameless129 1:d4d1951a4202 182 while(1)
nameless129 1:d4d1951a4202 183 {
nameless129 1:d4d1951a4202 184 wait(0.1);
nameless129 1:d4d1951a4202 185 bufLeftShift_Loop();
nameless129 1:d4d1951a4202 186 outBordData();
nameless129 1:d4d1951a4202 187 }
nameless129 1:d4d1951a4202 188 }
nameless129 1:d4d1951a4202 189
nameless129 1:d4d1951a4202 190 void SetRandamColer(void)
nameless129 1:d4d1951a4202 191 {
nameless129 1:d4d1951a4202 192 unsigned char color = 0;
nameless129 1:d4d1951a4202 193 unsigned int i=0,j=0;
nameless129 1:d4d1951a4202 194
nameless129 1:d4d1951a4202 195 memset(ColerMap,0,sizeof(ColerMap));
nameless129 1:d4d1951a4202 196 for(j=0;j<DISPLAY_XSIZE;j++)
nameless129 0:64f46cf1b2b4 197 {
nameless129 1:d4d1951a4202 198 for(i=0;i<16;i++)
nameless129 1:d4d1951a4202 199 {
nameless129 1:d4d1951a4202 200 color = rand()%7;
nameless129 1:d4d1951a4202 201 if(color == COLOR_G || color == COLOR_C || color == COLOR_Y || color == COLOR_W)
nameless129 1:d4d1951a4202 202 {
nameless129 1:d4d1951a4202 203 ColerMap[0][j] |= 1<<i;
nameless129 1:d4d1951a4202 204 }
nameless129 1:d4d1951a4202 205 if(color == COLOR_R || color == COLOR_Y || color == COLOR_M || color == COLOR_W)
nameless129 1:d4d1951a4202 206 {
nameless129 1:d4d1951a4202 207 ColerMap[1][j] |= 1<<i;
nameless129 1:d4d1951a4202 208 }
nameless129 1:d4d1951a4202 209 if(color == COLOR_B || color == COLOR_C || color == COLOR_M || color == COLOR_W)
nameless129 1:d4d1951a4202 210 {
nameless129 1:d4d1951a4202 211 ColerMap[2][j] |= 1<<i;
nameless129 1:d4d1951a4202 212 }
nameless129 1:d4d1951a4202 213 }
nameless129 0:64f46cf1b2b4 214 }
nameless129 1:d4d1951a4202 215 }
nameless129 1:d4d1951a4202 216
nameless129 1:d4d1951a4202 217 void ApplyColerMap(void)
nameless129 1:d4d1951a4202 218 {
nameless129 1:d4d1951a4202 219 unsigned i = 0;
nameless129 1:d4d1951a4202 220 for(i=0;i<DISPLAY_XSIZE;i++)
nameless129 1:d4d1951a4202 221 {
nameless129 1:d4d1951a4202 222 ImageBuf[0][i] = ImageBuf[0][i]&ColerMap[0][i];
nameless129 1:d4d1951a4202 223 ImageBuf[1][i] = ImageBuf[1][i]&ColerMap[1][i];
nameless129 1:d4d1951a4202 224 ImageBuf[2][i] = ImageBuf[2][i]&ColerMap[2][i];
nameless129 1:d4d1951a4202 225 }
nameless129 1:d4d1951a4202 226 }
nameless129 1:d4d1951a4202 227
nameless129 0:64f46cf1b2b4 228 int main()
nameless129 0:64f46cf1b2b4 229 {
nameless129 0:64f46cf1b2b4 230 unsigned int i = 0;
nameless129 10:e261964e4989 231 unsigned int s_Strs = 0;
nameless129 4:70a1803901d1 232
nameless129 10:e261964e4989 233 char strs[100]={};
nameless129 10:e261964e4989 234 memset(strs,' ',sizeof(strs));
MACRUM 6:d5bed5797bb1 235 // Read text file for display message, if exist.
MACRUM 6:d5bed5797bb1 236 FILE *fp;
MACRUM 6:d5bed5797bb1 237 fp = fopen("/local/message.txt", "r");
MACRUM 6:d5bed5797bb1 238 if (fp != NULL) {
MACRUM 6:d5bed5797bb1 239 fgets(strs, 100, fp);
MACRUM 6:d5bed5797bb1 240 fclose(fp);
MACRUM 6:d5bed5797bb1 241 #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler
MACRUM 6:d5bed5797bb1 242 free(fp);
MACRUM 6:d5bed5797bb1 243 #endif
MACRUM 6:d5bed5797bb1 244 }
nameless129 0:64f46cf1b2b4 245 spi.format(16,1);
nameless129 0:64f46cf1b2b4 246 spi.frequency(1000000);
nameless129 0:64f46cf1b2b4 247
MACRUM 7:bfd5c9d80f48 248 memset(ImageBuf,0,sizeof(ImageBuf));
nameless129 3:5605bd4d6295 249
nameless129 0:64f46cf1b2b4 250 i=0;
nameless129 5:6ff934d885d2 251 wait(0.2);
nameless129 1:d4d1951a4202 252 //TestMode();
nameless129 1:d4d1951a4202 253 SetRandamColer();
MACRUM 7:bfd5c9d80f48 254
nameless129 1:d4d1951a4202 255 while(1)
nameless129 1:d4d1951a4202 256 {
nameless129 1:d4d1951a4202 257 memset(ImageBuf,0,sizeof(ImageBuf));
nameless129 10:e261964e4989 258 s_Strs = CountChar_half_W(strs)*8;
nameless129 10:e261964e4989 259 s_Strs += CountChar_full_W(strs)*16;
nameless129 10:e261964e4989 260 for(i=0; i<DISPLAY_XSIZE+(s_Strs)-16; i++)
nameless129 1:d4d1951a4202 261 {
nameless129 10:e261964e4989 262 #if 1
MACRUM 7:bfd5c9d80f48 263 drawStr15x16(strs ,i, COLOR_W);
nameless129 1:d4d1951a4202 264 ApplyColerMap();
nameless129 10:e261964e4989 265 #else
nameless129 10:e261964e4989 266 drawStr15x16_AutoColer(strs ,i);
nameless129 10:e261964e4989 267 #endif
nameless129 1:d4d1951a4202 268 outBordData();
MACRUM 6:d5bed5797bb1 269 wait(0.05);
nameless129 1:d4d1951a4202 270 }
nameless129 1:d4d1951a4202 271 }
nameless129 0:64f46cf1b2b4 272 }