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

Dependencies:   mbed

Committer:
kanpapa
Date:
Thu Nov 03 10:44:37 2011 +0000
Revision:
0:f4f140765442
Child:
1:c40b9c81a2ba
Alpha test version. 16dot font only.

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 0:f4f140765442 8 =====================
kanpapa 0:f4f140765442 9 GP1059A01(I/O)
kanpapa 0:f4f140765442 10 ---------------------
kanpapa 0:f4f140765442 11 p9 1 (D0) I/O
kanpapa 0:f4f140765442 12 p10 2 (D1) I/O
kanpapa 0:f4f140765442 13 p11 3 (D2) I/O
kanpapa 0:f4f140765442 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
kanpapa 0:f4f140765442 43 const uint8_t LOW = 0;
kanpapa 0:f4f140765442 44
kanpapa 0:f4f140765442 45 unsigned char reverse_bit(unsigned char x){
kanpapa 0:f4f140765442 46 const unsigned int bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
kanpapa 0:f4f140765442 47 unsigned char y = 0;
kanpapa 0:f4f140765442 48 for (int i = 0; i < 8; i++){
kanpapa 0:f4f140765442 49 if ((bit[i] & x) != 0){
kanpapa 0:f4f140765442 50 y |= bit[7-i];
kanpapa 0:f4f140765442 51 }
kanpapa 0:f4f140765442 52 }
kanpapa 0:f4f140765442 53 return(y);
kanpapa 0:f4f140765442 54 }
kanpapa 0:f4f140765442 55
kanpapa 0:f4f140765442 56
kanpapa 0:f4f140765442 57
kanpapa 0:f4f140765442 58
kanpapa 0:f4f140765442 59 //
kanpapa 0:f4f140765442 60 // FONTX2 test routine
kanpapa 0:f4f140765442 61 // @gingaxx
kanpapa 0:f4f140765442 62 //
kanpapa 0:f4f140765442 63
kanpapa 0:f4f140765442 64 //#define kanji_file "/local/SHMZN16X.FNT"
kanpapa 0:f4f140765442 65 //#define kanji_file "/local/k12x10.fnt"
kanpapa 0:f4f140765442 66 #define kanji_file "/local/J2KZN16A.FNT"
kanpapa 0:f4f140765442 67
kanpapa 0:f4f140765442 68 int cx = 0;
kanpapa 0:f4f140765442 69 int cy = 0;
kanpapa 0:f4f140765442 70 int offsety = 0;
kanpapa 0:f4f140765442 71 bool kstate = false;
kanpapa 0:f4f140765442 72 unsigned char kbuf;
kanpapa 0:f4f140765442 73
kanpapa 0:f4f140765442 74
kanpapa 0:f4f140765442 75 FILE *fp; //File open buffer
kanpapa 0:f4f140765442 76
kanpapa 0:f4f140765442 77 unsigned short start[92], end[92];
kanpapa 0:f4f140765442 78 unsigned char font[64];
kanpapa 0:f4f140765442 79
kanpapa 0:f4f140765442 80 char Identifier[6+1];
kanpapa 0:f4f140765442 81 char FontName[8+1];
kanpapa 0:f4f140765442 82 unsigned char XSize;
kanpapa 0:f4f140765442 83 unsigned char YSize;
kanpapa 0:f4f140765442 84 unsigned char Size;
kanpapa 0:f4f140765442 85 unsigned char CodeType;
kanpapa 0:f4f140765442 86 unsigned char Tnum;
kanpapa 0:f4f140765442 87
kanpapa 0:f4f140765442 88 #define FONT_XBYTE ((XSize + 7) >> 3)
kanpapa 0:f4f140765442 89 #define FONT_YBYTE ((YSize + 7) >> 3)
kanpapa 0:f4f140765442 90
kanpapa 0:f4f140765442 91 void kanji_init(){
kanpapa 0:f4f140765442 92 //move cursor
kanpapa 0:f4f140765442 93 fp = fopen(kanji_file , "r");
kanpapa 0:f4f140765442 94
kanpapa 0:f4f140765442 95 if(!fp) {
kanpapa 0:f4f140765442 96 printf("File could not be opened!\n");
kanpapa 0:f4f140765442 97 led1 = 1;
kanpapa 0:f4f140765442 98 exit(1);
kanpapa 0:f4f140765442 99 }
kanpapa 0:f4f140765442 100
kanpapa 0:f4f140765442 101 fgets(Identifier, 6+1, fp); // FONTX2
kanpapa 0:f4f140765442 102 fgets(FontName, 8+1, fp);
kanpapa 0:f4f140765442 103 fread(&XSize, 1, 1, fp);
kanpapa 0:f4f140765442 104 fread(&YSize, 1, 1, fp);
kanpapa 0:f4f140765442 105 fread(&CodeType, 1, 1, fp);
kanpapa 0:f4f140765442 106 fread(&Tnum, 1, 1, fp);
kanpapa 0:f4f140765442 107
kanpapa 0:f4f140765442 108 printf("Identifier: %s\n\r",Identifier);
kanpapa 0:f4f140765442 109 printf("FontName: %s\n\r",FontName);
kanpapa 0:f4f140765442 110 printf("XSize: %d\n\r",XSize);
kanpapa 0:f4f140765442 111 printf("YSize: %d\n\r",YSize);
kanpapa 0:f4f140765442 112 printf("CodeType: %d\n\r",CodeType);
kanpapa 0:f4f140765442 113 printf("Tnum: %d\n\r",Tnum);
kanpapa 0:f4f140765442 114
kanpapa 0:f4f140765442 115 // Table read
kanpapa 0:f4f140765442 116 for(int a=0;a< Tnum ;a++){
kanpapa 0:f4f140765442 117 fread(&start[a],1,2,fp);
kanpapa 0:f4f140765442 118 fread(&end[a] ,1,2,fp);
kanpapa 0:f4f140765442 119 }
kanpapa 0:f4f140765442 120 }
kanpapa 0:f4f140765442 121
kanpapa 0:f4f140765442 122 //Kanji puts cr = kanji cord
kanpapa 0:f4f140765442 123 void k_puts(int cr){
kanpapa 0:f4f140765442 124
kanpapa 0:f4f140765442 125 const unsigned char bit_chk[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
kanpapa 0:f4f140765442 126
kanpapa 0:f4f140765442 127 //kanji address
kanpapa 0:f4f140765442 128 int c = 0;
kanpapa 0:f4f140765442 129 int adrs = 0;
kanpapa 0:f4f140765442 130 while(cr > start[c]){
kanpapa 0:f4f140765442 131 if(cr > end[c]){
kanpapa 0:f4f140765442 132 adrs += end[c]-start[c]+1;
kanpapa 0:f4f140765442 133 } else {
kanpapa 0:f4f140765442 134 adrs += cr - start[c];
kanpapa 0:f4f140765442 135 }
kanpapa 0:f4f140765442 136 c++;
kanpapa 0:f4f140765442 137 }
kanpapa 0:f4f140765442 138 c--;
kanpapa 0:f4f140765442 139 printf("C=%d,adrs=%d cr=%X \r\n",c,adrs,cr);
kanpapa 0:f4f140765442 140
kanpapa 0:f4f140765442 141 // Kanji image Read
kanpapa 0:f4f140765442 142 fseek( fp, Tnum*4+18+32*adrs, SEEK_SET );
kanpapa 0:f4f140765442 143 fread( &font, 1, 32, fp);
kanpapa 0:f4f140765442 144
kanpapa 0:f4f140765442 145 // debug dump
kanpapa 0:f4f140765442 146 for (int s = 0; s < 32 ; s++){
kanpapa 0:f4f140765442 147 printf(" %02x ",font[s]);
kanpapa 0:f4f140765442 148 }
kanpapa 0:f4f140765442 149 printf("\r\n");
kanpapa 0:f4f140765442 150
kanpapa 0:f4f140765442 151 // kanji put
kanpapa 0:f4f140765442 152 c = 0;
kanpapa 0:f4f140765442 153 unsigned int vfd_address = cx * 8 * 16 + cy * 2;
kanpapa 0:f4f140765442 154 //printf("VFD address: %04x\r\n",vfd_address);
kanpapa 0:f4f140765442 155
kanpapa 0:f4f140765442 156 int n = 0;
kanpapa 0:f4f140765442 157 for (int j = 0; j < 2 ; j++) {
kanpapa 0:f4f140765442 158 for (int x = 0; x < 8; x++) {
kanpapa 0:f4f140765442 159 //printf("set VFD address: %04x\r\n",vfd_address);
kanpapa 0:f4f140765442 160 vfd.set_write_read_address(vfd_address);
kanpapa 0:f4f140765442 161 int m = 0;
kanpapa 0:f4f140765442 162 for (int k = 0; k < 2 ; k++) {
kanpapa 0:f4f140765442 163 unsigned int d = 0;
kanpapa 0:f4f140765442 164 for (int i = 0; i < 8; i++) {
kanpapa 0:f4f140765442 165 if (font[m * 2 + j] & bit_chk[x]) {
kanpapa 0:f4f140765442 166 //printf("BIT on!\r\n");
kanpapa 0:f4f140765442 167 d = d | 1;
kanpapa 0:f4f140765442 168 }
kanpapa 0:f4f140765442 169 if (i < 7) {
kanpapa 0:f4f140765442 170 d = d << 1;
kanpapa 0:f4f140765442 171 }
kanpapa 0:f4f140765442 172 //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 173 m++;
kanpapa 0:f4f140765442 174 }
kanpapa 0:f4f140765442 175 //printf("send_data: %02x\r\n",d);
kanpapa 0:f4f140765442 176 vfd.send_data(d);
kanpapa 0:f4f140765442 177 }
kanpapa 0:f4f140765442 178 vfd_address = vfd_address + 8;
kanpapa 0:f4f140765442 179 }
kanpapa 0:f4f140765442 180 n++;
kanpapa 0:f4f140765442 181 }
kanpapa 0:f4f140765442 182
kanpapa 0:f4f140765442 183 #ifdef TATEGAKI // tategaki
kanpapa 0:f4f140765442 184 for (int x = 0; x < 16; x++){
kanpapa 0:f4f140765442 185 //printf("set VFD address: %04x\r\n",vfd_address);
kanpapa 0:f4f140765442 186 //printf("send_data: font[%d] = %02x\r\n",x,font[c]);
kanpapa 0:f4f140765442 187 vfd.set_write_read_address(vfd_address + 1);
kanpapa 0:f4f140765442 188 vfd.send_data(reverse_bit(font[c]));
kanpapa 0:f4f140765442 189 c++;
kanpapa 0:f4f140765442 190
kanpapa 0:f4f140765442 191 //printf("set VFD address2: %04x\r\n",vfd_address);
kanpapa 0:f4f140765442 192 //printf("send_data2: font[%d] = %02x\r\n",x,font[c]);
kanpapa 0:f4f140765442 193 vfd.set_write_read_address(vfd_address);
kanpapa 0:f4f140765442 194 vfd.send_data(reverse_bit(font[c]));
kanpapa 0:f4f140765442 195 c++;
kanpapa 0:f4f140765442 196
kanpapa 0:f4f140765442 197 vfd_address = vfd_address + 8;
kanpapa 0:f4f140765442 198 }
kanpapa 0:f4f140765442 199 #endif // TATEGAKI
kanpapa 0:f4f140765442 200
kanpapa 0:f4f140765442 201 // move cursor
kanpapa 0:f4f140765442 202 cx++;
kanpapa 0:f4f140765442 203 if (cx >= 15){ //LF control
kanpapa 0:f4f140765442 204 cx = 0;
kanpapa 0:f4f140765442 205 cy++;
kanpapa 0:f4f140765442 206 }
kanpapa 0:f4f140765442 207 }
kanpapa 0:f4f140765442 208
kanpapa 0:f4f140765442 209 void kanji_end(){
kanpapa 0:f4f140765442 210 fclose(fp);
kanpapa 0:f4f140765442 211 }
kanpapa 0:f4f140765442 212
kanpapa 0:f4f140765442 213
kanpapa 0:f4f140765442 214 void blink_LED() {
kanpapa 0:f4f140765442 215 for (int i = 0 ; i < 5 ; i++) {
kanpapa 0:f4f140765442 216 led4 = 1;
kanpapa 0:f4f140765442 217 wait(0.2);
kanpapa 0:f4f140765442 218 led4 = 0;
kanpapa 0:f4f140765442 219 wait(0.2);
kanpapa 0:f4f140765442 220 }
kanpapa 0:f4f140765442 221 return;
kanpapa 0:f4f140765442 222 }
kanpapa 0:f4f140765442 223
kanpapa 0:f4f140765442 224 int main() {
kanpapa 0:f4f140765442 225
kanpapa 0:f4f140765442 226 led1 = LOW;
kanpapa 0:f4f140765442 227 led2 = LOW;
kanpapa 0:f4f140765442 228 led3 = LOW;
kanpapa 0:f4f140765442 229 led4 = LOW;
kanpapa 0:f4f140765442 230
kanpapa 0:f4f140765442 231 // Start Sign
kanpapa 0:f4f140765442 232 blink_LED();
kanpapa 0:f4f140765442 233
kanpapa 0:f4f140765442 234 vfd.cls();
kanpapa 0:f4f140765442 235
kanpapa 0:f4f140765442 236 // FONTX2 test
kanpapa 0:f4f140765442 237 vfd.set_disp_start_address(0); // Display address: 000000H
kanpapa 0:f4f140765442 238 vfd.luminance_adjustment(0x0f); // 100%
kanpapa 0:f4f140765442 239
kanpapa 0:f4f140765442 240 kanji_init();
kanpapa 0:f4f140765442 241 printf("kanji_init()\r\n");
kanpapa 0:f4f140765442 242
kanpapa 0:f4f140765442 243 for (unsigned int kc = 0x8801; kc < 0x8820 ; kc++){
kanpapa 0:f4f140765442 244 k_puts(kc); // 8abf
kanpapa 0:f4f140765442 245 }
kanpapa 0:f4f140765442 246
kanpapa 0:f4f140765442 247 kanji_end();
kanpapa 0:f4f140765442 248 printf("kanji_end()\r\n");
kanpapa 0:f4f140765442 249
kanpapa 0:f4f140765442 250 // END Sign
kanpapa 0:f4f140765442 251 blink_LED();
kanpapa 0:f4f140765442 252 }