LEDMatrixDisplay Program 文字ごとに色を変更できるように修正
Fork of LEDMatrix_Master by
Diff: main.cpp
- Revision:
- 4:70a1803901d1
- Parent:
- 3:5605bd4d6295
- Child:
- 5:6ff934d885d2
- Child:
- 6:d5bed5797bb1
--- a/main.cpp Thu Nov 07 14:08:53 2013 +0000 +++ b/main.cpp Thu Nov 07 15:00:28 2013 +0000 @@ -2,95 +2,18 @@ #include "mbed.h" #include <string.h> +#include "displayCom.h" #include "kfont8.h" -#include "process_fonts.h" - -unsigned char matrixdata[32]; -SPI spi(p5, p6, p7); // mosi, miso, sclk +#include "8x8fontsLib.h" +#include "15x16fontsLib.h" -BusOut bords(p15,p16,p17,p18,p19,p20); -Serial pc(USBTX, USBRX); // tx, rx +SPI spi(p5, p6, p7); //mosi, miso, sclk +BusOut buffer_CS(p15,p16,p17,p18,p19,p20); +Serial pc(USBTX, USBRX); // tx, rx -SPI spi2(p11, p12, p13); // mosi, miso, sclk -DigitalOut cs(p14); - -#define DISPLAY_XSIZE (96) unsigned int ImageBuf[3][DISPLAY_XSIZE];//16*6 unsigned int ColerMap[3][DISPLAY_XSIZE]; -void read_font(unsigned short code) { - unsigned char c1, c2, MSB,LSB; - uint32_t Address, seq; - - // SJIS to kuten code conversion - c1 = (code>>8); - c2 = (code & 0xFF); - seq = (c1<=159 ? c1-129 : c1-193)*188 + (c2<=126 ? c2-64 : c2-65); - MSB = seq / 94 + 1; - LSB = seq % 94 + 1; - Address = 0; - - if( MSB >= 1 && MSB <= 15 && LSB >= 1 && LSB <= 94) - Address =( (MSB - 1) * 94 + (LSB - 1))*32; - else if(MSB >= 16 && MSB <= 47 && LSB >= 1 && LSB <= 94) - Address =( (MSB - 16) * 94 + (LSB - 1))*32 + 0x0AA40L; - else if(MSB >= 48 && MSB <= 84 && LSB >= 1 && LSB <= 94) - Address = ((MSB - 48) * 94 + (LSB - 1))*32 + 0x21CDFL; - else if(MSB == 85 && LSB >= 1 && LSB <= 94) - Address = ((MSB - 85) * 94 + (LSB - 1))*32 + 0x3C4A0L; - else if(MSB >= 88 && MSB <= 89 && LSB >= 1 && LSB <= 94) - Address = ((MSB - 88) * 94 + (LSB - 1))*32 + 0x3D060L; - - // Deselect the device - cs = 1; - - // Setup the spi for 8 bit data, high steady state clock - spi2.format(8,3); - spi2.frequency(1000000); - - // Select the device by seting chip select low - cs = 0; - spi2.write(0x03); // Read data byte - spi2.write(Address>>16 & 0xff); - spi2.write(Address>>8 & 0xff); - spi2.write(Address & 0xff); - - // Send a dummy byte to receive the contents of the WHOAMI register - for(int i=0; i<32; i++) - { - matrixdata[i]=spi2.write(0x00); - } - - // Deselect the device - cs = 1; -} - -void draw_kanji_15x16(int pos_x,unsigned char color) -{ - int i = 0; - for(i=0;i<16;i++) - { - if( ((signed int)(15-i+pos_x) >= 0) && ((15-i+pos_x) <= (DISPLAY_XSIZE-1)) ) - { - if(color == COLOR_G || color == COLOR_C || color == COLOR_Y || color == COLOR_W) - { - ImageBuf[0][15-i+pos_x] = matrixdata[i]; - ImageBuf[0][15-i+pos_x] |= matrixdata[i+16]<<8; - } - if(color == COLOR_R || color == COLOR_Y || color == COLOR_M || color == COLOR_W) - { - ImageBuf[1][15-i+pos_x] = matrixdata[i]; - ImageBuf[1][15-i+pos_x] |= matrixdata[i+16]<<8; - } - if(color == COLOR_B || color == COLOR_C || color == COLOR_M || color == COLOR_W) - { - ImageBuf[2][15-i+pos_x] = matrixdata[i]; - ImageBuf[2][15-i+pos_x] |= matrixdata[i+16]<<8; - } - } - } -} - unsigned int CountChar(char *str) { unsigned char f_SJISChar = 0; @@ -116,45 +39,6 @@ return CountChar; } -void drawStr15x16(char *str ,int pos_x,unsigned char color) -{ - unsigned char f_SJISChar = 0; - unsigned char c = 0; - unsigned int SJISChar = 0; - unsigned int CountChar = 0; - - c = *str; - while(c != '\0') - { - //2バイト文字の判定 - if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_SJISChar != 1 ) - { - SJISChar = c; - f_SJISChar = 1; - } - else if(f_SJISChar == 1) - { - SJISChar = (SJISChar<<8) | c; - f_SJISChar = 0; - read_font(SJISChar); - draw_kanji_15x16(pos_x-CountChar*16,color); - CountChar++; - } - else //ASCII文字 - { - SJISChar = c; - f_SJISChar = 0; - read_font(SJISChar); - draw_kanji_15x16(pos_x-CountChar*16,color); - CountChar++; - } - str++; - c = *str; - } -} - - - void SPILineOut(unsigned char setLine) { unsigned int data[3]={0}; @@ -201,7 +85,7 @@ for(ch=0;ch<=Max_ch;ch++) { wait_us(10); - bords = 0x01 << ch; + buffer_CS = 0x01 << ch; for(i=(ch*16);i<(ch*16+16);i++) { SPILineOut(i); @@ -294,39 +178,6 @@ } } -unsigned char ConvHue(unsigned char num) -{ - unsigned char Hue[7] = {COLOR_G,COLOR_C,COLOR_B,COLOR_M,COLOR_R,COLOR_Y,COLOR_W}; - return Hue[num]; - -} - -void SetRainbowColer(void) -{ - unsigned char color = 0; - unsigned int j=0; - - memset(ColerMap,0,sizeof(ColerMap)); - for(j=0;j<DISPLAY_XSIZE;j++) - { - color = ConvHue((++color)%7); - - if(color == COLOR_G || color == COLOR_C || color == COLOR_Y || color == COLOR_W) - { - ColerMap[0][j] |= 0xffff; - } - if(color == COLOR_R || color == COLOR_Y || color == COLOR_M || color == COLOR_W) - { - ColerMap[1][j] |= 0xffff; - } - if(color == COLOR_B || color == COLOR_C || color == COLOR_M || color == COLOR_W) - { - ColerMap[2][j] |= 0xffff; - } - } -} - - void ApplyColerMap(void) { unsigned i = 0; @@ -341,13 +192,18 @@ int main() { - unsigned char f_mode = 0; unsigned int i = 0; - unsigned char coler = 0; char tmpstr[100]; - unsigned int cnt_tmpstr = 0; - char strs[100]={0x82,0x6C,0x82,0x81,0x82,0x8B,0x82,0x85,0x82,0x65,0x82,0x81,0x82,0x89,0x82,0x92, - 0x82,0x73,0x82,0x8F,0x82,0x8B,0x82,0x99,0x82,0x8F,0x82,0x51,0x82,0x4F,0x82,0x50,0x82,0x52,0x00}; + + /*=====================*/ + /*ここを書き換えてください*/ + /*=====================*/ + //ET2013 ARMブース mbedコーナーにようこそ! + char strs[100]={0x82,0x64,0x82,0x73,0x82,0x51,0x82,0x4f,0x82,0x50,0x82,0x52,0x81,0x40,0x82,0x60, + 0x82,0x71,0x82,0x6c,0x83,0x75,0x81,0x5b,0x83,0x58,0x81,0x40,0x82,0x8d,0x82,0x82, + 0x82,0x85,0x82,0x84,0x83,0x52,0x81,0x5b,0x83,0x69,0x81,0x5b,0x82,0xc9,0x82,0xe6, + 0x82,0xa4,0x82,0xb1,0x82,0xbb,0x81,0x49,0x00}; + spi.format(16,1); spi.frequency(1000000); @@ -358,12 +214,9 @@ wait(1); //TestMode(); SetRandamColer(); -// SetRainbowColer(); while(1) { memset(ImageBuf,0,sizeof(ImageBuf)); -// read_font(0x826d); -// draw_kanji_15x16(0,0); for(i=0;i<DISPLAY_XSIZE+(15*CountChar(strs)-1);i++) { @@ -373,56 +226,4 @@ wait(0.1); } } - while(1) - { - if(f_mode == 0) - { - memset(ImageBuf,0,sizeof(ImageBuf)); - pc.scanf("%s",&strs); - pc.printf("cmdOK\r\n"); - if(strstr(strs,"barusu") != NULL) - { - memset(ImageBuf,0xffff,sizeof(ImageBuf)); - f_mode = 2; - } - else - { - f_mode = 1; - } - } - if(f_mode == 1) - { - drawStr(strs,coler,i,4); - i++; - if(i > (16*6 - 8 )) - { - f_mode = 2; - coler = (coler+1)%7; - i = 0; - } - } - if(f_mode == 2) - { - bufLeftShift(); - i++; - if(i>=((16*6 - 8)*3)) - { - memset(ImageBuf,0,sizeof(ImageBuf)); - i = 0; - f_mode = 1; - } - } - - if(pc.readable()) { - tmpstr[cnt_tmpstr] = pc.getc(); - if(tmpstr[cnt_tmpstr] == '\n') - { - tmpstr[cnt_tmpstr+1] = 0; - pc.printf("%s\r\n",tmpstr); - } - cnt_tmpstr++; - } - outBordData(); - wait(0.1); - } }