An example code how to use GT20L16J1Y_font library

Dependencies:   C12832 GT20L16J1Y_font mbed

Committer:
MACRUM
Date:
Thu Sep 04 06:55:37 2014 +0000
Revision:
3:b095be7ec287
Parent:
0:b468ef973095
Changed not to use w_char library functions; Added UTF-8 to KuTen conversion table

Who changed what in which revision?

UserRevisionLine numberNew 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 }