VFD(FUTABA GP1059A01)にFONTX2形式の16ドットフォントを表示します。

Dependencies:   mbed

Committer:
kanpapa
Date:
Sat Nov 12 05:47:37 2011 +0000
Revision:
1:c40b9c81a2ba
Parent:
0:f4f140765442
aplha rev.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kanpapa 0:f4f140765442 1 //
kanpapa 0:f4f140765442 2 // VFD test program
kanpapa 0:f4f140765442 3 //
kanpapa 0:f4f140765442 4 #include "mbed.h"
kanpapa 0:f4f140765442 5 #include "vfd_gp1059.h"
kanpapa 0:f4f140765442 6
kanpapa 0:f4f140765442 7 /*
kanpapa 1:c40b9c81a2ba 8 =========================
kanpapa 1:c40b9c81a2ba 9 FUTABA VFD GP1059A01(I/O)
kanpapa 1:c40b9c81a2ba 10 -------------------------
kanpapa 0:f4f140765442 11 p9 1 (D0) I/O
kanpapa 1:c40b9c81a2ba 12 p10 2 (D1) I/O
kanpapa 1:c40b9c81a2ba 13 p11 3 (D2) I/O
kanpapa 1:c40b9c81a2ba 14 p12 4 (D3) I/O
kanpapa 0:f4f140765442 15 p13 5 (D4) I/O
kanpapa 0:f4f140765442 16 p14 6 (D5) I/O
kanpapa 0:f4f140765442 17 p15 7 (D6) I/O
kanpapa 0:f4f140765442 18 p16 8 (D7) I/O
kanpapa 0:f4f140765442 19 p21 10 (INT) O
kanpapa 0:f4f140765442 20 p22 11 (WR) I
kanpapa 0:f4f140765442 21 p23 12 (RD) I
kanpapa 0:f4f140765442 22 p24 13 (CS) I
kanpapa 0:f4f140765442 23 p25 14 (C/D) I
kanpapa 0:f4f140765442 24 */
kanpapa 0:f4f140765442 25
kanpapa 0:f4f140765442 26 VFD_GP1059 vfd(p9, p10, p11, p12, p13, p14, p15, p16, p21, p22, p23, p24, p25);
kanpapa 0:f4f140765442 27
kanpapa 0:f4f140765442 28 //
kanpapa 0:f4f140765442 29 // For SD_card
kanpapa 0:f4f140765442 30 //
kanpapa 0:f4f140765442 31 //#include "SDFileSystem.h"
kanpapa 0:f4f140765442 32 //SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs, name (HW modification candidate)
kanpapa 0:f4f140765442 33
kanpapa 0:f4f140765442 34 LocalFileSystem local("local");
kanpapa 0:f4f140765442 35
kanpapa 0:f4f140765442 36 // LED Status
kanpapa 0:f4f140765442 37 DigitalOut led1(LED1);
kanpapa 0:f4f140765442 38 DigitalOut led2(LED2);
kanpapa 0:f4f140765442 39 DigitalOut led3(LED3);
kanpapa 0:f4f140765442 40 DigitalOut led4(LED4);
kanpapa 0:f4f140765442 41
kanpapa 0:f4f140765442 42 const uint8_t LOW = 0;
kanpapa 0:f4f140765442 43
kanpapa 0:f4f140765442 44 unsigned char reverse_bit(unsigned char x){
kanpapa 0:f4f140765442 45 const unsigned int bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
kanpapa 0:f4f140765442 46 unsigned char y = 0;
kanpapa 0:f4f140765442 47 for (int i = 0; i < 8; i++){
kanpapa 0:f4f140765442 48 if ((bit[i] & x) != 0){
kanpapa 0:f4f140765442 49 y |= bit[7-i];
kanpapa 0:f4f140765442 50 }
kanpapa 0:f4f140765442 51 }
kanpapa 0:f4f140765442 52 return(y);
kanpapa 0:f4f140765442 53 }
kanpapa 0:f4f140765442 54
kanpapa 0:f4f140765442 55 //
kanpapa 0:f4f140765442 56 // FONTX2 test routine
kanpapa 0:f4f140765442 57 // @gingaxx
kanpapa 0:f4f140765442 58 //
kanpapa 0:f4f140765442 59
kanpapa 0:f4f140765442 60 //#define kanji_file "/local/SHMZN16X.FNT"
kanpapa 0:f4f140765442 61 //#define kanji_file "/local/k12x10.fnt"
kanpapa 0:f4f140765442 62 #define kanji_file "/local/J2KZN16A.FNT"
kanpapa 0:f4f140765442 63
kanpapa 0:f4f140765442 64 int cx = 0;
kanpapa 0:f4f140765442 65 int cy = 0;
kanpapa 1:c40b9c81a2ba 66 //int offsety = 0;
kanpapa 1:c40b9c81a2ba 67 //bool kstate = false;
kanpapa 1:c40b9c81a2ba 68 //unsigned char kbuf;
kanpapa 0:f4f140765442 69
kanpapa 1:c40b9c81a2ba 70 FILE *fp; // File open buffer
kanpapa 0:f4f140765442 71
kanpapa 1:c40b9c81a2ba 72 unsigned short start[92], end[92]; // table
kanpapa 1:c40b9c81a2ba 73 unsigned char font[64]; // kanji image read buffer
kanpapa 0:f4f140765442 74
kanpapa 1:c40b9c81a2ba 75 char Identifier[6+1]; // 00-05 "FONTX2"
kanpapa 1:c40b9c81a2ba 76 char FontName[8+1]; // 06-13 Font name
kanpapa 1:c40b9c81a2ba 77 unsigned char XSize; // 14
kanpapa 1:c40b9c81a2ba 78 unsigned char YSize; // 15
kanpapa 1:c40b9c81a2ba 79 unsigned char CodeType; // 16 0:ASCII, 1:KANJI
kanpapa 1:c40b9c81a2ba 80 unsigned char Tnum; // 17 Table entry number
kanpapa 0:f4f140765442 81
kanpapa 1:c40b9c81a2ba 82 //#define FONT_XBYTE ((XSize + 7) >> 3)
kanpapa 1:c40b9c81a2ba 83 //#define FONT_YBYTE ((YSize + 7) >> 3)
kanpapa 0:f4f140765442 84
kanpapa 0:f4f140765442 85 void kanji_init(){
kanpapa 0:f4f140765442 86 //move cursor
kanpapa 0:f4f140765442 87 fp = fopen(kanji_file , "r");
kanpapa 0:f4f140765442 88
kanpapa 0:f4f140765442 89 if(!fp) {
kanpapa 0:f4f140765442 90 printf("File could not be opened!\n");
kanpapa 0:f4f140765442 91 led1 = 1;
kanpapa 0:f4f140765442 92 exit(1);
kanpapa 0:f4f140765442 93 }
kanpapa 0:f4f140765442 94
kanpapa 0:f4f140765442 95 fgets(Identifier, 6+1, fp); // FONTX2
kanpapa 0:f4f140765442 96 fgets(FontName, 8+1, fp);
kanpapa 0:f4f140765442 97 fread(&XSize, 1, 1, fp);
kanpapa 0:f4f140765442 98 fread(&YSize, 1, 1, fp);
kanpapa 0:f4f140765442 99 fread(&CodeType, 1, 1, fp);
kanpapa 0:f4f140765442 100 fread(&Tnum, 1, 1, fp);
kanpapa 0:f4f140765442 101
kanpapa 0:f4f140765442 102 printf("Identifier: %s\n\r",Identifier);
kanpapa 0:f4f140765442 103 printf("FontName: %s\n\r",FontName);
kanpapa 0:f4f140765442 104 printf("XSize: %d\n\r",XSize);
kanpapa 0:f4f140765442 105 printf("YSize: %d\n\r",YSize);
kanpapa 0:f4f140765442 106 printf("CodeType: %d\n\r",CodeType);
kanpapa 0:f4f140765442 107 printf("Tnum: %d\n\r",Tnum);
kanpapa 0:f4f140765442 108
kanpapa 0:f4f140765442 109 // Table read
kanpapa 1:c40b9c81a2ba 110 for (int a = 0; a < Tnum; a++){
kanpapa 1:c40b9c81a2ba 111 fread(&start[a], 1, 2, fp);
kanpapa 1:c40b9c81a2ba 112 fread(&end[a] , 1, 2, fp);
kanpapa 0:f4f140765442 113 }
kanpapa 0:f4f140765442 114 }
kanpapa 0:f4f140765442 115
kanpapa 0:f4f140765442 116 //Kanji puts cr = kanji cord
kanpapa 0:f4f140765442 117 void k_puts(int cr){
kanpapa 0:f4f140765442 118
kanpapa 0:f4f140765442 119 const unsigned char bit_chk[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
kanpapa 0:f4f140765442 120
kanpapa 1:c40b9c81a2ba 121 // calculate kanji address
kanpapa 0:f4f140765442 122 int c = 0;
kanpapa 0:f4f140765442 123 int adrs = 0;
kanpapa 0:f4f140765442 124 while(cr > start[c]){
kanpapa 1:c40b9c81a2ba 125 if (cr > end[c]){
kanpapa 1:c40b9c81a2ba 126 adrs += end[c] - start[c] + 1;
kanpapa 0:f4f140765442 127 } else {
kanpapa 0:f4f140765442 128 adrs += cr - start[c];
kanpapa 0:f4f140765442 129 }
kanpapa 0:f4f140765442 130 c++;
kanpapa 0:f4f140765442 131 }
kanpapa 0:f4f140765442 132 c--;
kanpapa 1:c40b9c81a2ba 133 printf("cr=%X, table num=%d, adrs=%d \r\n",cr,c,adrs);
kanpapa 0:f4f140765442 134
kanpapa 0:f4f140765442 135 // Kanji image Read
kanpapa 1:c40b9c81a2ba 136 fseek( fp, Tnum * 4 + 18 + 32 * adrs, SEEK_SET );
kanpapa 0:f4f140765442 137 fread( &font, 1, 32, fp);
kanpapa 0:f4f140765442 138
kanpapa 0:f4f140765442 139 // debug dump
kanpapa 0:f4f140765442 140 for (int s = 0; s < 32 ; s++){
kanpapa 0:f4f140765442 141 printf(" %02x ",font[s]);
kanpapa 0:f4f140765442 142 }
kanpapa 0:f4f140765442 143 printf("\r\n");
kanpapa 0:f4f140765442 144
kanpapa 0:f4f140765442 145 // kanji put
kanpapa 0:f4f140765442 146 c = 0;
kanpapa 0:f4f140765442 147 unsigned int vfd_address = cx * 8 * 16 + cy * 2;
kanpapa 0:f4f140765442 148 //printf("VFD address: %04x\r\n",vfd_address);
kanpapa 0:f4f140765442 149
kanpapa 0:f4f140765442 150 int n = 0;
kanpapa 0:f4f140765442 151 for (int j = 0; j < 2 ; j++) {
kanpapa 0:f4f140765442 152 for (int x = 0; x < 8; x++) {
kanpapa 0:f4f140765442 153 //printf("set VFD address: %04x\r\n",vfd_address);
kanpapa 0:f4f140765442 154 vfd.set_write_read_address(vfd_address);
kanpapa 0:f4f140765442 155 int m = 0;
kanpapa 0:f4f140765442 156 for (int k = 0; k < 2 ; k++) {
kanpapa 0:f4f140765442 157 unsigned int d = 0;
kanpapa 0:f4f140765442 158 for (int i = 0; i < 8; i++) {
kanpapa 0:f4f140765442 159 if (font[m * 2 + j] & bit_chk[x]) {
kanpapa 0:f4f140765442 160 //printf("BIT on!\r\n");
kanpapa 0:f4f140765442 161 d = d | 1;
kanpapa 0:f4f140765442 162 }
kanpapa 0:f4f140765442 163 if (i < 7) {
kanpapa 0:f4f140765442 164 d = d << 1;
kanpapa 0:f4f140765442 165 }
kanpapa 0:f4f140765442 166 //printf("i:%d, k:%d, m:%d, font:%02x, bit_chk:%02x, data:%02x\r\n",i,k,m,font[m*2+j],bit_chk[x],d);
kanpapa 0:f4f140765442 167 m++;
kanpapa 0:f4f140765442 168 }
kanpapa 0:f4f140765442 169 //printf("send_data: %02x\r\n",d);
kanpapa 0:f4f140765442 170 vfd.send_data(d);
kanpapa 0:f4f140765442 171 }
kanpapa 0:f4f140765442 172 vfd_address = vfd_address + 8;
kanpapa 0:f4f140765442 173 }
kanpapa 0:f4f140765442 174 n++;
kanpapa 0:f4f140765442 175 }
kanpapa 0:f4f140765442 176
kanpapa 0:f4f140765442 177 #ifdef TATEGAKI // tategaki
kanpapa 0:f4f140765442 178 for (int x = 0; x < 16; x++){
kanpapa 0:f4f140765442 179 //printf("set VFD address: %04x\r\n",vfd_address);
kanpapa 0:f4f140765442 180 //printf("send_data: font[%d] = %02x\r\n",x,font[c]);
kanpapa 0:f4f140765442 181 vfd.set_write_read_address(vfd_address + 1);
kanpapa 0:f4f140765442 182 vfd.send_data(reverse_bit(font[c]));
kanpapa 0:f4f140765442 183 c++;
kanpapa 0:f4f140765442 184
kanpapa 0:f4f140765442 185 //printf("set VFD address2: %04x\r\n",vfd_address);
kanpapa 0:f4f140765442 186 //printf("send_data2: font[%d] = %02x\r\n",x,font[c]);
kanpapa 0:f4f140765442 187 vfd.set_write_read_address(vfd_address);
kanpapa 0:f4f140765442 188 vfd.send_data(reverse_bit(font[c]));
kanpapa 0:f4f140765442 189 c++;
kanpapa 0:f4f140765442 190
kanpapa 0:f4f140765442 191 vfd_address = vfd_address + 8;
kanpapa 0:f4f140765442 192 }
kanpapa 0:f4f140765442 193 #endif // TATEGAKI
kanpapa 0:f4f140765442 194
kanpapa 0:f4f140765442 195 // move cursor
kanpapa 0:f4f140765442 196 cx++;
kanpapa 0:f4f140765442 197 if (cx >= 15){ //LF control
kanpapa 0:f4f140765442 198 cx = 0;
kanpapa 0:f4f140765442 199 cy++;
kanpapa 0:f4f140765442 200 }
kanpapa 0:f4f140765442 201 }
kanpapa 0:f4f140765442 202
kanpapa 0:f4f140765442 203 void kanji_end(){
kanpapa 0:f4f140765442 204 fclose(fp);
kanpapa 0:f4f140765442 205 }
kanpapa 0:f4f140765442 206
kanpapa 0:f4f140765442 207
kanpapa 0:f4f140765442 208 void blink_LED() {
kanpapa 0:f4f140765442 209 for (int i = 0 ; i < 5 ; i++) {
kanpapa 0:f4f140765442 210 led4 = 1;
kanpapa 0:f4f140765442 211 wait(0.2);
kanpapa 0:f4f140765442 212 led4 = 0;
kanpapa 0:f4f140765442 213 wait(0.2);
kanpapa 0:f4f140765442 214 }
kanpapa 0:f4f140765442 215 return;
kanpapa 0:f4f140765442 216 }
kanpapa 0:f4f140765442 217
kanpapa 0:f4f140765442 218 int main() {
kanpapa 0:f4f140765442 219
kanpapa 0:f4f140765442 220 led1 = LOW;
kanpapa 0:f4f140765442 221 led2 = LOW;
kanpapa 0:f4f140765442 222 led3 = LOW;
kanpapa 0:f4f140765442 223 led4 = LOW;
kanpapa 0:f4f140765442 224
kanpapa 0:f4f140765442 225 // Start Sign
kanpapa 0:f4f140765442 226 blink_LED();
kanpapa 0:f4f140765442 227
kanpapa 0:f4f140765442 228 vfd.cls();
kanpapa 0:f4f140765442 229
kanpapa 0:f4f140765442 230 // FONTX2 test
kanpapa 0:f4f140765442 231 vfd.set_disp_start_address(0); // Display address: 000000H
kanpapa 0:f4f140765442 232 vfd.luminance_adjustment(0x0f); // 100%
kanpapa 0:f4f140765442 233
kanpapa 0:f4f140765442 234 kanji_init();
kanpapa 0:f4f140765442 235 printf("kanji_init()\r\n");
kanpapa 0:f4f140765442 236
kanpapa 0:f4f140765442 237 for (unsigned int kc = 0x8801; kc < 0x8820 ; kc++){
kanpapa 0:f4f140765442 238 k_puts(kc); // 8abf
kanpapa 0:f4f140765442 239 }
kanpapa 0:f4f140765442 240
kanpapa 0:f4f140765442 241 kanji_end();
kanpapa 0:f4f140765442 242 printf("kanji_end()\r\n");
kanpapa 0:f4f140765442 243
kanpapa 0:f4f140765442 244 // END Sign
kanpapa 0:f4f140765442 245 blink_LED();
kanpapa 0:f4f140765442 246 }