SHARPメモリ液晶+つぼフォント(GT20L16J1Y) の表示サンプル。 半角カナ(JIS X 0201)と、2バイトUTF-8コード(顔文字に使用)に対応。
Dependencies: GT20L16J1Y_font TFT_fonts mbed sharp_mlcd
Fork of hello_GT20L16J1Y_FONT by
main.cpp@3:b095be7ec287, 2014-09-04 (annotated)
- Committer:
- MACRUM
- Date:
- Thu Sep 04 06:55:37 2014 +0000
- Revision:
- 3:b095be7ec287
- Parent:
- 0:b468ef973095
- Child:
- 4:ad167108200d
Changed not to use w_char library functions; Added UTF-8 to KuTen conversion table
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MACRUM | 0:b468ef973095 | 1 | #include "mbed.h" |
MACRUM | 3:b095be7ec287 | 2 | #include "C12832.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); |
MACRUM | 3:b095be7ec287 | 20 | #endif |
MACRUM | 0:b468ef973095 | 21 | |
MACRUM | 3:b095be7ec287 | 22 | #define numOfCharBuffer 40 |
MACRUM | 3:b095be7ec287 | 23 | uint16_t kBuf[numOfCharBuffer]; |
MACRUM | 3:b095be7ec287 | 24 | |
MACRUM | 3:b095be7ec287 | 25 | void draw_string(int offset_x, int offset_y, int width) |
MACRUM | 0:b468ef973095 | 26 | { |
MACRUM | 0:b468ef973095 | 27 | int color; |
MACRUM | 3:b095be7ec287 | 28 | for(int x=0; x<width*2; x++) |
MACRUM | 0:b468ef973095 | 29 | { |
MACRUM | 0:b468ef973095 | 30 | for(int y=0; y<8; y++) |
MACRUM | 0:b468ef973095 | 31 | { |
MACRUM | 0:b468ef973095 | 32 | if (font.bitmap[x] & (1<<y)) |
MACRUM | 0:b468ef973095 | 33 | color = 1; |
MACRUM | 0:b468ef973095 | 34 | else |
MACRUM | 0:b468ef973095 | 35 | color = 0; |
MACRUM | 3:b095be7ec287 | 36 | lcd.pixel(x%width + offset_x, y+(8*(x/width)) + offset_y, color); |
MACRUM | 0:b468ef973095 | 37 | } |
MACRUM | 0:b468ef973095 | 38 | } |
MACRUM | 0:b468ef973095 | 39 | lcd.copy_to_lcd(); |
MACRUM | 0:b468ef973095 | 40 | } |
MACRUM | 0:b468ef973095 | 41 | |
MACRUM | 3:b095be7ec287 | 42 | int int_compar(const uint16_t *a, const uint16_t *b) |
MACRUM | 3:b095be7ec287 | 43 | { |
MACRUM | 3:b095be7ec287 | 44 | if (*a < *b) |
MACRUM | 3:b095be7ec287 | 45 | return (-1); |
MACRUM | 3:b095be7ec287 | 46 | else if (*a > *b) |
MACRUM | 3:b095be7ec287 | 47 | return (1); |
MACRUM | 3:b095be7ec287 | 48 | else |
MACRUM | 3:b095be7ec287 | 49 | return (0); |
MACRUM | 3:b095be7ec287 | 50 | } |
MACRUM | 3:b095be7ec287 | 51 | |
MACRUM | 3:b095be7ec287 | 52 | int conv_utf8(char* utfBuffer, uint16_t* kutenBuffer) |
MACRUM | 3:b095be7ec287 | 53 | { |
MACRUM | 3:b095be7ec287 | 54 | int ret; |
MACRUM | 3:b095be7ec287 | 55 | uint16_t key, *index, *pBuf; |
MACRUM | 3:b095be7ec287 | 56 | char *uBuf; |
MACRUM | 3:b095be7ec287 | 57 | |
MACRUM | 3:b095be7ec287 | 58 | uBuf = utfBuffer; |
MACRUM | 3:b095be7ec287 | 59 | pBuf = kutenBuffer; |
MACRUM | 3:b095be7ec287 | 60 | ret = 0; |
MACRUM | 3:b095be7ec287 | 61 | |
MACRUM | 3:b095be7ec287 | 62 | while (uBuf[0] != 0) { |
MACRUM | 3:b095be7ec287 | 63 | if (uBuf[0] >= 0x20 && uBuf[0] < 0x80) { |
MACRUM | 3:b095be7ec287 | 64 | // in case of ASCII |
MACRUM | 3:b095be7ec287 | 65 | *pBuf++ = (uint16_t)uBuf[0]; |
MACRUM | 3:b095be7ec287 | 66 | uBuf += 1; |
MACRUM | 3:b095be7ec287 | 67 | ret++; |
MACRUM | 3:b095be7ec287 | 68 | continue; |
MACRUM | 3:b095be7ec287 | 69 | } |
MACRUM | 3:b095be7ec287 | 70 | else if ( (uBuf[0]&0xF0) != 0xE0) { |
MACRUM | 3:b095be7ec287 | 71 | uBuf += 1; |
MACRUM | 3:b095be7ec287 | 72 | continue; |
MACRUM | 3:b095be7ec287 | 73 | } |
MACRUM | 3:b095be7ec287 | 74 | // extract valid bits of UTF-8 |
MACRUM | 3:b095be7ec287 | 75 | key = ((uBuf[0] & 0x000F) << 12) | ((uBuf[1] & 0x003F) << 6) | (uBuf[2] & 0x003F); |
MACRUM | 3:b095be7ec287 | 76 | |
MACRUM | 3:b095be7ec287 | 77 | // search UTF-8 code from utf8_key[] table to get index of Kuten table |
MACRUM | 3:b095be7ec287 | 78 | 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 | 79 | if (index != 0) { |
MACRUM | 3:b095be7ec287 | 80 | // get Kuten code |
MACRUM | 3:b095be7ec287 | 81 | *pBuf = utf8_value[index - utf8_key]; |
MACRUM | 3:b095be7ec287 | 82 | } |
MACRUM | 3:b095be7ec287 | 83 | |
MACRUM | 3:b095be7ec287 | 84 | uBuf += 3; |
MACRUM | 3:b095be7ec287 | 85 | pBuf++; |
MACRUM | 3:b095be7ec287 | 86 | ret++; |
MACRUM | 3:b095be7ec287 | 87 | } |
MACRUM | 3:b095be7ec287 | 88 | *pBuf = 0; |
MACRUM | 3:b095be7ec287 | 89 | |
MACRUM | 3:b095be7ec287 | 90 | return ret; |
MACRUM | 3:b095be7ec287 | 91 | } |
MACRUM | 3:b095be7ec287 | 92 | |
MACRUM | 3:b095be7ec287 | 93 | void draw_utf8(int offset_x, int offset_y, char *buf_u) |
MACRUM | 3:b095be7ec287 | 94 | { |
MACRUM | 3:b095be7ec287 | 95 | int len = conv_utf8(buf_u, kBuf); |
MACRUM | 3:b095be7ec287 | 96 | int xpos = 0; |
MACRUM | 3:b095be7ec287 | 97 | |
MACRUM | 3:b095be7ec287 | 98 | for(int i = 0; i < len; i++) { |
MACRUM | 3:b095be7ec287 | 99 | int width = font.read_kuten(kBuf[i]); |
MACRUM | 3:b095be7ec287 | 100 | draw_string(xpos + offset_x, offset_y, width); |
MACRUM | 3:b095be7ec287 | 101 | xpos += width; |
MACRUM | 3:b095be7ec287 | 102 | } |
MACRUM | 3:b095be7ec287 | 103 | } |
MACRUM | 3:b095be7ec287 | 104 | |
MACRUM | 0:b468ef973095 | 105 | int main() |
MACRUM | 0:b468ef973095 | 106 | { |
MACRUM | 3:b095be7ec287 | 107 | led = 0; |
MACRUM | 0:b468ef973095 | 108 | lcd.cls(); |
MACRUM | 3:b095be7ec287 | 109 | draw_utf8(0, 0, "進捗どうですか??"); |
MACRUM | 3:b095be7ec287 | 110 | draw_utf8(0, 16, "mbedで日本語表示"); |
MACRUM | 3:b095be7ec287 | 111 | while(1) { |
MACRUM | 3:b095be7ec287 | 112 | led = !led; |
MACRUM | 3:b095be7ec287 | 113 | wait(1.0); |
MACRUM | 0:b468ef973095 | 114 | } |
MACRUM | 0:b468ef973095 | 115 | } |