SHARPメモリ液晶+つぼフォント(GT20L16J1Y) の表示サンプル。 半角カナ(JIS X 0201)と、2バイトUTF-8コード(顔文字に使用)に対応。

Dependencies:   GT20L16J1Y_font TFT_fonts mbed sharp_mlcd

Fork of hello_GT20L16J1Y_FONT by Toyomasa Watarai

Committer:
ban4jp
Date:
Sun Sep 21 14:20:23 2014 +0000
Revision:
4:ad167108200d
Parent:
3:b095be7ec287
Changed Display SHARP Memory LCD.; Added JIS X 0201 Support.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:b468ef973095 1 #include "mbed.h"
ban4jp 4:ad167108200d 2 #include "sharp_mlcd.h"
MACRUM 0:b468ef973095 3 #include "GT20L16J1Y_font.h"
MACRUM 3:b095be7ec287 4 #include "utf8_table.h"
MACRUM 3:b095be7ec287 5
MACRUM 3:b095be7ec287 6 #include <stdlib.h>
MACRUM 0:b468ef973095 7
MACRUM 0:b468ef973095 8 /*
MACRUM 0:b468ef973095 9 GT20L16J1Y library test program
MACRUM 0:b468ef973095 10 */
MACRUM 0:b468ef973095 11
MACRUM 3:b095be7ec287 12 DigitalOut led(LED1);
MACRUM 3:b095be7ec287 13
MACRUM 3:b095be7ec287 14 #if defined(TARGET_LPC1768)
MACRUM 3:b095be7ec287 15 C12832 lcd(p5, p7, p6, p8, p11);
MACRUM 0:b468ef973095 16 GT20L16J1Y_FONT font(p11, p12, p13, p10);
MACRUM 3:b095be7ec287 17 #elif defined(TARGET_LPC11U68)
MACRUM 3:b095be7ec287 18 C12832 lcd(D11, D13, D12, D7, D10);
MACRUM 3:b095be7ec287 19 GT20L16J1Y_FONT font(P0_21, P0_22, P1_20, P0_23);
ban4jp 4:ad167108200d 20 #elif defined(TARGET_KL46Z) || defined(TARGET_KL25Z)
ban4jp 4:ad167108200d 21 GT20L16J1Y_FONT font(D11, D12, D13, D3);
ban4jp 4:ad167108200d 22 sharp_mlcd lcd(D11, D13, D2, D4, D5, "LCD");
MACRUM 3:b095be7ec287 23 #endif
MACRUM 0:b468ef973095 24
ban4jp 4:ad167108200d 25 Ticker timer;
ban4jp 4:ad167108200d 26
ban4jp 4:ad167108200d 27 void attime()
ban4jp 4:ad167108200d 28 {
ban4jp 4:ad167108200d 29 lcd.attime();
ban4jp 4:ad167108200d 30 }
ban4jp 4:ad167108200d 31
MACRUM 3:b095be7ec287 32 #define numOfCharBuffer 40
MACRUM 3:b095be7ec287 33 uint16_t kBuf[numOfCharBuffer];
MACRUM 3:b095be7ec287 34
MACRUM 3:b095be7ec287 35 void draw_string(int offset_x, int offset_y, int width)
MACRUM 0:b468ef973095 36 {
MACRUM 0:b468ef973095 37 int color;
MACRUM 3:b095be7ec287 38 for(int x=0; x<width*2; x++)
MACRUM 0:b468ef973095 39 {
MACRUM 0:b468ef973095 40 for(int y=0; y<8; y++)
MACRUM 0:b468ef973095 41 {
MACRUM 0:b468ef973095 42 if (font.bitmap[x] & (1<<y))
MACRUM 0:b468ef973095 43 color = 1;
MACRUM 0:b468ef973095 44 else
MACRUM 0:b468ef973095 45 color = 0;
MACRUM 3:b095be7ec287 46 lcd.pixel(x%width + offset_x, y+(8*(x/width)) + offset_y, color);
MACRUM 0:b468ef973095 47 }
MACRUM 0:b468ef973095 48 }
ban4jp 4:ad167108200d 49 //lcd.copy_to_lcd();
MACRUM 0:b468ef973095 50 }
MACRUM 0:b468ef973095 51
MACRUM 3:b095be7ec287 52 int int_compar(const uint16_t *a, const uint16_t *b)
MACRUM 3:b095be7ec287 53 {
MACRUM 3:b095be7ec287 54 if (*a < *b)
MACRUM 3:b095be7ec287 55 return (-1);
MACRUM 3:b095be7ec287 56 else if (*a > *b)
MACRUM 3:b095be7ec287 57 return (1);
MACRUM 3:b095be7ec287 58 else
MACRUM 3:b095be7ec287 59 return (0);
MACRUM 3:b095be7ec287 60 }
MACRUM 3:b095be7ec287 61
MACRUM 3:b095be7ec287 62 int conv_utf8(char* utfBuffer, uint16_t* kutenBuffer)
MACRUM 3:b095be7ec287 63 {
MACRUM 3:b095be7ec287 64 int ret;
MACRUM 3:b095be7ec287 65 uint16_t key, *index, *pBuf;
MACRUM 3:b095be7ec287 66 char *uBuf;
MACRUM 3:b095be7ec287 67
MACRUM 3:b095be7ec287 68 uBuf = utfBuffer;
MACRUM 3:b095be7ec287 69 pBuf = kutenBuffer;
MACRUM 3:b095be7ec287 70 ret = 0;
MACRUM 3:b095be7ec287 71
MACRUM 3:b095be7ec287 72 while (uBuf[0] != 0) {
MACRUM 3:b095be7ec287 73 if (uBuf[0] >= 0x20 && uBuf[0] < 0x80) {
MACRUM 3:b095be7ec287 74 // in case of ASCII
MACRUM 3:b095be7ec287 75 *pBuf++ = (uint16_t)uBuf[0];
MACRUM 3:b095be7ec287 76 uBuf += 1;
MACRUM 3:b095be7ec287 77 ret++;
MACRUM 3:b095be7ec287 78 continue;
MACRUM 3:b095be7ec287 79 }
ban4jp 4:ad167108200d 80 else if ( (uBuf[0]&0xF0) == 0xE0) {
ban4jp 4:ad167108200d 81 // extract valid bits of UTF-8
ban4jp 4:ad167108200d 82 key = ((uBuf[0] & 0x000F) << 12) | ((uBuf[1] & 0x003F) << 6) | (uBuf[2] & 0x003F);
ban4jp 4:ad167108200d 83 uBuf += 3;
ban4jp 4:ad167108200d 84 }
ban4jp 4:ad167108200d 85 else if ( (uBuf[0]&0xE0) == 0xC0) {
ban4jp 4:ad167108200d 86 // extract valid bits of UTF-8
ban4jp 4:ad167108200d 87 key = ((uBuf[0] & 0x001F) << 6) | (uBuf[1] & 0x003F);
ban4jp 4:ad167108200d 88 uBuf += 2;
ban4jp 4:ad167108200d 89 }
ban4jp 4:ad167108200d 90 else {
MACRUM 3:b095be7ec287 91 uBuf += 1;
MACRUM 3:b095be7ec287 92 continue;
MACRUM 3:b095be7ec287 93 }
MACRUM 3:b095be7ec287 94
MACRUM 3:b095be7ec287 95 // search UTF-8 code from utf8_key[] table to get index of Kuten table
MACRUM 3:b095be7ec287 96 index = (uint16_t *)bsearch(&key, utf8_key, (sizeof(utf8_key) / sizeof(utf8_key[0])), sizeof(uint16_t), (int (*)(const void *, const void *))int_compar);
MACRUM 3:b095be7ec287 97 if (index != 0) {
MACRUM 3:b095be7ec287 98 // get Kuten code
MACRUM 3:b095be7ec287 99 *pBuf = utf8_value[index - utf8_key];
ban4jp 4:ad167108200d 100 } else {
ban4jp 4:ad167108200d 101 *pBuf = 0;
MACRUM 3:b095be7ec287 102 }
MACRUM 3:b095be7ec287 103
MACRUM 3:b095be7ec287 104 pBuf++;
MACRUM 3:b095be7ec287 105 ret++;
MACRUM 3:b095be7ec287 106 }
MACRUM 3:b095be7ec287 107 *pBuf = 0;
MACRUM 3:b095be7ec287 108
MACRUM 3:b095be7ec287 109 return ret;
MACRUM 3:b095be7ec287 110 }
MACRUM 3:b095be7ec287 111
MACRUM 3:b095be7ec287 112 void draw_utf8(int offset_x, int offset_y, char *buf_u)
MACRUM 3:b095be7ec287 113 {
MACRUM 3:b095be7ec287 114 int len = conv_utf8(buf_u, kBuf);
MACRUM 3:b095be7ec287 115 int xpos = 0;
MACRUM 3:b095be7ec287 116
MACRUM 3:b095be7ec287 117 for(int i = 0; i < len; i++) {
MACRUM 3:b095be7ec287 118 int width = font.read_kuten(kBuf[i]);
MACRUM 3:b095be7ec287 119 draw_string(xpos + offset_x, offset_y, width);
MACRUM 3:b095be7ec287 120 xpos += width;
MACRUM 3:b095be7ec287 121 }
MACRUM 3:b095be7ec287 122 }
MACRUM 3:b095be7ec287 123
ban4jp 4:ad167108200d 124 void draw_test1()
ban4jp 4:ad167108200d 125 {
ban4jp 4:ad167108200d 126 char str[11];
ban4jp 4:ad167108200d 127 int ypos = 0;
ban4jp 4:ad167108200d 128 int p = 0x20;
ban4jp 4:ad167108200d 129 for(int j = 0; j < 14; j++) {
ban4jp 4:ad167108200d 130 sprintf(str, "%8X:", p);
ban4jp 4:ad167108200d 131 draw_utf8(0, ypos, str);
ban4jp 4:ad167108200d 132 int xpos = 80;
ban4jp 4:ad167108200d 133 for(int i = 0; i < 16; i++) {
ban4jp 4:ad167108200d 134 int width = font.read_kuten(0x0000 + p++);
ban4jp 4:ad167108200d 135 draw_string(xpos, ypos, width);
ban4jp 4:ad167108200d 136 xpos += width;
ban4jp 4:ad167108200d 137 }
ban4jp 4:ad167108200d 138 ypos += 16;
ban4jp 4:ad167108200d 139 if(ypos > 240 - 16) ypos = 0;
ban4jp 4:ad167108200d 140 lcd.copy_to_lcd();
ban4jp 4:ad167108200d 141 }
ban4jp 4:ad167108200d 142 }
ban4jp 4:ad167108200d 143
ban4jp 4:ad167108200d 144 void draw_test2()
ban4jp 4:ad167108200d 145 {
ban4jp 4:ad167108200d 146 char str[11];
ban4jp 4:ad167108200d 147 int ypos = 0;
ban4jp 4:ad167108200d 148 unsigned long p = 0x00;
ban4jp 4:ad167108200d 149 for(int j = 0; j < 150; j++) {
ban4jp 4:ad167108200d 150 sprintf(str, "%8X:", p);
ban4jp 4:ad167108200d 151 draw_utf8(0, ypos, str);
ban4jp 4:ad167108200d 152 int xpos = 80;
ban4jp 4:ad167108200d 153 for(int i = 0; i < 16; i++) {
ban4jp 4:ad167108200d 154 font.read_direct(p);
ban4jp 4:ad167108200d 155 p += 32;
ban4jp 4:ad167108200d 156 draw_string(xpos, ypos, 16);
ban4jp 4:ad167108200d 157 xpos += 16;
ban4jp 4:ad167108200d 158 }
ban4jp 4:ad167108200d 159 ypos += 16;
ban4jp 4:ad167108200d 160 if(ypos > 240 - 16) ypos = 0;
ban4jp 4:ad167108200d 161 lcd.copy_to_lcd();
ban4jp 4:ad167108200d 162 }
ban4jp 4:ad167108200d 163 }
ban4jp 4:ad167108200d 164
ban4jp 4:ad167108200d 165 void draw_test3()
ban4jp 4:ad167108200d 166 {
ban4jp 4:ad167108200d 167 char str[11];
ban4jp 4:ad167108200d 168 int ypos = 0;
ban4jp 4:ad167108200d 169 unsigned long p = 0x3E7E0;
ban4jp 4:ad167108200d 170 for(int j = 0; j < 15; j++) {
ban4jp 4:ad167108200d 171 sprintf(str, "%8X:", p);
ban4jp 4:ad167108200d 172 draw_utf8(0, ypos, str);
ban4jp 4:ad167108200d 173 int xpos = 80;
ban4jp 4:ad167108200d 174 for(int i = 0; i < 32; i++) {
ban4jp 4:ad167108200d 175 font.read_direct(p);
ban4jp 4:ad167108200d 176 p += 16;
ban4jp 4:ad167108200d 177 draw_string(xpos, ypos, 8);
ban4jp 4:ad167108200d 178 xpos += 8;
ban4jp 4:ad167108200d 179 }
ban4jp 4:ad167108200d 180 ypos += 16;
ban4jp 4:ad167108200d 181 if(ypos > 240 - 16) ypos = 0;
ban4jp 4:ad167108200d 182 lcd.copy_to_lcd();
ban4jp 4:ad167108200d 183 }
ban4jp 4:ad167108200d 184 }
ban4jp 4:ad167108200d 185
MACRUM 0:b468ef973095 186 int main()
MACRUM 0:b468ef973095 187 {
MACRUM 3:b095be7ec287 188 led = 0;
ban4jp 4:ad167108200d 189
ban4jp 4:ad167108200d 190 printf("start\r\n");
ban4jp 4:ad167108200d 191
ban4jp 4:ad167108200d 192 timer.attach(attime, 0.5);
ban4jp 4:ad167108200d 193
ban4jp 4:ad167108200d 194 lcd.setmode(NORMAL);
ban4jp 4:ad167108200d 195 lcd.set_auto_up(0);
ban4jp 4:ad167108200d 196
MACRUM 0:b468ef973095 197 lcd.cls();
ban4jp 4:ad167108200d 198
MACRUM 3:b095be7ec287 199 draw_utf8(0, 0, "進捗どうですか??");
MACRUM 3:b095be7ec287 200 draw_utf8(0, 16, "mbedで日本語表示");
ban4jp 4:ad167108200d 201
ban4jp 4:ad167108200d 202 draw_utf8(0, 48, "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソ");
ban4jp 4:ad167108200d 203 draw_utf8(0, 64, "タチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚");
ban4jp 4:ad167108200d 204
ban4jp 4:ad167108200d 205 draw_utf8(0, 96, "エンベッド -> エェェェェンベッド!");
ban4jp 4:ad167108200d 206
ban4jp 4:ad167108200d 207 draw_utf8(0, 112, "顔文字1 -> (;´Д`)ゞ");
ban4jp 4:ad167108200d 208 draw_utf8(0, 128, "顔文字2 -> (´・ω・`)");
ban4jp 4:ad167108200d 209 draw_utf8(0, 144, "顔文字3 -> (∩´∀`)∩");
ban4jp 4:ad167108200d 210 draw_utf8(0, 160, "顔文字4 -> (・・)/~");
ban4jp 4:ad167108200d 211
ban4jp 4:ad167108200d 212 lcd.copy_to_lcd();
ban4jp 4:ad167108200d 213
ban4jp 4:ad167108200d 214 wait(5);
ban4jp 4:ad167108200d 215
ban4jp 4:ad167108200d 216 lcd.cls();
ban4jp 4:ad167108200d 217 draw_test1();
ban4jp 4:ad167108200d 218 lcd.copy_to_lcd();
ban4jp 4:ad167108200d 219
ban4jp 4:ad167108200d 220 wait(5);
ban4jp 4:ad167108200d 221
ban4jp 4:ad167108200d 222 lcd.cls();
ban4jp 4:ad167108200d 223 draw_test2();
ban4jp 4:ad167108200d 224 lcd.copy_to_lcd();
ban4jp 4:ad167108200d 225
ban4jp 4:ad167108200d 226 wait(5);
ban4jp 4:ad167108200d 227
ban4jp 4:ad167108200d 228 lcd.cls();
ban4jp 4:ad167108200d 229 draw_test3();
ban4jp 4:ad167108200d 230 lcd.copy_to_lcd();
ban4jp 4:ad167108200d 231
ban4jp 4:ad167108200d 232 printf("end\r\n");
ban4jp 4:ad167108200d 233
MACRUM 3:b095be7ec287 234 while(1) {
MACRUM 3:b095be7ec287 235 led = !led;
MACRUM 3:b095be7ec287 236 wait(1.0);
MACRUM 0:b468ef973095 237 }
MACRUM 0:b468ef973095 238 }