LEDMatrixDisplay Program 文字ごとに色を変更できるように修正
Fork of LEDMatrix_Master by
15x16fontsLib.cpp@10:e261964e4989, 2014-03-28 (annotated)
- Committer:
- nameless129
- Date:
- Fri Mar 28 15:33:29 2014 +0000
- Revision:
- 10:e261964e4989
- Parent:
- 7:bfd5c9d80f48
?????????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nameless129 | 4:70a1803901d1 | 1 | #include "mbed.h" |
nameless129 | 4:70a1803901d1 | 2 | #include "displayCom.h" |
nameless129 | 4:70a1803901d1 | 3 | #include "15x16fontsLib.h" |
nameless129 | 4:70a1803901d1 | 4 | |
nameless129 | 4:70a1803901d1 | 5 | SPI FontROM(p11, p12, p13); // mosi, miso, sclk |
nameless129 | 4:70a1803901d1 | 6 | DigitalOut FontROM_CS(p14); |
nameless129 | 4:70a1803901d1 | 7 | |
nameless129 | 4:70a1803901d1 | 8 | |
nameless129 | 4:70a1803901d1 | 9 | unsigned char matrixdata[32]; |
nameless129 | 4:70a1803901d1 | 10 | |
nameless129 | 4:70a1803901d1 | 11 | void read_font(unsigned short code) { |
nameless129 | 4:70a1803901d1 | 12 | unsigned char c1, c2, MSB,LSB; |
nameless129 | 4:70a1803901d1 | 13 | uint32_t Address, seq; |
nameless129 | 4:70a1803901d1 | 14 | |
nameless129 | 4:70a1803901d1 | 15 | // SJIS to kuten code conversion |
nameless129 | 4:70a1803901d1 | 16 | c1 = (code>>8); |
nameless129 | 4:70a1803901d1 | 17 | c2 = (code & 0xFF); |
nameless129 | 4:70a1803901d1 | 18 | seq = (c1<=159 ? c1-129 : c1-193)*188 + (c2<=126 ? c2-64 : c2-65); |
nameless129 | 4:70a1803901d1 | 19 | MSB = seq / 94 + 1; |
nameless129 | 4:70a1803901d1 | 20 | LSB = seq % 94 + 1; |
nameless129 | 4:70a1803901d1 | 21 | Address = 0; |
MACRUM | 7:bfd5c9d80f48 | 22 | |
nameless129 | 4:70a1803901d1 | 23 | if( MSB >= 1 && MSB <= 15 && LSB >= 1 && LSB <= 94) |
nameless129 | 4:70a1803901d1 | 24 | Address =( (MSB - 1) * 94 + (LSB - 1))*32; |
nameless129 | 4:70a1803901d1 | 25 | else if(MSB >= 16 && MSB <= 47 && LSB >= 1 && LSB <= 94) |
nameless129 | 4:70a1803901d1 | 26 | Address =( (MSB - 16) * 94 + (LSB - 1))*32 + 0x0AA40L; |
nameless129 | 4:70a1803901d1 | 27 | else if(MSB >= 48 && MSB <= 84 && LSB >= 1 && LSB <= 94) |
nameless129 | 4:70a1803901d1 | 28 | Address = ((MSB - 48) * 94 + (LSB - 1))*32 + 0x21CDFL; |
nameless129 | 4:70a1803901d1 | 29 | else if(MSB == 85 && LSB >= 1 && LSB <= 94) |
nameless129 | 4:70a1803901d1 | 30 | Address = ((MSB - 85) * 94 + (LSB - 1))*32 + 0x3C4A0L; |
nameless129 | 4:70a1803901d1 | 31 | else if(MSB >= 88 && MSB <= 89 && LSB >= 1 && LSB <= 94) |
nameless129 | 4:70a1803901d1 | 32 | Address = ((MSB - 88) * 94 + (LSB - 1))*32 + 0x3D060L; |
nameless129 | 4:70a1803901d1 | 33 | |
MACRUM | 7:bfd5c9d80f48 | 34 | // if ASCII code |
MACRUM | 7:bfd5c9d80f48 | 35 | int font_width; |
MACRUM | 7:bfd5c9d80f48 | 36 | if(code >= 0x20 && code <= 0x7F) { |
MACRUM | 7:bfd5c9d80f48 | 37 | Address = (code - 0x20)*16 + 255968; |
MACRUM | 7:bfd5c9d80f48 | 38 | font_width = 8; |
MACRUM | 7:bfd5c9d80f48 | 39 | } |
MACRUM | 7:bfd5c9d80f48 | 40 | else { |
MACRUM | 7:bfd5c9d80f48 | 41 | font_width = 16; |
MACRUM | 7:bfd5c9d80f48 | 42 | } |
MACRUM | 7:bfd5c9d80f48 | 43 | |
nameless129 | 4:70a1803901d1 | 44 | // Deselect the device |
nameless129 | 4:70a1803901d1 | 45 | FontROM_CS = 1; |
nameless129 | 4:70a1803901d1 | 46 | |
nameless129 | 4:70a1803901d1 | 47 | // Setup the spi for 8 bit data, high steady state clock |
nameless129 | 4:70a1803901d1 | 48 | FontROM.format(8,3); |
nameless129 | 4:70a1803901d1 | 49 | FontROM.frequency(1000000); |
nameless129 | 4:70a1803901d1 | 50 | |
nameless129 | 4:70a1803901d1 | 51 | // Select the device by seting chip select low |
nameless129 | 4:70a1803901d1 | 52 | FontROM_CS = 0; |
nameless129 | 4:70a1803901d1 | 53 | FontROM.write(0x03); // Read data byte |
nameless129 | 4:70a1803901d1 | 54 | FontROM.write(Address>>16 & 0xff); |
nameless129 | 4:70a1803901d1 | 55 | FontROM.write(Address>>8 & 0xff); |
nameless129 | 4:70a1803901d1 | 56 | FontROM.write(Address & 0xff); |
nameless129 | 4:70a1803901d1 | 57 | |
nameless129 | 4:70a1803901d1 | 58 | // Send a dummy byte to receive the contents of the WHOAMI register |
MACRUM | 7:bfd5c9d80f48 | 59 | for(int i=0; i<(font_width*2); i++) |
nameless129 | 4:70a1803901d1 | 60 | { |
MACRUM | 7:bfd5c9d80f48 | 61 | matrixdata[i]=FontROM.write(0x00); |
nameless129 | 4:70a1803901d1 | 62 | } |
nameless129 | 4:70a1803901d1 | 63 | |
nameless129 | 4:70a1803901d1 | 64 | // Deselect the device |
nameless129 | 4:70a1803901d1 | 65 | FontROM_CS = 1; |
nameless129 | 4:70a1803901d1 | 66 | } |
nameless129 | 4:70a1803901d1 | 67 | |
MACRUM | 7:bfd5c9d80f48 | 68 | void draw_kanji_15x16(int pos_x,unsigned char color, int font_width) |
nameless129 | 4:70a1803901d1 | 69 | { |
MACRUM | 7:bfd5c9d80f48 | 70 | for(int i=0; i<font_width; i++) |
nameless129 | 4:70a1803901d1 | 71 | { |
nameless129 | 4:70a1803901d1 | 72 | if( ((signed int)(15-i+pos_x) >= 0) && ((15-i+pos_x) <= (DISPLAY_XSIZE-1)) ) |
nameless129 | 4:70a1803901d1 | 73 | { |
nameless129 | 4:70a1803901d1 | 74 | if(color == COLOR_G || color == COLOR_C || color == COLOR_Y || color == COLOR_W) |
nameless129 | 4:70a1803901d1 | 75 | { |
nameless129 | 4:70a1803901d1 | 76 | ImageBuf[0][15-i+pos_x] = matrixdata[i]; |
MACRUM | 7:bfd5c9d80f48 | 77 | ImageBuf[0][15-i+pos_x] |= matrixdata[i+font_width]<<8; |
nameless129 | 4:70a1803901d1 | 78 | } |
nameless129 | 4:70a1803901d1 | 79 | if(color == COLOR_R || color == COLOR_Y || color == COLOR_M || color == COLOR_W) |
nameless129 | 4:70a1803901d1 | 80 | { |
nameless129 | 4:70a1803901d1 | 81 | ImageBuf[1][15-i+pos_x] = matrixdata[i]; |
MACRUM | 7:bfd5c9d80f48 | 82 | ImageBuf[1][15-i+pos_x] |= matrixdata[i+font_width]<<8; |
nameless129 | 4:70a1803901d1 | 83 | } |
nameless129 | 4:70a1803901d1 | 84 | if(color == COLOR_B || color == COLOR_C || color == COLOR_M || color == COLOR_W) |
nameless129 | 4:70a1803901d1 | 85 | { |
nameless129 | 4:70a1803901d1 | 86 | ImageBuf[2][15-i+pos_x] = matrixdata[i]; |
MACRUM | 7:bfd5c9d80f48 | 87 | ImageBuf[2][15-i+pos_x] |= matrixdata[i+font_width]<<8; |
nameless129 | 4:70a1803901d1 | 88 | } |
nameless129 | 4:70a1803901d1 | 89 | } |
nameless129 | 4:70a1803901d1 | 90 | } |
nameless129 | 4:70a1803901d1 | 91 | } |
nameless129 | 4:70a1803901d1 | 92 | |
nameless129 | 4:70a1803901d1 | 93 | void drawStr15x16(char *str ,int pos_x,unsigned char color) |
nameless129 | 4:70a1803901d1 | 94 | { |
nameless129 | 4:70a1803901d1 | 95 | unsigned char f_SJISChar = 0; |
nameless129 | 4:70a1803901d1 | 96 | unsigned char c = 0; |
nameless129 | 4:70a1803901d1 | 97 | unsigned int SJISChar = 0; |
nameless129 | 4:70a1803901d1 | 98 | unsigned int CountChar = 0; |
nameless129 | 4:70a1803901d1 | 99 | |
nameless129 | 4:70a1803901d1 | 100 | c = *str; |
nameless129 | 4:70a1803901d1 | 101 | while(c != '\0') |
nameless129 | 4:70a1803901d1 | 102 | { |
nameless129 | 4:70a1803901d1 | 103 | //2バイト文字の判定 |
nameless129 | 4:70a1803901d1 | 104 | if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_SJISChar != 1 ) |
nameless129 | 4:70a1803901d1 | 105 | { |
nameless129 | 4:70a1803901d1 | 106 | SJISChar = c; |
nameless129 | 4:70a1803901d1 | 107 | f_SJISChar = 1; |
nameless129 | 4:70a1803901d1 | 108 | } |
nameless129 | 4:70a1803901d1 | 109 | else if(f_SJISChar == 1) |
nameless129 | 4:70a1803901d1 | 110 | { |
nameless129 | 4:70a1803901d1 | 111 | SJISChar = (SJISChar<<8) | c; |
nameless129 | 4:70a1803901d1 | 112 | f_SJISChar = 0; |
nameless129 | 4:70a1803901d1 | 113 | read_font(SJISChar); |
MACRUM | 7:bfd5c9d80f48 | 114 | draw_kanji_15x16(pos_x-CountChar*8, color, 16); |
MACRUM | 7:bfd5c9d80f48 | 115 | CountChar+=2; |
nameless129 | 4:70a1803901d1 | 116 | } |
nameless129 | 4:70a1803901d1 | 117 | else //ASCII文字 |
nameless129 | 4:70a1803901d1 | 118 | { |
nameless129 | 4:70a1803901d1 | 119 | SJISChar = c; |
nameless129 | 4:70a1803901d1 | 120 | f_SJISChar = 0; |
nameless129 | 4:70a1803901d1 | 121 | read_font(SJISChar); |
MACRUM | 7:bfd5c9d80f48 | 122 | draw_kanji_15x16(pos_x-CountChar*8, color, 8); |
nameless129 | 4:70a1803901d1 | 123 | CountChar++; |
nameless129 | 4:70a1803901d1 | 124 | } |
nameless129 | 4:70a1803901d1 | 125 | str++; |
nameless129 | 4:70a1803901d1 | 126 | c = *str; |
nameless129 | 4:70a1803901d1 | 127 | } |
MACRUM | 7:bfd5c9d80f48 | 128 | } |
nameless129 | 10:e261964e4989 | 129 | |
nameless129 | 10:e261964e4989 | 130 | void drawStr15x16_AutoColer(char *str ,int pos_x) |
nameless129 | 10:e261964e4989 | 131 | { |
nameless129 | 10:e261964e4989 | 132 | unsigned char f_SJISChar = 0; |
nameless129 | 10:e261964e4989 | 133 | unsigned char c = 0; |
nameless129 | 10:e261964e4989 | 134 | unsigned char c_color = 0; |
nameless129 | 10:e261964e4989 | 135 | unsigned int SJISChar = 0; |
nameless129 | 10:e261964e4989 | 136 | unsigned int CountChar = 0; |
nameless129 | 10:e261964e4989 | 137 | const unsigned char color_pattern[6] = {COLOR_R,COLOR_Y,COLOR_G,COLOR_C,COLOR_B,COLOR_M}; |
nameless129 | 10:e261964e4989 | 138 | |
nameless129 | 10:e261964e4989 | 139 | c = *str; |
nameless129 | 10:e261964e4989 | 140 | while(c != '\0') |
nameless129 | 10:e261964e4989 | 141 | { |
nameless129 | 10:e261964e4989 | 142 | //2バイト文字の判定 |
nameless129 | 10:e261964e4989 | 143 | if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_SJISChar != 1 ) |
nameless129 | 10:e261964e4989 | 144 | { |
nameless129 | 10:e261964e4989 | 145 | SJISChar = c; |
nameless129 | 10:e261964e4989 | 146 | f_SJISChar = 1; |
nameless129 | 10:e261964e4989 | 147 | } |
nameless129 | 10:e261964e4989 | 148 | else if(f_SJISChar == 1) |
nameless129 | 10:e261964e4989 | 149 | { |
nameless129 | 10:e261964e4989 | 150 | SJISChar = (SJISChar<<8) | c; |
nameless129 | 10:e261964e4989 | 151 | f_SJISChar = 0; |
nameless129 | 10:e261964e4989 | 152 | read_font(SJISChar); |
nameless129 | 10:e261964e4989 | 153 | draw_kanji_15x16(pos_x-CountChar*8, color_pattern[c_color], 16); |
nameless129 | 10:e261964e4989 | 154 | CountChar+=2; |
nameless129 | 10:e261964e4989 | 155 | } |
nameless129 | 10:e261964e4989 | 156 | else //ASCII文字 |
nameless129 | 10:e261964e4989 | 157 | { |
nameless129 | 10:e261964e4989 | 158 | SJISChar = c; |
nameless129 | 10:e261964e4989 | 159 | f_SJISChar = 0; |
nameless129 | 10:e261964e4989 | 160 | read_font(SJISChar); |
nameless129 | 10:e261964e4989 | 161 | draw_kanji_15x16(pos_x-CountChar*8, color_pattern[c_color], 8); |
nameless129 | 10:e261964e4989 | 162 | CountChar++; |
nameless129 | 10:e261964e4989 | 163 | } |
nameless129 | 10:e261964e4989 | 164 | str++; |
nameless129 | 10:e261964e4989 | 165 | c = *str; |
nameless129 | 10:e261964e4989 | 166 | c_color++; |
nameless129 | 10:e261964e4989 | 167 | if(c_color>=6) |
nameless129 | 10:e261964e4989 | 168 | { |
nameless129 | 10:e261964e4989 | 169 | c_color = 0; |
nameless129 | 10:e261964e4989 | 170 | } |
nameless129 | 10:e261964e4989 | 171 | } |
nameless129 | 10:e261964e4989 | 172 | } |