SHARPメモリ液晶+つぼフォント(GT20L16J1Y) の表示サンプル。 半角カナ(JIS X 0201)と、2バイトUTF-8コード(顔文字に使用)に対応。
Dependencies: GT20L16J1Y_font TFT_fonts mbed sharp_mlcd
Fork of hello_GT20L16J1Y_FONT by
main.cpp
- Committer:
- MACRUM
- Date:
- 2014-09-04
- Revision:
- 3:b095be7ec287
- Parent:
- 0:b468ef973095
- Child:
- 4:ad167108200d
File content as of revision 3:b095be7ec287:
#include "mbed.h" #include "C12832.h" #include "GT20L16J1Y_font.h" #include "utf8_table.h" #include <stdlib.h> /* GT20L16J1Y library test program */ DigitalOut led(LED1); #if defined(TARGET_LPC1768) C12832 lcd(p5, p7, p6, p8, p11); GT20L16J1Y_FONT font(p11, p12, p13, p10); #elif defined(TARGET_LPC11U68) C12832 lcd(D11, D13, D12, D7, D10); GT20L16J1Y_FONT font(P0_21, P0_22, P1_20, P0_23); #endif #define numOfCharBuffer 40 uint16_t kBuf[numOfCharBuffer]; void draw_string(int offset_x, int offset_y, int width) { int color; for(int x=0; x<width*2; x++) { for(int y=0; y<8; y++) { if (font.bitmap[x] & (1<<y)) color = 1; else color = 0; lcd.pixel(x%width + offset_x, y+(8*(x/width)) + offset_y, color); } } lcd.copy_to_lcd(); } int int_compar(const uint16_t *a, const uint16_t *b) { if (*a < *b) return (-1); else if (*a > *b) return (1); else return (0); } int conv_utf8(char* utfBuffer, uint16_t* kutenBuffer) { int ret; uint16_t key, *index, *pBuf; char *uBuf; uBuf = utfBuffer; pBuf = kutenBuffer; ret = 0; while (uBuf[0] != 0) { if (uBuf[0] >= 0x20 && uBuf[0] < 0x80) { // in case of ASCII *pBuf++ = (uint16_t)uBuf[0]; uBuf += 1; ret++; continue; } else if ( (uBuf[0]&0xF0) != 0xE0) { uBuf += 1; continue; } // extract valid bits of UTF-8 key = ((uBuf[0] & 0x000F) << 12) | ((uBuf[1] & 0x003F) << 6) | (uBuf[2] & 0x003F); // search UTF-8 code from utf8_key[] table to get index of Kuten table index = (uint16_t *)bsearch(&key, utf8_key, (sizeof(utf8_key) / sizeof(utf8_key[0])), sizeof(uint16_t), (int (*)(const void *, const void *))int_compar); if (index != 0) { // get Kuten code *pBuf = utf8_value[index - utf8_key]; } uBuf += 3; pBuf++; ret++; } *pBuf = 0; return ret; } void draw_utf8(int offset_x, int offset_y, char *buf_u) { int len = conv_utf8(buf_u, kBuf); int xpos = 0; for(int i = 0; i < len; i++) { int width = font.read_kuten(kBuf[i]); draw_string(xpos + offset_x, offset_y, width); xpos += width; } } int main() { led = 0; lcd.cls(); draw_utf8(0, 0, "進捗どうですか??"); draw_utf8(0, 16, "mbedで日本語表示"); while(1) { led = !led; wait(1.0); } }