Toyomasa Watarai / Mbed 2 deprecated LEDMatrix_Master

Dependencies:   mbed

Fork of LEDMatrix_Master by en 129

Committer:
nameless129
Date:
Thu Nov 07 15:00:28 2013 +0000
Revision:
4:70a1803901d1
Child:
6:bfd5c9d80f48
????????

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 "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;
nameless129 4:70a1803901d1 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
nameless129 4:70a1803901d1 34 // Deselect the device
nameless129 4:70a1803901d1 35 FontROM_CS = 1;
nameless129 4:70a1803901d1 36
nameless129 4:70a1803901d1 37 // Setup the spi for 8 bit data, high steady state clock
nameless129 4:70a1803901d1 38 FontROM.format(8,3);
nameless129 4:70a1803901d1 39 FontROM.frequency(1000000);
nameless129 4:70a1803901d1 40
nameless129 4:70a1803901d1 41 // Select the device by seting chip select low
nameless129 4:70a1803901d1 42 FontROM_CS = 0;
nameless129 4:70a1803901d1 43 FontROM.write(0x03); // Read data byte
nameless129 4:70a1803901d1 44 FontROM.write(Address>>16 & 0xff);
nameless129 4:70a1803901d1 45 FontROM.write(Address>>8 & 0xff);
nameless129 4:70a1803901d1 46 FontROM.write(Address & 0xff);
nameless129 4:70a1803901d1 47
nameless129 4:70a1803901d1 48 // Send a dummy byte to receive the contents of the WHOAMI register
nameless129 4:70a1803901d1 49 for(int i=0; i<32; i++)
nameless129 4:70a1803901d1 50 {
nameless129 4:70a1803901d1 51 matrixdata[i]=FontROM.write(0x00);
nameless129 4:70a1803901d1 52 }
nameless129 4:70a1803901d1 53
nameless129 4:70a1803901d1 54 // Deselect the device
nameless129 4:70a1803901d1 55 FontROM_CS = 1;
nameless129 4:70a1803901d1 56 }
nameless129 4:70a1803901d1 57
nameless129 4:70a1803901d1 58 void draw_kanji_15x16(int pos_x,unsigned char color)
nameless129 4:70a1803901d1 59 {
nameless129 4:70a1803901d1 60 int i = 0;
nameless129 4:70a1803901d1 61 for(i=0;i<16;i++)
nameless129 4:70a1803901d1 62 {
nameless129 4:70a1803901d1 63 if( ((signed int)(15-i+pos_x) >= 0) && ((15-i+pos_x) <= (DISPLAY_XSIZE-1)) )
nameless129 4:70a1803901d1 64 {
nameless129 4:70a1803901d1 65 if(color == COLOR_G || color == COLOR_C || color == COLOR_Y || color == COLOR_W)
nameless129 4:70a1803901d1 66 {
nameless129 4:70a1803901d1 67 ImageBuf[0][15-i+pos_x] = matrixdata[i];
nameless129 4:70a1803901d1 68 ImageBuf[0][15-i+pos_x] |= matrixdata[i+16]<<8;
nameless129 4:70a1803901d1 69 }
nameless129 4:70a1803901d1 70 if(color == COLOR_R || color == COLOR_Y || color == COLOR_M || color == COLOR_W)
nameless129 4:70a1803901d1 71 {
nameless129 4:70a1803901d1 72 ImageBuf[1][15-i+pos_x] = matrixdata[i];
nameless129 4:70a1803901d1 73 ImageBuf[1][15-i+pos_x] |= matrixdata[i+16]<<8;
nameless129 4:70a1803901d1 74 }
nameless129 4:70a1803901d1 75 if(color == COLOR_B || color == COLOR_C || color == COLOR_M || color == COLOR_W)
nameless129 4:70a1803901d1 76 {
nameless129 4:70a1803901d1 77 ImageBuf[2][15-i+pos_x] = matrixdata[i];
nameless129 4:70a1803901d1 78 ImageBuf[2][15-i+pos_x] |= matrixdata[i+16]<<8;
nameless129 4:70a1803901d1 79 }
nameless129 4:70a1803901d1 80 }
nameless129 4:70a1803901d1 81 }
nameless129 4:70a1803901d1 82 }
nameless129 4:70a1803901d1 83
nameless129 4:70a1803901d1 84 void drawStr15x16(char *str ,int pos_x,unsigned char color)
nameless129 4:70a1803901d1 85 {
nameless129 4:70a1803901d1 86 unsigned char f_SJISChar = 0;
nameless129 4:70a1803901d1 87 unsigned char c = 0;
nameless129 4:70a1803901d1 88 unsigned int SJISChar = 0;
nameless129 4:70a1803901d1 89 unsigned int CountChar = 0;
nameless129 4:70a1803901d1 90
nameless129 4:70a1803901d1 91 c = *str;
nameless129 4:70a1803901d1 92 while(c != '\0')
nameless129 4:70a1803901d1 93 {
nameless129 4:70a1803901d1 94 //2バイト文字の判定
nameless129 4:70a1803901d1 95 if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_SJISChar != 1 )
nameless129 4:70a1803901d1 96 {
nameless129 4:70a1803901d1 97 SJISChar = c;
nameless129 4:70a1803901d1 98 f_SJISChar = 1;
nameless129 4:70a1803901d1 99 }
nameless129 4:70a1803901d1 100 else if(f_SJISChar == 1)
nameless129 4:70a1803901d1 101 {
nameless129 4:70a1803901d1 102 SJISChar = (SJISChar<<8) | c;
nameless129 4:70a1803901d1 103 f_SJISChar = 0;
nameless129 4:70a1803901d1 104 read_font(SJISChar);
nameless129 4:70a1803901d1 105 draw_kanji_15x16(pos_x-CountChar*16,color);
nameless129 4:70a1803901d1 106 CountChar++;
nameless129 4:70a1803901d1 107 }
nameless129 4:70a1803901d1 108 else //ASCII文字
nameless129 4:70a1803901d1 109 {
nameless129 4:70a1803901d1 110 SJISChar = c;
nameless129 4:70a1803901d1 111 f_SJISChar = 0;
nameless129 4:70a1803901d1 112 read_font(SJISChar);
nameless129 4:70a1803901d1 113 draw_kanji_15x16(pos_x-CountChar*16,color);
nameless129 4:70a1803901d1 114 CountChar++;
nameless129 4:70a1803901d1 115 }
nameless129 4:70a1803901d1 116 str++;
nameless129 4:70a1803901d1 117 c = *str;
nameless129 4:70a1803901d1 118 }
nameless129 4:70a1803901d1 119 }