超乗合馬車電光掲示板用制御ソフトです。

Dependencies:   mbed

Committer:
nameless129
Date:
Sat Apr 26 08:26:29 2014 +0000
Revision:
1:8e2a7fdb3db8
Parent:
0:23cd1be2a1c2
????v1.01

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nameless129 0:23cd1be2a1c2 1 #include "mbed.h"
nameless129 0:23cd1be2a1c2 2 #include "displayCom.h"
nameless129 0:23cd1be2a1c2 3 #include "15x16fontsLib.h"
nameless129 0:23cd1be2a1c2 4
nameless129 0:23cd1be2a1c2 5 SPI FontROM(p11, p12, p13); // mosi, miso, sclk
nameless129 0:23cd1be2a1c2 6 DigitalOut FontROM_CS(p14);
nameless129 0:23cd1be2a1c2 7
nameless129 1:8e2a7fdb3db8 8 static unsigned char matrixdata[32];
nameless129 0:23cd1be2a1c2 9
nameless129 1:8e2a7fdb3db8 10 static void read_font(unsigned short code) {
nameless129 0:23cd1be2a1c2 11 unsigned char c1, c2, MSB,LSB;
nameless129 0:23cd1be2a1c2 12 uint32_t Address, seq;
nameless129 0:23cd1be2a1c2 13
nameless129 0:23cd1be2a1c2 14 // SJIS to kuten code conversion
nameless129 0:23cd1be2a1c2 15 c1 = (code>>8);
nameless129 0:23cd1be2a1c2 16 c2 = (code & 0xFF);
nameless129 0:23cd1be2a1c2 17 seq = (c1<=159 ? c1-129 : c1-193)*188 + (c2<=126 ? c2-64 : c2-65);
nameless129 0:23cd1be2a1c2 18 MSB = seq / 94 + 1;
nameless129 0:23cd1be2a1c2 19 LSB = seq % 94 + 1;
nameless129 0:23cd1be2a1c2 20 Address = 0;
nameless129 0:23cd1be2a1c2 21
nameless129 0:23cd1be2a1c2 22 if( MSB >= 1 && MSB <= 15 && LSB >= 1 && LSB <= 94)
nameless129 0:23cd1be2a1c2 23 Address =( (MSB - 1) * 94 + (LSB - 1))*32;
nameless129 0:23cd1be2a1c2 24 else if(MSB >= 16 && MSB <= 47 && LSB >= 1 && LSB <= 94)
nameless129 0:23cd1be2a1c2 25 Address =( (MSB - 16) * 94 + (LSB - 1))*32 + 0x0AA40L;
nameless129 0:23cd1be2a1c2 26 else if(MSB >= 48 && MSB <= 84 && LSB >= 1 && LSB <= 94)
nameless129 0:23cd1be2a1c2 27 Address = ((MSB - 48) * 94 + (LSB - 1))*32 + 0x21CDFL;
nameless129 0:23cd1be2a1c2 28 else if(MSB == 85 && LSB >= 1 && LSB <= 94)
nameless129 0:23cd1be2a1c2 29 Address = ((MSB - 85) * 94 + (LSB - 1))*32 + 0x3C4A0L;
nameless129 0:23cd1be2a1c2 30 else if(MSB >= 88 && MSB <= 89 && LSB >= 1 && LSB <= 94)
nameless129 0:23cd1be2a1c2 31 Address = ((MSB - 88) * 94 + (LSB - 1))*32 + 0x3D060L;
nameless129 0:23cd1be2a1c2 32
nameless129 0:23cd1be2a1c2 33 // if ASCII code
nameless129 0:23cd1be2a1c2 34 int font_width;
nameless129 0:23cd1be2a1c2 35 if(code >= 0x20 && code <= 0x7F) {
nameless129 0:23cd1be2a1c2 36 Address = (code - 0x20)*16 + 255968;
nameless129 0:23cd1be2a1c2 37 font_width = 8;
nameless129 0:23cd1be2a1c2 38 }
nameless129 0:23cd1be2a1c2 39 else {
nameless129 0:23cd1be2a1c2 40 font_width = 16;
nameless129 0:23cd1be2a1c2 41 }
nameless129 0:23cd1be2a1c2 42
nameless129 0:23cd1be2a1c2 43 // Deselect the device
nameless129 0:23cd1be2a1c2 44 FontROM_CS = 1;
nameless129 0:23cd1be2a1c2 45
nameless129 0:23cd1be2a1c2 46 // Setup the spi for 8 bit data, high steady state clock
nameless129 0:23cd1be2a1c2 47 FontROM.format(8,3);
nameless129 0:23cd1be2a1c2 48 FontROM.frequency(1000000);
nameless129 0:23cd1be2a1c2 49
nameless129 0:23cd1be2a1c2 50 // Select the device by seting chip select low
nameless129 0:23cd1be2a1c2 51 FontROM_CS = 0;
nameless129 0:23cd1be2a1c2 52 FontROM.write(0x03); // Read data byte
nameless129 0:23cd1be2a1c2 53 FontROM.write(Address>>16 & 0xff);
nameless129 0:23cd1be2a1c2 54 FontROM.write(Address>>8 & 0xff);
nameless129 0:23cd1be2a1c2 55 FontROM.write(Address & 0xff);
nameless129 0:23cd1be2a1c2 56
nameless129 0:23cd1be2a1c2 57 // Send a dummy byte to receive the contents of the WHOAMI register
nameless129 0:23cd1be2a1c2 58 for(int i=0; i<(font_width*2); i++)
nameless129 0:23cd1be2a1c2 59 {
nameless129 0:23cd1be2a1c2 60 matrixdata[i]=FontROM.write(0x00);
nameless129 0:23cd1be2a1c2 61 }
nameless129 0:23cd1be2a1c2 62
nameless129 0:23cd1be2a1c2 63 // Deselect the device
nameless129 0:23cd1be2a1c2 64 FontROM_CS = 1;
nameless129 0:23cd1be2a1c2 65 }
nameless129 0:23cd1be2a1c2 66
nameless129 1:8e2a7fdb3db8 67 static void draw_kanji_15x16(int pos_x, int font_width)
nameless129 0:23cd1be2a1c2 68 {
nameless129 0:23cd1be2a1c2 69 for(int i=0; i<font_width; i++)
nameless129 0:23cd1be2a1c2 70 {
nameless129 0:23cd1be2a1c2 71 if( ((signed int)(15-i+pos_x) >= 0) && ((15-i+pos_x) <= (DISPLAY_XSIZE-1)) )
nameless129 0:23cd1be2a1c2 72 {
nameless129 0:23cd1be2a1c2 73 ImageBuf[15-i+pos_x] = matrixdata[i];
nameless129 0:23cd1be2a1c2 74 ImageBuf[15-i+pos_x] |= matrixdata[i+font_width]<<8;
nameless129 0:23cd1be2a1c2 75 }
nameless129 0:23cd1be2a1c2 76 }
nameless129 0:23cd1be2a1c2 77 }
nameless129 0:23cd1be2a1c2 78
nameless129 1:8e2a7fdb3db8 79 void drawStr15x16(char *str ,unsigned int pos_x)
nameless129 0:23cd1be2a1c2 80 {
nameless129 0:23cd1be2a1c2 81 unsigned char f_SJISChar = 0;
nameless129 0:23cd1be2a1c2 82 unsigned char c = 0;
nameless129 0:23cd1be2a1c2 83 unsigned int SJISChar = 0;
nameless129 0:23cd1be2a1c2 84 unsigned int CountChar = 0;
nameless129 0:23cd1be2a1c2 85
nameless129 0:23cd1be2a1c2 86 c = *str;
nameless129 0:23cd1be2a1c2 87 while(c != '\0')
nameless129 0:23cd1be2a1c2 88 {
nameless129 0:23cd1be2a1c2 89 //2バイト文字の判定
nameless129 0:23cd1be2a1c2 90 if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_SJISChar != 1 )
nameless129 0:23cd1be2a1c2 91 {
nameless129 0:23cd1be2a1c2 92 SJISChar = c;
nameless129 0:23cd1be2a1c2 93 f_SJISChar = 1;
nameless129 0:23cd1be2a1c2 94 }
nameless129 0:23cd1be2a1c2 95 else if(f_SJISChar == 1)
nameless129 0:23cd1be2a1c2 96 {
nameless129 0:23cd1be2a1c2 97 SJISChar = (SJISChar<<8) | c;
nameless129 0:23cd1be2a1c2 98 f_SJISChar = 0;
nameless129 0:23cd1be2a1c2 99 read_font(SJISChar);
nameless129 0:23cd1be2a1c2 100 draw_kanji_15x16(pos_x-CountChar*8,16);
nameless129 0:23cd1be2a1c2 101 CountChar+=2;
nameless129 0:23cd1be2a1c2 102 }
nameless129 0:23cd1be2a1c2 103 else //ASCII文字
nameless129 0:23cd1be2a1c2 104 {
nameless129 0:23cd1be2a1c2 105 SJISChar = c;
nameless129 0:23cd1be2a1c2 106 f_SJISChar = 0;
nameless129 0:23cd1be2a1c2 107 read_font(SJISChar);
nameless129 0:23cd1be2a1c2 108 draw_kanji_15x16(pos_x-CountChar*8, 8);
nameless129 0:23cd1be2a1c2 109 CountChar++;
nameless129 0:23cd1be2a1c2 110 }
nameless129 0:23cd1be2a1c2 111 str++;
nameless129 0:23cd1be2a1c2 112 c = *str;
nameless129 0:23cd1be2a1c2 113 }
nameless129 0:23cd1be2a1c2 114 }