00001
00002
00003
00004 #include "mbed.h"
00005 #include "vfd_gp1059.h"
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 VFD_GP1059 vfd(p9, p10, p11, p12, p13, p14, p15, p16, p21, p22, p23, p24, p25);
00027
00028
00029
00030
00031
00032
00033
00034 LocalFileSystem local("local");
00035
00036
00037 DigitalOut led1(LED1);
00038 DigitalOut led2(LED2);
00039 DigitalOut led3(LED3);
00040 DigitalOut led4(LED4);
00041
00042
00043 const uint8_t LOW = 0;
00044
00045 unsigned char reverse_bit(unsigned char x){
00046 const unsigned int bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
00047 unsigned char y = 0;
00048 for (int i = 0; i < 8; i++){
00049 if ((bit[i] & x) != 0){
00050 y |= bit[7-i];
00051 }
00052 }
00053 return(y);
00054 }
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 #define kanji_file "/local/J2KZN16A.FNT"
00067
00068 int cx = 0;
00069 int cy = 0;
00070 int offsety = 0;
00071 bool kstate = false;
00072 unsigned char kbuf;
00073
00074
00075 FILE *fp;
00076
00077 unsigned short start[92], end[92];
00078 unsigned char font[64];
00079
00080 char Identifier[6+1];
00081 char FontName[8+1];
00082 unsigned char XSize;
00083 unsigned char YSize;
00084 unsigned char Size;
00085 unsigned char CodeType;
00086 unsigned char Tnum;
00087
00088 #define FONT_XBYTE ((XSize + 7) >> 3)
00089 #define FONT_YBYTE ((YSize + 7) >> 3)
00090
00091 void kanji_init(){
00092
00093 fp = fopen(kanji_file , "r");
00094
00095 if(!fp) {
00096 printf("File could not be opened!\n");
00097 led1 = 1;
00098 exit(1);
00099 }
00100
00101 fgets(Identifier, 6+1, fp);
00102 fgets(FontName, 8+1, fp);
00103 fread(&XSize, 1, 1, fp);
00104 fread(&YSize, 1, 1, fp);
00105 fread(&CodeType, 1, 1, fp);
00106 fread(&Tnum, 1, 1, fp);
00107
00108 printf("Identifier: %s\n\r",Identifier);
00109 printf("FontName: %s\n\r",FontName);
00110 printf("XSize: %d\n\r",XSize);
00111 printf("YSize: %d\n\r",YSize);
00112 printf("CodeType: %d\n\r",CodeType);
00113 printf("Tnum: %d\n\r",Tnum);
00114
00115
00116 for(int a=0;a< Tnum ;a++){
00117 fread(&start[a],1,2,fp);
00118 fread(&end[a] ,1,2,fp);
00119 }
00120 }
00121
00122
00123 void k_puts(int cr){
00124
00125 const unsigned char bit_chk[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
00126
00127
00128 int c = 0;
00129 int adrs = 0;
00130 while(cr > start[c]){
00131 if(cr > end[c]){
00132 adrs += end[c]-start[c]+1;
00133 } else {
00134 adrs += cr - start[c];
00135 }
00136 c++;
00137 }
00138 c--;
00139 printf("C=%d,adrs=%d cr=%X \r\n",c,adrs,cr);
00140
00141
00142 fseek( fp, Tnum*4+18+32*adrs, SEEK_SET );
00143 fread( &font, 1, 32, fp);
00144
00145
00146 for (int s = 0; s < 32 ; s++){
00147 printf(" %02x ",font[s]);
00148 }
00149 printf("\r\n");
00150
00151
00152 c = 0;
00153 unsigned int vfd_address = cx * 8 * 16 + cy * 2;
00154
00155
00156 int n = 0;
00157 for (int j = 0; j < 2 ; j++) {
00158 for (int x = 0; x < 8; x++) {
00159
00160 vfd.set_write_read_address(vfd_address);
00161 int m = 0;
00162 for (int k = 0; k < 2 ; k++) {
00163 unsigned int d = 0;
00164 for (int i = 0; i < 8; i++) {
00165 if (font[m * 2 + j] & bit_chk[x]) {
00166
00167 d = d | 1;
00168 }
00169 if (i < 7) {
00170 d = d << 1;
00171 }
00172
00173 m++;
00174 }
00175
00176 vfd.send_data(d);
00177 }
00178 vfd_address = vfd_address + 8;
00179 }
00180 n++;
00181 }
00182
00183 #ifdef TATEGAKI // tategaki
00184 for (int x = 0; x < 16; x++){
00185
00186
00187 vfd.set_write_read_address(vfd_address + 1);
00188 vfd.send_data(reverse_bit(font[c]));
00189 c++;
00190
00191
00192
00193 vfd.set_write_read_address(vfd_address);
00194 vfd.send_data(reverse_bit(font[c]));
00195 c++;
00196
00197 vfd_address = vfd_address + 8;
00198 }
00199 #endif // TATEGAKI
00200
00201
00202 cx++;
00203 if (cx >= 15){
00204 cx = 0;
00205 cy++;
00206 }
00207 }
00208
00209 void kanji_end(){
00210 fclose(fp);
00211 }
00212
00213
00214 void blink_LED() {
00215 for (int i = 0 ; i < 5 ; i++) {
00216 led4 = 1;
00217 wait(0.2);
00218 led4 = 0;
00219 wait(0.2);
00220 }
00221 return;
00222 }
00223
00224 int main() {
00225
00226 led1 = LOW;
00227 led2 = LOW;
00228 led3 = LOW;
00229 led4 = LOW;
00230
00231
00232 blink_LED();
00233
00234 vfd.cls();
00235
00236
00237 vfd.set_disp_start_address(0);
00238 vfd.luminance_adjustment(0x0f);
00239
00240 kanji_init();
00241 printf("kanji_init()\r\n");
00242
00243 for (unsigned int kc = 0x8801; kc < 0x8820 ; kc++){
00244 k_puts(kc);
00245 }
00246
00247 kanji_end();
00248 printf("kanji_end()\r\n");
00249
00250
00251 blink_LED();
00252 }