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

Dependencies:   mbed

Fork of LEDMatrix_Master by en 129

Committer:
MACRUM
Date:
Sat Nov 16 05:16:19 2013 +0000
Revision:
7:bfd5c9d80f48
Parent:
6:d5bed5797bb1
Child:
8:b24bd32cd2ed
Added mixed display feature with Kanji and ASCII (half width font).

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 1:d4d1951a4202 18 unsigned int CountChar(char *str)
nameless129 1:d4d1951a4202 19 {
nameless129 1:d4d1951a4202 20 unsigned char f_SJISChar = 0;
nameless129 1:d4d1951a4202 21 unsigned char c = 0;
nameless129 1:d4d1951a4202 22 unsigned int CountChar = 0;
nameless129 1:d4d1951a4202 23
nameless129 1:d4d1951a4202 24 c = *str;
nameless129 1:d4d1951a4202 25 while(c != '\0')
nameless129 1:d4d1951a4202 26 {
nameless129 1:d4d1951a4202 27 //2バイト文字の判定
nameless129 1:d4d1951a4202 28 if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_SJISChar != 1 )
nameless129 1:d4d1951a4202 29 {
nameless129 1:d4d1951a4202 30 f_SJISChar = 1;
nameless129 1:d4d1951a4202 31 }
nameless129 1:d4d1951a4202 32 else
nameless129 1:d4d1951a4202 33 {
nameless129 1:d4d1951a4202 34 f_SJISChar = 0;
nameless129 1:d4d1951a4202 35 CountChar++;
nameless129 1:d4d1951a4202 36 }
nameless129 1:d4d1951a4202 37 str++;
nameless129 1:d4d1951a4202 38 c = *str;
nameless129 1:d4d1951a4202 39 }
nameless129 1:d4d1951a4202 40 return CountChar;
nameless129 1:d4d1951a4202 41 }
nameless129 1:d4d1951a4202 42
nameless129 0:64f46cf1b2b4 43 void SPILineOut(unsigned char setLine)
nameless129 0:64f46cf1b2b4 44 {
nameless129 0:64f46cf1b2b4 45 unsigned int data[3]={0};
nameless129 0:64f46cf1b2b4 46 unsigned int i = 0;
nameless129 0:64f46cf1b2b4 47 for(i=0;i<=5;i++)
nameless129 0:64f46cf1b2b4 48 {
nameless129 0:64f46cf1b2b4 49 data[0] |= ((ImageBuf[2][setLine]>>(15-i))&0x01) << (15-(3*i));
nameless129 0:64f46cf1b2b4 50 }
nameless129 0:64f46cf1b2b4 51 for(i=0;i<=4;i++)
nameless129 0:64f46cf1b2b4 52 {
nameless129 0:64f46cf1b2b4 53 data[0] |= ((ImageBuf[1][setLine]>>(15-i))&0x01) << (14-(3*i));
nameless129 0:64f46cf1b2b4 54 data[0] |= ((ImageBuf[0][setLine]>>(15-i))&0x01) << (13-(3*i));
nameless129 0:64f46cf1b2b4 55 }
nameless129 0:64f46cf1b2b4 56
nameless129 0:64f46cf1b2b4 57 for(i=0;i<=5;i++)
nameless129 0:64f46cf1b2b4 58 {
nameless129 0:64f46cf1b2b4 59 data[1] |= ((ImageBuf[1][setLine]>>(10-i))&0x01) << (15-(3*i));
nameless129 0:64f46cf1b2b4 60 }
nameless129 0:64f46cf1b2b4 61 for(i=0;i<=4;i++)
nameless129 0:64f46cf1b2b4 62 {
nameless129 0:64f46cf1b2b4 63 data[1] |= ((ImageBuf[0][setLine]>>(10-i))&0x01) << (14-(3*i));
nameless129 0:64f46cf1b2b4 64 data[1] |= ((ImageBuf[2][setLine]>>(9-i))&0x01) << (13-(3*i));
nameless129 0:64f46cf1b2b4 65 }
nameless129 0:64f46cf1b2b4 66
nameless129 0:64f46cf1b2b4 67 for(i=0;i<=5;i++)
nameless129 0:64f46cf1b2b4 68 {
nameless129 0:64f46cf1b2b4 69 data[2] |= ((ImageBuf[0][setLine]>>(5-i))&0x01) << (15-(3*i));
nameless129 0:64f46cf1b2b4 70 }
nameless129 0:64f46cf1b2b4 71 for(i=0;i<=4;i++)
nameless129 0:64f46cf1b2b4 72 {
nameless129 0:64f46cf1b2b4 73 data[2] |= ((ImageBuf[2][setLine]>>(4-i))&0x01) << (14-(3*i));
nameless129 0:64f46cf1b2b4 74 data[2] |= ((ImageBuf[1][setLine]>>(4-i))&0x01) << (13-(3*i));
nameless129 0:64f46cf1b2b4 75 }
nameless129 0:64f46cf1b2b4 76 spi.write(data[0]);
nameless129 0:64f46cf1b2b4 77 spi.write(data[1]);
nameless129 0:64f46cf1b2b4 78 spi.write(data[2]);
nameless129 0:64f46cf1b2b4 79 }
nameless129 0:64f46cf1b2b4 80
nameless129 1:d4d1951a4202 81 void outBordData()
nameless129 0:64f46cf1b2b4 82 {
nameless129 1:d4d1951a4202 83 unsigned char ch = 0,Max_ch=0;
nameless129 0:64f46cf1b2b4 84 unsigned int i = 0;
nameless129 1:d4d1951a4202 85 Max_ch = (DISPLAY_XSIZE-16)/16;
nameless129 1:d4d1951a4202 86 for(ch=0;ch<=Max_ch;ch++)
nameless129 0:64f46cf1b2b4 87 {
nameless129 1:d4d1951a4202 88 wait_us(10);
nameless129 4:70a1803901d1 89 buffer_CS = 0x01 << ch;
nameless129 1:d4d1951a4202 90 for(i=(ch*16);i<(ch*16+16);i++)
nameless129 1:d4d1951a4202 91 {
nameless129 1:d4d1951a4202 92 SPILineOut(i);
nameless129 1:d4d1951a4202 93 }
nameless129 0:64f46cf1b2b4 94 }
nameless129 0:64f46cf1b2b4 95 }
nameless129 0:64f46cf1b2b4 96
nameless129 1:d4d1951a4202 97 void bufLeftShift_Loop(void)
nameless129 1:d4d1951a4202 98 {
nameless129 1:d4d1951a4202 99 signed int i = 0;
nameless129 1:d4d1951a4202 100
nameless129 1:d4d1951a4202 101 for(i=(DISPLAY_XSIZE-1);i>=1;i--)
nameless129 1:d4d1951a4202 102 {
nameless129 1:d4d1951a4202 103 ImageBuf[0][i] = ImageBuf[0][i-1];
nameless129 1:d4d1951a4202 104 ImageBuf[1][i] = ImageBuf[1][i-1];
nameless129 1:d4d1951a4202 105 ImageBuf[2][i] = ImageBuf[2][i-1];
nameless129 1:d4d1951a4202 106 }
nameless129 1:d4d1951a4202 107 ImageBuf[0][0] = ImageBuf[0][(DISPLAY_XSIZE-1)];
nameless129 1:d4d1951a4202 108 ImageBuf[1][0] = ImageBuf[1][(DISPLAY_XSIZE-1)];
nameless129 1:d4d1951a4202 109 ImageBuf[2][0] = ImageBuf[2][(DISPLAY_XSIZE-1)];
nameless129 1:d4d1951a4202 110
nameless129 1:d4d1951a4202 111 }
nameless129 1:d4d1951a4202 112
nameless129 0:64f46cf1b2b4 113 void bufLeftShift(void)
nameless129 1:d4d1951a4202 114 {
nameless129 0:64f46cf1b2b4 115 signed int i = 0;
nameless129 0:64f46cf1b2b4 116
nameless129 1:d4d1951a4202 117 for(i=(DISPLAY_XSIZE-1);i>=1;i--)
nameless129 1:d4d1951a4202 118 {
nameless129 1:d4d1951a4202 119 ImageBuf[0][i] = ImageBuf[0][i-1];
nameless129 1:d4d1951a4202 120 ImageBuf[1][i] = ImageBuf[1][i-1];
nameless129 1:d4d1951a4202 121 ImageBuf[2][i] = ImageBuf[2][i-1];
nameless129 1:d4d1951a4202 122 }
nameless129 1:d4d1951a4202 123 ImageBuf[0][0] = 0;
nameless129 1:d4d1951a4202 124 ImageBuf[1][0] = 0;
nameless129 1:d4d1951a4202 125 ImageBuf[2][0] = 0;
nameless129 1:d4d1951a4202 126 }
nameless129 1:d4d1951a4202 127
nameless129 1:d4d1951a4202 128 void TestMode(void)
nameless129 1:d4d1951a4202 129 {
nameless129 1:d4d1951a4202 130 unsigned char i = 0;
nameless129 1:d4d1951a4202 131
nameless129 1:d4d1951a4202 132 for(i=0;i<16;i++)
nameless129 1:d4d1951a4202 133 {
nameless129 1:d4d1951a4202 134 ImageBuf[0][i] = 0xffff;
nameless129 1:d4d1951a4202 135 }
nameless129 1:d4d1951a4202 136 for(i=16;i<16+16;i++)
nameless129 1:d4d1951a4202 137 {
nameless129 1:d4d1951a4202 138 ImageBuf[1][i] = 0xffff;
nameless129 1:d4d1951a4202 139 }
nameless129 1:d4d1951a4202 140 for(i=32;i<32+16;i++)
nameless129 1:d4d1951a4202 141 {
nameless129 1:d4d1951a4202 142 ImageBuf[2][i] = 0xffff;
nameless129 1:d4d1951a4202 143 }
nameless129 1:d4d1951a4202 144
nameless129 1:d4d1951a4202 145 outBordData();
nameless129 1:d4d1951a4202 146
nameless129 1:d4d1951a4202 147 while(1)
nameless129 1:d4d1951a4202 148 {
nameless129 1:d4d1951a4202 149 wait(0.1);
nameless129 1:d4d1951a4202 150 bufLeftShift_Loop();
nameless129 1:d4d1951a4202 151 outBordData();
nameless129 1:d4d1951a4202 152 }
nameless129 1:d4d1951a4202 153 }
nameless129 1:d4d1951a4202 154
nameless129 1:d4d1951a4202 155 void SetRandamColer(void)
nameless129 1:d4d1951a4202 156 {
nameless129 1:d4d1951a4202 157 unsigned char color = 0;
nameless129 1:d4d1951a4202 158 unsigned int i=0,j=0;
nameless129 1:d4d1951a4202 159
nameless129 1:d4d1951a4202 160 memset(ColerMap,0,sizeof(ColerMap));
nameless129 1:d4d1951a4202 161 for(j=0;j<DISPLAY_XSIZE;j++)
nameless129 0:64f46cf1b2b4 162 {
nameless129 1:d4d1951a4202 163 for(i=0;i<16;i++)
nameless129 1:d4d1951a4202 164 {
nameless129 1:d4d1951a4202 165 color = rand()%7;
nameless129 1:d4d1951a4202 166 if(color == COLOR_G || color == COLOR_C || color == COLOR_Y || color == COLOR_W)
nameless129 1:d4d1951a4202 167 {
nameless129 1:d4d1951a4202 168 ColerMap[0][j] |= 1<<i;
nameless129 1:d4d1951a4202 169 }
nameless129 1:d4d1951a4202 170 if(color == COLOR_R || color == COLOR_Y || color == COLOR_M || color == COLOR_W)
nameless129 1:d4d1951a4202 171 {
nameless129 1:d4d1951a4202 172 ColerMap[1][j] |= 1<<i;
nameless129 1:d4d1951a4202 173 }
nameless129 1:d4d1951a4202 174 if(color == COLOR_B || color == COLOR_C || color == COLOR_M || color == COLOR_W)
nameless129 1:d4d1951a4202 175 {
nameless129 1:d4d1951a4202 176 ColerMap[2][j] |= 1<<i;
nameless129 1:d4d1951a4202 177 }
nameless129 1:d4d1951a4202 178 }
nameless129 0:64f46cf1b2b4 179 }
nameless129 1:d4d1951a4202 180 }
nameless129 1:d4d1951a4202 181
nameless129 1:d4d1951a4202 182 void ApplyColerMap(void)
nameless129 1:d4d1951a4202 183 {
nameless129 1:d4d1951a4202 184 unsigned i = 0;
nameless129 1:d4d1951a4202 185 for(i=0;i<DISPLAY_XSIZE;i++)
nameless129 1:d4d1951a4202 186 {
nameless129 1:d4d1951a4202 187 ImageBuf[0][i] = ImageBuf[0][i]&ColerMap[0][i];
nameless129 1:d4d1951a4202 188 ImageBuf[1][i] = ImageBuf[1][i]&ColerMap[1][i];
nameless129 1:d4d1951a4202 189 ImageBuf[2][i] = ImageBuf[2][i]&ColerMap[2][i];
nameless129 1:d4d1951a4202 190 }
nameless129 1:d4d1951a4202 191 }
nameless129 1:d4d1951a4202 192
nameless129 0:64f46cf1b2b4 193 int main()
nameless129 0:64f46cf1b2b4 194 {
nameless129 0:64f46cf1b2b4 195 unsigned int i = 0;
nameless129 3:5605bd4d6295 196 char tmpstr[100];
nameless129 4:70a1803901d1 197
nameless129 4:70a1803901d1 198 /*=====================*/
nameless129 4:70a1803901d1 199 /*ここを書き換えてください*/
nameless129 4:70a1803901d1 200 /*=====================*/
nameless129 4:70a1803901d1 201 //ET2013 ARMブース mbedコーナーにようこそ!
MACRUM 6:d5bed5797bb1 202
nameless129 4:70a1803901d1 203 char strs[100]={0x82,0x64,0x82,0x73,0x82,0x51,0x82,0x4f,0x82,0x50,0x82,0x52,0x81,0x40,0x82,0x60,
nameless129 4:70a1803901d1 204 0x82,0x71,0x82,0x6c,0x83,0x75,0x81,0x5b,0x83,0x58,0x81,0x40,0x82,0x8d,0x82,0x82,
nameless129 4:70a1803901d1 205 0x82,0x85,0x82,0x84,0x83,0x52,0x81,0x5b,0x83,0x69,0x81,0x5b,0x82,0xc9,0x82,0xe6,
nameless129 4:70a1803901d1 206 0x82,0xa4,0x82,0xb1,0x82,0xbb,0x81,0x49,0x00};
nameless129 4:70a1803901d1 207
MACRUM 6:d5bed5797bb1 208 // Read text file for display message, if exist.
MACRUM 6:d5bed5797bb1 209 FILE *fp;
MACRUM 6:d5bed5797bb1 210 fp = fopen("/local/message.txt", "r");
MACRUM 6:d5bed5797bb1 211 if (fp != NULL) {
MACRUM 6:d5bed5797bb1 212 fgets(strs, 100, fp);
MACRUM 6:d5bed5797bb1 213 fclose(fp);
MACRUM 6:d5bed5797bb1 214 #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler
MACRUM 6:d5bed5797bb1 215 free(fp);
MACRUM 6:d5bed5797bb1 216 #endif
MACRUM 6:d5bed5797bb1 217 }
MACRUM 6:d5bed5797bb1 218
nameless129 0:64f46cf1b2b4 219 spi.format(16,1);
nameless129 0:64f46cf1b2b4 220 spi.frequency(1000000);
nameless129 0:64f46cf1b2b4 221
nameless129 3:5605bd4d6295 222 memset(tmpstr,0,sizeof(tmpstr));
MACRUM 7:bfd5c9d80f48 223 memset(ImageBuf,0,sizeof(ImageBuf));
nameless129 3:5605bd4d6295 224
nameless129 0:64f46cf1b2b4 225 i=0;
nameless129 3:5605bd4d6295 226 wait(1);
nameless129 1:d4d1951a4202 227 //TestMode();
nameless129 1:d4d1951a4202 228 SetRandamColer();
MACRUM 7:bfd5c9d80f48 229
nameless129 1:d4d1951a4202 230 while(1)
nameless129 1:d4d1951a4202 231 {
nameless129 1:d4d1951a4202 232 memset(ImageBuf,0,sizeof(ImageBuf));
nameless129 0:64f46cf1b2b4 233
MACRUM 7:bfd5c9d80f48 234 for(i=0; i<DISPLAY_XSIZE+(16*CountChar(strs)-1); i++)
nameless129 1:d4d1951a4202 235 {
MACRUM 7:bfd5c9d80f48 236 drawStr15x16(strs ,i, COLOR_W);
nameless129 1:d4d1951a4202 237 ApplyColerMap();
nameless129 1:d4d1951a4202 238 outBordData();
MACRUM 6:d5bed5797bb1 239 wait(0.05);
nameless129 1:d4d1951a4202 240 }
nameless129 1:d4d1951a4202 241 }
nameless129 0:64f46cf1b2b4 242 }