this is kazushi's branch of AD128160
Fork of AD128160 by
Diff: s_Lcd.cpp
- Revision:
- 6:96576c9c7828
- Parent:
- 5:39b01a6f0f75
- Child:
- 7:227b64bf8fb1
diff -r 39b01a6f0f75 -r 96576c9c7828 s_Lcd.cpp --- a/s_Lcd.cpp Wed Nov 23 12:12:11 2011 +0000 +++ b/s_Lcd.cpp Thu Nov 24 14:01:45 2011 +0000 @@ -1,15 +1,20 @@ #include "mbed.h" -Serial device(p9, p10); // tx, rx -//Serial pc(USBTX, USBRX); // tx, rx +#define kanji_file "/local/SHMZN16X.FNT" +//#defin kanji_file "/local/k12x10.fnt" + +Serial device(p9, p10); // tx, rx LCD DigitalOut rst(p20); //P20 --> LCD RST (Reset) LocalFileSystem local("local"); -//Serial pc(USBTX, USBRX); -int csrx = 0; -int csry = 16; - FILE *fp; +int cx = 0; +int cy = 0; +int offsety = 0; +bool kstate = false; +unsigned char kbuf; + + FILE *fp; //File open buffer unsigned short start[92], end[92]; unsigned char font[64]; @@ -37,6 +42,35 @@ device.putc(0x4E); device.putc(0xAA); } +void bmp(int x0,int y0,int bmp_no) + { + unsigned char x0H; + unsigned char x0L; + unsigned char y0H; + unsigned char y0L; + unsigned char rH; + unsigned char rL; + unsigned char sum; + + x0H = x0 >> 8; + x0L = x0 & 0xFF; + y0H = y0 >> 8; + y0L = y0 & 0xff; + rH = bmp_no >> 8; + rL = bmp_no & 0xFF; + sum = x0H+x0L+y0H+y0L+rH+rL+0x09; + device.putc(0x55); + device.putc(0x07); + device.putc(0x09);//command + device.putc(x0H); + device.putc(x0L); + device.putc(y0H); + device.putc(y0L); + device.putc(rH); + device.putc(rL); + device.putc(sum); + device.putc(0xAA); + } void cls() { @@ -47,10 +81,16 @@ device.putc(0xD5); device.putc(0xAA); } +void scroll(void){ + +} + + + void lcdputs( char data[98],int x,int y) { - unsigned char s; + unsigned char s=0; unsigned char x0H; unsigned char x0L; unsigned char y0H; @@ -72,12 +112,10 @@ { device.putc(data[a]); s = s+data[a]; -// pc.printf("%x:",data[a]); } s = s+x0H+x0L+y0H+y0L+0x0B; device.putc(s);//sumcheck device.putc(0xAA); -// pc.printf("print %x %x %x %x %x %d ",x0H,x0L,y0H,y0L,s,datalen); } void color(int rgb) @@ -96,9 +134,27 @@ device.putc(c2); device.putc(sum); device.putc(0xAA); - //pc.printf("color %x %x %x ",c1,c2,sum); } +void newline(void){ + cx = 0; + cy += 16; + if(cy > 160){ + scroll(); + cy = 0; + color(0x001f); + cls(); + color(0xffff); + } +} + +void movecorsor(int a) + { + cx+=8*a; + if(cx>=128) newline(); + } + + void pixel(int x0,int y0) { unsigned char x0H; @@ -270,10 +326,97 @@ s = data+x0H+x0L+y0H+y0L+0x0B; device.putc(s);//sumcheck device.putc(0xAA); -// pc.printf("print %x %x %x %x %x %d ",x0H,x0L,y0H,y0L,s,datalen); } + +void kanji_init(){ + //move cursor + fp = fopen(kanji_file , "r"); + + + if(!fp) { + printf("File could not be opened!\n"); + exit(1); + } + + fgets(Identifier, 6+1, fp); // FONTX2 + fgets(FontName, 8+1, fp); + fread(&XSize, 1, 1, fp); + fread(&YSize, 1, 1, fp); + fread(&CodeType, 1, 1, fp); + fread(&Tnum, 1, 1, fp); + + // Table read + for(int a=0;a< Tnum ;a++){ + fread(&start[a],1,2,fp); + fread(&end[a] ,1,2,fp); + } +} + +//Kanji puts cr = kanji cord +void k_puts(int cr){ + //kanji address + int c; + int adrs; + c=0; + adrs=0; + while(cr>start[c]){ + if(cr > end[c]){ + adrs += end[c]-start[c]+1; + } + else{ + adrs += cr - start[c]; + } + c++; + } + c--; + //printf("C=%d,adrs=%d cr=%X ",c,adrs,cr); + // Kanji image Read + fseek( fp, Tnum*4+18+32*adrs, SEEK_SET ); + fread(&font,1,32,fp); + // kanji put + c=0; + for (int y=0;y<16;y++){ + for (int x=0;x<8;x++){ + if((font[c] & 0x80)==0x80){ + pixel(cx+x,cy+y); + } + font[c] = font[c] << 1; + if((font[c+1] & 0x80)==0x80){ + pixel(cx+x+8,cy+y); + } + font[c+1] = font[c+1] << 1; + } + c+=2; + } + //move cursor + cx+=16; + if(cx>=128){ //LF control + cx=0; + cy+=16; + } +} + +void kanji_end(){ + fclose(fp); +} + +void drawc(unsigned char c){ + if(kstate){ // 2nd byte of shift-jis + kstate = false; + + k_puts(kbuf << 8 | c); + } else if((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)){ // 1st byte of shift-jis + kstate = true; + kbuf = c; + } else { // Ascii Out + lcdput(c,cx,cy); + movecorsor(1); // 1byte Move + } +} + + void s_Lcdinit() { // device.baud(9600); @@ -291,72 +434,13 @@ device.putc(0x2C); device.putc(0xB6); device.putc(0xAA); + bmp(0,0,1); + lcdputs(" GingaX ",20,140); + wait(3); + bmp(0,0,0); + wait(3); cls(); - - } - -void kanji_init(){ - printf("Open File...\n"); // Drive should be marked as removed - //move cursor - fp = fopen("/local/SHMZN16X.FNT", "r"); - //FILE *fp = fopen("/local/k12x10.fnt", "r"); - - if(!fp) { - printf("File could not be opened!\n"); - exit(1); + color(0xffff); + kanji_init(); } - fgets(Identifier, 6+1, fp); // FONTX2 - fgets(FontName, 8+1, fp); - fread(&XSize, 1, 1, fp); - fread(&YSize, 1, 1, fp); - fread(&CodeType, 1, 1, fp); - fread(&Tnum, 1, 1, fp); - - Size = FONT_XBYTE*YSize; - printf("\nfget[%d]\n",fgetc( fp )); - // Table read - for(int a=0;a<=Size*4;a++){ - fread(&start[a],1,2,fp); - fread(&end[a] ,1,2,fp); - } -} - -//Kanji puts cr = kanji address -void k_puts(int cr){ - int c; - /* fp = fopen("/local/SHMZN16X.FNT", "r"); - if(!fp) { - pc.printf("File could not be opened!\n"); - exit(1); - } -*/ - // Kanji image Read - fseek( fp, Tnum*4+18+32*cr, SEEK_SET ); - fread(&font,1,32,fp); - // kanji put - c=0; - for (int y=0;y<16;y++){ - for (int x=0;x<8;x++){ - if((font[c] & 0x80)==0x80){ - pixel(csrx+x,csry+y); - } - font[c] = font[c] << 1; - if((font[c+1] & 0x80)==0x80){ - pixel(csrx+x+8,csry+y); - } - font[c+1] = font[c+1] << 1; - } - c+=2; - } - //move cursor - csrx+=16; - if(csrx>128){ //LF control - csrx=0; - csry+=16; - } -} - -void kanji_end(){ - fclose(fp); -}