Diff: s_Lcd.cpp
- Revision:
- 5:39b01a6f0f75
- Parent:
- 4:1f72df1a88e0
- Child:
- 6:96576c9c7828
--- a/s_Lcd.cpp Sun Oct 23 02:06:34 2011 +0000
+++ b/s_Lcd.cpp Wed Nov 23 12:12:11 2011 +0000
@@ -1,20 +1,15 @@
#include "mbed.h"
-#define kanji_file "/local/SHMZN16X.FNT"
-//#defin kanji_file "/local/k12x10.fnt"
-
-Serial device(p9, p10); // tx, rx LCD
+Serial device(p9, p10); // tx, rx
+//Serial pc(USBTX, USBRX); // tx, rx
DigitalOut rst(p20); //P20 --> LCD RST (Reset)
LocalFileSystem local("local");
+//Serial pc(USBTX, USBRX);
+int csrx = 0;
+int csry = 16;
-int cx = 0;
-int cy = 0;
-int offsety = 0;
-bool kstate = false;
-unsigned char kbuf;
-
- FILE *fp; //File open buffer
+ FILE *fp;
unsigned short start[92], end[92];
unsigned char font[64];
@@ -42,35 +37,6 @@
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()
{
@@ -81,16 +47,10 @@
device.putc(0xD5);
device.putc(0xAA);
}
-void scroll(void){
-
-}
-
-
-
void lcdputs( char data[98],int x,int y)
{
- unsigned char s=0;
+ unsigned char s;
unsigned char x0H;
unsigned char x0L;
unsigned char y0H;
@@ -112,10 +72,12 @@
{
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)
@@ -134,27 +96,9 @@
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;
@@ -326,97 +270,10 @@
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);
@@ -434,13 +291,72 @@
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();
- color(0xffff);
- kanji_init();
+
+ }
+
+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);
}
+ 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);
+}