16x16漢字フォント表示テスト

Dependencies:   SDFileSystem mbed

16x16漢字フォント表示テストプログラムです。
フォントファイルは http://goji2100.com に置いてあります。

(日本語フォントROM GT20L16J1Y が在庫切れのため・・)
「委託品からスイッチサイエンス商品となりました」だそうです・・(;
https://www.switch-science.com/catalog/1611/

Committer:
Goji
Date:
Tue Sep 23 10:01:01 2014 +0000
Revision:
0:41876cc67853
16x16 ??????????????????? http://goji2100.com ?????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Goji 0:41876cc67853 1 #include "mbed.h"
Goji 0:41876cc67853 2 #include "SDFileSystem.h"
Goji 0:41876cc67853 3 SDFileSystem sd(p5, p6, p7, p8, "sd");
Goji 0:41876cc67853 4
Goji 0:41876cc67853 5 int Load_Font16(uint16_t req, uint8_t *buff)
Goji 0:41876cc67853 6 {
Goji 0:41876cc67853 7 static FILE *fp = 0;
Goji 0:41876cc67853 8
Goji 0:41876cc67853 9 if ((fp == 0) || (req == 0xFFF0)) {
Goji 0:41876cc67853 10 fp = fopen("/sd/jiskan16.fnt", "rb");
Goji 0:41876cc67853 11 if (req == 0xFFF0) return((fp) ? 0 : -1);
Goji 0:41876cc67853 12 }
Goji 0:41876cc67853 13
Goji 0:41876cc67853 14 if (req == 0xFFF1) {
Goji 0:41876cc67853 15 fclose(fp);
Goji 0:41876cc67853 16 return(0);
Goji 0:41876cc67853 17 }
Goji 0:41876cc67853 18
Goji 0:41876cc67853 19 if (fseek(fp, (req * 32L), SEEK_SET) != -1) {
Goji 0:41876cc67853 20 fread(buff, 1, 32, fp);
Goji 0:41876cc67853 21 return(0);
Goji 0:41876cc67853 22 }
Goji 0:41876cc67853 23 return(-1);
Goji 0:41876cc67853 24 }
Goji 0:41876cc67853 25
Goji 0:41876cc67853 26 void Disp_Font16(uint16_t k)
Goji 0:41876cc67853 27 {
Goji 0:41876cc67853 28 uint8_t buff[16][2];
Goji 0:41876cc67853 29
Goji 0:41876cc67853 30 k -= (k > 0x9FFC) ? (0x8140 + 0x4000) : 0x8140;
Goji 0:41876cc67853 31 if (k & 0x00C0) k--;
Goji 0:41876cc67853 32 k = ((k >> 8) * 94 * 2) + (k & 0x00FF);
Goji 0:41876cc67853 33
Goji 0:41876cc67853 34 Load_Font16(k, buff[0]);
Goji 0:41876cc67853 35
Goji 0:41876cc67853 36 for (int y = 0; y < 16; y++) {
Goji 0:41876cc67853 37 for (int x = 0; x < 2; x++) {
Goji 0:41876cc67853 38 for (uint8_t m = 0x80; m; m >>= 1) {
Goji 0:41876cc67853 39 printf((buff[y][x] & m) ? "o" : ".");
Goji 0:41876cc67853 40 }
Goji 0:41876cc67853 41 }
Goji 0:41876cc67853 42 printf("\n");
Goji 0:41876cc67853 43 }
Goji 0:41876cc67853 44 printf("\n");
Goji 0:41876cc67853 45 }
Goji 0:41876cc67853 46
Goji 0:41876cc67853 47
Goji 0:41876cc67853 48 void Disp_KANJI(uint16_t *s)
Goji 0:41876cc67853 49 {
Goji 0:41876cc67853 50 while(*s) Disp_Font16(*s++);
Goji 0:41876cc67853 51 }
Goji 0:41876cc67853 52
Goji 0:41876cc67853 53 uint16_t kstr[] = {
Goji 0:41876cc67853 54 0x93FA, 0x967B, 0x8CEA, 0x955C, 0x8EA6, 0x82CC, 0x8365, 0x8358, 0x8367, 0x82C5, 0x82B7, 0x8142
Goji 0:41876cc67853 55 , 0
Goji 0:41876cc67853 56 };
Goji 0:41876cc67853 57
Goji 0:41876cc67853 58
Goji 0:41876cc67853 59 int main()
Goji 0:41876cc67853 60 {
Goji 0:41876cc67853 61 Disp_KANJI(kstr);
Goji 0:41876cc67853 62
Goji 0:41876cc67853 63 uint16_t ds = 0x93FA;
Goji 0:41876cc67853 64 uint16_t de = 0x94FF;
Goji 0:41876cc67853 65
Goji 0:41876cc67853 66 for ( ; ds < de; ds++) {
Goji 0:41876cc67853 67 if (ds < 0x8140) continue;
Goji 0:41876cc67853 68 if (ds > 0xE0FC) break;
Goji 0:41876cc67853 69 if ((ds & 0x00FF) < 0x40) continue;
Goji 0:41876cc67853 70 if ((ds & 0x00FF) == 0x7F) continue;
Goji 0:41876cc67853 71 if ((ds & 0x00FF) > 0xFC) continue;
Goji 0:41876cc67853 72
Goji 0:41876cc67853 73 printf("%04X:\n", ds);
Goji 0:41876cc67853 74 Disp_Font16(ds);
Goji 0:41876cc67853 75 }
Goji 0:41876cc67853 76 }