An example code how to use GT20L16J1Y_font library

Dependencies:   C12832 GT20L16J1Y_font mbed

Revision:
3:b095be7ec287
Parent:
0:b468ef973095
--- a/main.cpp	Wed Jan 15 07:05:48 2014 +0000
+++ b/main.cpp	Thu Sep 04 06:55:37 2014 +0000
@@ -1,19 +1,31 @@
 #include "mbed.h"
-#include "C12832_lcd.h"
+#include "C12832.h"
 #include "GT20L16J1Y_font.h"
+#include "utf8_table.h"
+
+#include <stdlib.h>
 
 /* 
     GT20L16J1Y library test program
-    works with mbed application board
 */
 
-C12832_LCD lcd;
+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
 
-void draw_kanji(int offset_x, int offset_y)
+#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<32; x++)
+    for(int x=0; x<width*2; x++)
     {
         for(int y=0; y<8; y++)
         {
@@ -21,30 +33,83 @@
                 color = 1;
             else
                 color = 0;
-            lcd.pixel(x%16 + offset_x, y+(8*(x>>4)) + offset_y, color);
+            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()
 {
-    unsigned short kbuf[16] = {
-        0x9069,
-        0x92BB,
-        0x82C7,
-        0x82A4,
-        0x82C5,
-        0x82B7,
-        0x82A9,
-        0x8148
-    };
-        
+    led = 0;
     lcd.cls();
-
-    for(int i=0; i<8; i++) {
-        font.read(kbuf[i]); 
-        draw_kanji(16*i, 0);
+    draw_utf8(0, 0,  "進捗どうですか??");
+    draw_utf8(0, 16, "mbedで日本語表示");
+    while(1) {
+        led = !led;
+        wait(1.0);
     }
-    
 }