AQM1248A LCD + GT20L16J1Y Japanese font ROM with Nucleo

Dependencies:   GT20L16J1Y_font aqm1248a_lcd mbed

Fork of Nucleo_AQM1248A by Masato YAMANISHI

/media/uploads/masato/gt20l16j1y.jpg

STM32 Nucleo L152RE/mbed と Freescale FRDM-KL05Z で秋月 AQM1248A グラフィック LCD をドライブに日本語フォントROM、GT20L16J1Y_font を追加。雪だるまの人GT20L16J1Y_font ライブラリとUTF-8によるサンプルを流用。

フォントROMのほうはLCDとは別系統のSPIを使用。SPI 信号線にはプルアップ抵抗を付けている(裏面にチップ抵抗)。LCDドライバに組み込んで同じSPIを使うのもありかも。

STM32 Nucleo ボードの電源のページにも書いた通り、Nucleo ボードで USB で電源だけを供給する場合には SB1 をショートします。

Committer:
masato
Date:
Tue Jun 02 12:25:13 2015 +0000
Revision:
3:93270b9f6a01
Parent:
2:862f6ab24cfc
working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masato 0:69bb996225c1 1 #include "mbed.h"
masato 0:69bb996225c1 2 #include "aqm1248a_lcd.h"
masato 3:93270b9f6a01 3 #include "GT20L16J1Y_font.h"
masato 3:93270b9f6a01 4 #include "utf8_table.h"
masato 3:93270b9f6a01 5
masato 3:93270b9f6a01 6 #include <stdlib.h>
masato 0:69bb996225c1 7
masato 0:69bb996225c1 8 aqm1248a_lcd lcd;
masato 0:69bb996225c1 9
masato 0:69bb996225c1 10 const static
masato 0:69bb996225c1 11 char mbedlogo128x48[768]
masato 0:69bb996225c1 12 = {
masato 0:69bb996225c1 13 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 14 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 15 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 16 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 17 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 18 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 19 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 20 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 21 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 22 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 23 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 24 0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 25 0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 26 0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 27 0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 28 0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 29 0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 30 0x00,0x00,0x03,0xc7,0x83,0xe0,0x3c,0x7c,0x00,0x7e,0x00,0x3e,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 31 0x00,0x00,0x03,0xdf,0xef,0xf8,0x3d,0xfe,0x01,0xff,0x80,0x7f,0xbc,0x00,0x00,0x00,
masato 0:69bb996225c1 32 0x00,0x00,0x03,0xff,0xff,0xf8,0x3f,0xff,0x03,0xff,0xc0,0xff,0xfc,0x00,0x00,0x00,
masato 0:69bb996225c1 33 0x00,0x00,0x03,0xf1,0xfc,0x7c,0x3f,0x0f,0x87,0xc3,0xe1,0xf0,0xfc,0x00,0x00,0x00,
masato 0:69bb996225c1 34 0x00,0x00,0x03,0xe0,0xf8,0x3c,0x3e,0x07,0x87,0x81,0xe1,0xe0,0x7c,0x00,0x00,0x00,
masato 0:69bb996225c1 35 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3c,0x03,0xcf,0x00,0xe3,0xc0,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 36 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3c,0x03,0xcf,0x00,0xf3,0xc0,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 37 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3c,0x03,0xcf,0xff,0xf3,0xc0,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 38 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3c,0x03,0xcf,0xff,0xf3,0xc0,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 39 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3c,0x03,0xcf,0xff,0xf3,0xc0,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 40 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3c,0x03,0xcf,0x00,0x03,0xc0,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 41 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3e,0x03,0xcf,0x00,0x03,0xc0,0x7c,0x00,0x00,0x00,
masato 0:69bb996225c1 42 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3e,0x07,0x87,0x80,0x01,0xe0,0x7c,0x00,0x00,0x00,
masato 0:69bb996225c1 43 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3f,0x0f,0x87,0xc1,0xc1,0xf0,0xfc,0x00,0x00,0x00,
masato 0:69bb996225c1 44 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3f,0xff,0x03,0xff,0xf0,0xff,0xfc,0x00,0x00,0x00,
masato 0:69bb996225c1 45 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3d,0xfe,0x01,0xff,0xe0,0x7f,0xbc,0x00,0x00,0x00,
masato 0:69bb996225c1 46 0x00,0x00,0x03,0xc0,0xf0,0x3c,0x3c,0xfc,0x00,0x7f,0x00,0x3f,0x3c,0x00,0x00,0x00,
masato 0:69bb996225c1 47 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 48 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 49 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 50 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 51 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 52 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 53 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 54 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 55 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 56 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 57 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 58 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 59 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
masato 0:69bb996225c1 60 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
masato 0:69bb996225c1 61 };
masato 0:69bb996225c1 62
masato 0:69bb996225c1 63
masato 0:69bb996225c1 64 const static struct Bitmap logo = {
masato 0:69bb996225c1 65 128,
masato 0:69bb996225c1 66 48,
masato 0:69bb996225c1 67 16,
masato 0:69bb996225c1 68 (char*)mbedlogo128x48,
masato 0:69bb996225c1 69 };
masato 0:69bb996225c1 70
masato 2:862f6ab24cfc 71 const char target[] =
masato 0:69bb996225c1 72 #if defined(TARGET_NUCLEO_L152RE)
masato 2:862f6ab24cfc 73 "STM32 Nucleo L152RE"
masato 2:862f6ab24cfc 74 #elif defined(TARGET_KL05Z)
masato 2:862f6ab24cfc 75 "Freescale FRDM-KL05Z"
masato 2:862f6ab24cfc 76 #else
masato 2:862f6ab24cfc 77 "????"
masato 0:69bb996225c1 78 #endif
masato 2:862f6ab24cfc 79 ;
masato 2:862f6ab24cfc 80
masato 3:93270b9f6a01 81 #if defined(TARGET_NUCLEO_L152RE)
masato 3:93270b9f6a01 82 GT20L16J1Y_FONT font(D4, D5, D3, D2);
masato 3:93270b9f6a01 83 #else
masato 3:93270b9f6a01 84 GT20L16J1Y_FONT font(p11, p12, p13, p10);
masato 3:93270b9f6a01 85 #endif
masato 3:93270b9f6a01 86
masato 3:93270b9f6a01 87 #define numOfCharBuffer 40
masato 3:93270b9f6a01 88 uint16_t kBuf[numOfCharBuffer];
masato 3:93270b9f6a01 89
masato 3:93270b9f6a01 90 void draw_string(int offset_x, int offset_y, int width)
masato 3:93270b9f6a01 91 {
masato 3:93270b9f6a01 92 int color;
masato 3:93270b9f6a01 93 for(int x=0; x<width*2; x++)
masato 3:93270b9f6a01 94 {
masato 3:93270b9f6a01 95 for(int y=0; y<8; y++)
masato 3:93270b9f6a01 96 {
masato 3:93270b9f6a01 97 if (font.bitmap[x] & (1<<y))
masato 3:93270b9f6a01 98 color = 1;
masato 3:93270b9f6a01 99 else
masato 3:93270b9f6a01 100 color = 0;
masato 3:93270b9f6a01 101 lcd.pixel(x%width + offset_x, y+(8*(x/width)) + offset_y, color);
masato 3:93270b9f6a01 102 }
masato 3:93270b9f6a01 103 }
masato 3:93270b9f6a01 104 lcd.copy_to_lcd();
masato 3:93270b9f6a01 105 }
masato 3:93270b9f6a01 106
masato 3:93270b9f6a01 107 int int_compar(const uint16_t *a, const uint16_t *b)
masato 3:93270b9f6a01 108 {
masato 3:93270b9f6a01 109 if (*a < *b)
masato 3:93270b9f6a01 110 return (-1);
masato 3:93270b9f6a01 111 else if (*a > *b)
masato 3:93270b9f6a01 112 return (1);
masato 3:93270b9f6a01 113 else
masato 3:93270b9f6a01 114 return (0);
masato 3:93270b9f6a01 115 }
masato 3:93270b9f6a01 116
masato 3:93270b9f6a01 117 int conv_utf8(char* utfBuffer, uint16_t* kutenBuffer)
masato 3:93270b9f6a01 118 {
masato 3:93270b9f6a01 119 int ret;
masato 3:93270b9f6a01 120 uint16_t key, *index, *pBuf;
masato 3:93270b9f6a01 121 char *uBuf;
masato 3:93270b9f6a01 122
masato 3:93270b9f6a01 123 uBuf = utfBuffer;
masato 3:93270b9f6a01 124 pBuf = kutenBuffer;
masato 3:93270b9f6a01 125 ret = 0;
masato 3:93270b9f6a01 126
masato 3:93270b9f6a01 127 while (uBuf[0] != 0) {
masato 3:93270b9f6a01 128 if (uBuf[0] >= 0x20 && uBuf[0] < 0x80) {
masato 3:93270b9f6a01 129 // in case of ASCII
masato 3:93270b9f6a01 130 *pBuf++ = (uint16_t)uBuf[0];
masato 3:93270b9f6a01 131 uBuf += 1;
masato 3:93270b9f6a01 132 ret++;
masato 3:93270b9f6a01 133 continue;
masato 3:93270b9f6a01 134 }
masato 3:93270b9f6a01 135 else if ( (uBuf[0]&0xF0) != 0xE0) {
masato 3:93270b9f6a01 136 uBuf += 1;
masato 3:93270b9f6a01 137 continue;
masato 3:93270b9f6a01 138 }
masato 3:93270b9f6a01 139 // extract valid bits of UTF-8
masato 3:93270b9f6a01 140 key = ((uBuf[0] & 0x000F) << 12) | ((uBuf[1] & 0x003F) << 6) | (uBuf[2] & 0x003F);
masato 3:93270b9f6a01 141
masato 3:93270b9f6a01 142 // search UTF-8 code from utf8_key[] table to get index of Kuten table
masato 3:93270b9f6a01 143 index = (uint16_t *)bsearch(&key, utf8_key, (sizeof(utf8_key) / sizeof(utf8_key[0])), sizeof(uint16_t), (int (*)(const void *, const void *))int_compar);
masato 3:93270b9f6a01 144 if (index != 0) {
masato 3:93270b9f6a01 145 // get Kuten code
masato 3:93270b9f6a01 146 *pBuf = utf8_value[index - utf8_key];
masato 3:93270b9f6a01 147 }
masato 3:93270b9f6a01 148
masato 3:93270b9f6a01 149 uBuf += 3;
masato 3:93270b9f6a01 150 pBuf++;
masato 3:93270b9f6a01 151 ret++;
masato 3:93270b9f6a01 152 }
masato 3:93270b9f6a01 153 *pBuf = 0;
masato 3:93270b9f6a01 154
masato 3:93270b9f6a01 155 return ret;
masato 3:93270b9f6a01 156 }
masato 3:93270b9f6a01 157
masato 3:93270b9f6a01 158 void draw_utf8(int offset_x, int offset_y, char *buf_u)
masato 3:93270b9f6a01 159 {
masato 3:93270b9f6a01 160 int len = conv_utf8(buf_u, kBuf);
masato 3:93270b9f6a01 161 int xpos = 0;
masato 3:93270b9f6a01 162
masato 3:93270b9f6a01 163 for(int i = 0; i < len; i++) {
masato 3:93270b9f6a01 164 int width = font.read_kuten(kBuf[i]);
masato 3:93270b9f6a01 165 draw_string(xpos + offset_x, offset_y, width);
masato 3:93270b9f6a01 166 xpos += width;
masato 3:93270b9f6a01 167 }
masato 3:93270b9f6a01 168 }
masato 3:93270b9f6a01 169
masato 3:93270b9f6a01 170
masato 2:862f6ab24cfc 171 int main() {
masato 3:93270b9f6a01 172 unsigned short kbuf[16] = {0x93fa, 0x967b, 0x8cea, 0x955c, 0x8ea6};
masato 3:93270b9f6a01 173
masato 2:862f6ab24cfc 174 printf("%s\r\n", target);
masato 0:69bb996225c1 175 lcd.setmode(NORMAL);
masato 0:69bb996225c1 176 // lcd.set_font((unsigned char*) Arial_9);
masato 0:69bb996225c1 177 lcd.set_contrast(25);
masato 0:69bb996225c1 178 while (1) {
masato 0:69bb996225c1 179 lcd.cls();
masato 0:69bb996225c1 180 lcd.locate(0,0);
masato 3:93270b9f6a01 181 lcd.printf("\r\n %s!\r\n This is AQM1248A demo.", target);
masato 3:93270b9f6a01 182
masato 3:93270b9f6a01 183 wait(1);
masato 3:93270b9f6a01 184 lcd.cls();
masato 3:93270b9f6a01 185 draw_utf8(0, 0, "進捗どうですか??");
masato 3:93270b9f6a01 186 draw_utf8(0, 16, "mbedで日本語表示");
masato 3:93270b9f6a01 187 wait(5);
masato 3:93270b9f6a01 188 // continue;
masato 0:69bb996225c1 189
masato 3:93270b9f6a01 190 // wait(1);
masato 3:93270b9f6a01 191 lcd.cls();
masato 0:69bb996225c1 192 lcd.line(0, 0, lcd.width()-1, 0, 1);
masato 0:69bb996225c1 193 lcd.line(0, 0, lcd.width()-1, lcd.height()-1, 1);
masato 0:69bb996225c1 194 lcd.line(0, 0, 0, lcd.height()-1, 1);
masato 0:69bb996225c1 195 wait(1);
masato 0:69bb996225c1 196 lcd.circle(12, 32, 10, 1);
masato 0:69bb996225c1 197 lcd.fillcircle(24, 32, 10, 1);
masato 0:69bb996225c1 198 lcd.rect(36, 32, 48, 44, 1);
masato 0:69bb996225c1 199 lcd.fillrect(60, 32, 72, 44, 1);
masato 0:69bb996225c1 200 wait(1);
masato 0:69bb996225c1 201 lcd.print_bm(logo, 0, 0);
masato 0:69bb996225c1 202 // lcd.copy_to_lcd();
masato 2:862f6ab24cfc 203 lcd.printf("\r\n\r\n %s", target);
masato 2:862f6ab24cfc 204
masato 0:69bb996225c1 205 wait(12);
masato 0:69bb996225c1 206 }
masato 0:69bb996225c1 207 }