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:
4:70a1803901d1
?????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nameless129 4:70a1803901d1 1 #include "mbed.h"
nameless129 4:70a1803901d1 2 #include "displayCom.h"
nameless129 4:70a1803901d1 3 #include "kfont8.h"
nameless129 4:70a1803901d1 4 #include "8x8fontsLib.h"
nameless129 4:70a1803901d1 5 #include "unicode2SJIS.h"
nameless129 4:70a1803901d1 6
nameless129 4:70a1803901d1 7
nameless129 4:70a1803901d1 8
nameless129 4:70a1803901d1 9
nameless129 4:70a1803901d1 10 extern unsigned short unicode2SJIS(char c);
nameless129 4:70a1803901d1 11
nameless129 4:70a1803901d1 12
nameless129 4:70a1803901d1 13 int offsety = 0;
nameless129 4:70a1803901d1 14 bool kstate = false;
nameless129 4:70a1803901d1 15 unsigned char kbuf;
nameless129 4:70a1803901d1 16
nameless129 4:70a1803901d1 17 const unsigned char *findface(unsigned short c){
nameless129 4:70a1803901d1 18 const unsigned char *p = NULL;
nameless129 4:70a1803901d1 19 int i, sum;
nameless129 4:70a1803901d1 20 for(sum = i = 0; i < countof(font8table); i++){
nameless129 4:70a1803901d1 21 if(font8table[i].start <= c && c <= font8table[i].end){
nameless129 4:70a1803901d1 22 p = &font8[(sum + c - font8table[i].start) << 3];
nameless129 4:70a1803901d1 23 break;
nameless129 4:70a1803901d1 24 }
nameless129 4:70a1803901d1 25 sum += font8table[i].end - font8table[i].start + 1;
nameless129 4:70a1803901d1 26 }
nameless129 4:70a1803901d1 27 return p;
nameless129 4:70a1803901d1 28 }
nameless129 4:70a1803901d1 29
nameless129 4:70a1803901d1 30 // draw 8x8 font
nameless129 4:70a1803901d1 31 // charWidth 1~8
nameless129 4:70a1803901d1 32
nameless129 4:70a1803901d1 33 void drawkanji(unsigned short c,unsigned char color, signed short posX, unsigned char posY,unsigned char charWidth){
nameless129 4:70a1803901d1 34 unsigned char i = 0;
nameless129 4:70a1803901d1 35 const unsigned char *p = findface(c);
nameless129 4:70a1803901d1 36 if(p == NULL) return;
nameless129 4:70a1803901d1 37
nameless129 4:70a1803901d1 38 if(color == COLOR_G || color == COLOR_C || color == COLOR_Y || color == COLOR_W)
nameless129 4:70a1803901d1 39 {
nameless129 4:70a1803901d1 40 for(i=0;i<charWidth;i++)
nameless129 4:70a1803901d1 41 {
nameless129 4:70a1803901d1 42 if( (posX+(7-i)) >= 0)
nameless129 4:70a1803901d1 43 {
nameless129 4:70a1803901d1 44 ImageBuf[0][ posX+(7-i) ] = p[i]<<posY;
nameless129 4:70a1803901d1 45 }
nameless129 4:70a1803901d1 46 }
nameless129 4:70a1803901d1 47 }
nameless129 4:70a1803901d1 48 if(color == COLOR_R || color == COLOR_Y || color == COLOR_M || color == COLOR_W)
nameless129 4:70a1803901d1 49 {
nameless129 4:70a1803901d1 50 for(i=0;i<charWidth;i++)
nameless129 4:70a1803901d1 51 {
nameless129 4:70a1803901d1 52 if( (posX+(7-i)) >= 0)
nameless129 4:70a1803901d1 53 {
nameless129 4:70a1803901d1 54 ImageBuf[1][ posX+(7-i) ] = p[i]<<posY;
nameless129 4:70a1803901d1 55 }
nameless129 4:70a1803901d1 56 }
nameless129 4:70a1803901d1 57 }
nameless129 4:70a1803901d1 58 if(color == COLOR_B || color == COLOR_C || color == COLOR_M || color == COLOR_W)
nameless129 4:70a1803901d1 59 {
nameless129 4:70a1803901d1 60 for(i=0;i<charWidth;i++)
nameless129 4:70a1803901d1 61 {
nameless129 4:70a1803901d1 62 if( (posX+(7-i)) >= 0)
nameless129 4:70a1803901d1 63 {
nameless129 4:70a1803901d1 64
nameless129 4:70a1803901d1 65 ImageBuf[2][ posX+(7-i) ] = p[i]<<posY;
nameless129 4:70a1803901d1 66 }
nameless129 4:70a1803901d1 67 }
nameless129 4:70a1803901d1 68 }
nameless129 4:70a1803901d1 69 }
nameless129 4:70a1803901d1 70
nameless129 4:70a1803901d1 71 void drawc(unsigned char c, unsigned char color, signed short posX, unsigned char posY, unsigned char charWidth){
nameless129 4:70a1803901d1 72 if(kstate)
nameless129 4:70a1803901d1 73 { // 2nd byte of shift-jis
nameless129 4:70a1803901d1 74 kstate = false;
nameless129 4:70a1803901d1 75 drawkanji( (kbuf << 8 | c),color,posX,posY,charWidth);
nameless129 4:70a1803901d1 76 }
nameless129 4:70a1803901d1 77 else if((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)){ // 1st byte of shift-jis
nameless129 4:70a1803901d1 78 kstate = true;
nameless129 4:70a1803901d1 79 kbuf = c;
nameless129 4:70a1803901d1 80 }
nameless129 4:70a1803901d1 81 else
nameless129 4:70a1803901d1 82 {
nameless129 4:70a1803901d1 83 drawkanji( unicode2SJIS_Table[c],color,posX,posY,charWidth);
nameless129 4:70a1803901d1 84 }
nameless129 4:70a1803901d1 85 }
nameless129 4:70a1803901d1 86
nameless129 4:70a1803901d1 87 void drawStr8x8(char *str, unsigned char color, signed short posX, unsigned char posY){
nameless129 4:70a1803901d1 88 unsigned char c = 0;
nameless129 4:70a1803901d1 89 unsigned char f_2byteChar = 0;
nameless129 4:70a1803901d1 90 unsigned char countChar = 0;
nameless129 4:70a1803901d1 91 signed short tmp_posX = 0;
nameless129 4:70a1803901d1 92
nameless129 4:70a1803901d1 93 c = *str;
nameless129 4:70a1803901d1 94 while( (c != '\0') && (posX>=(countChar*8)) )
nameless129 4:70a1803901d1 95 {
nameless129 4:70a1803901d1 96 drawc(c,color,(posX-(countChar*8)),posY,8);
nameless129 4:70a1803901d1 97 if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_2byteChar != 1 )
nameless129 4:70a1803901d1 98 { // 1st byte of shift-jis
nameless129 4:70a1803901d1 99 f_2byteChar = 1;
nameless129 4:70a1803901d1 100 }
nameless129 4:70a1803901d1 101 else if(f_2byteChar == 1)
nameless129 4:70a1803901d1 102 {
nameless129 4:70a1803901d1 103 f_2byteChar = 0;
nameless129 4:70a1803901d1 104 countChar++;
nameless129 4:70a1803901d1 105 }
nameless129 4:70a1803901d1 106 else
nameless129 4:70a1803901d1 107 {
nameless129 4:70a1803901d1 108 f_2byteChar = 0;
nameless129 4:70a1803901d1 109 countChar++;
nameless129 4:70a1803901d1 110 }
nameless129 4:70a1803901d1 111 str++;
nameless129 4:70a1803901d1 112 c = *str;
nameless129 4:70a1803901d1 113 }
nameless129 4:70a1803901d1 114 if( ((posX%8) != 0) && (c != '\0') )
nameless129 4:70a1803901d1 115 {
nameless129 4:70a1803901d1 116 tmp_posX = posX%8;
nameless129 4:70a1803901d1 117 tmp_posX = tmp_posX-8;
nameless129 4:70a1803901d1 118 do{
nameless129 4:70a1803901d1 119 drawc(c,color,tmp_posX,posY,8);
nameless129 4:70a1803901d1 120 if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && (f_2byteChar != 1)){
nameless129 4:70a1803901d1 121 f_2byteChar = 1;
nameless129 4:70a1803901d1 122 str++;
nameless129 4:70a1803901d1 123 c = *str;
nameless129 4:70a1803901d1 124 }
nameless129 4:70a1803901d1 125 else if(f_2byteChar == 1)
nameless129 4:70a1803901d1 126 {
nameless129 4:70a1803901d1 127 f_2byteChar = 0;
nameless129 4:70a1803901d1 128 countChar++;
nameless129 4:70a1803901d1 129 }
nameless129 4:70a1803901d1 130 else
nameless129 4:70a1803901d1 131 {
nameless129 4:70a1803901d1 132 f_2byteChar = 0;
nameless129 4:70a1803901d1 133 countChar++;
nameless129 4:70a1803901d1 134 }
nameless129 4:70a1803901d1 135 }while( (f_2byteChar == 1) );
nameless129 4:70a1803901d1 136 }
nameless129 4:70a1803901d1 137 }