Revision 6:96576c9c7828, committed 2011-11-24
- Comitter:
- akira
- Date:
- Thu Nov 24 14:01:45 2011 +0000
- Parent:
- 5:39b01a6f0f75
- Commit message:
Changed in this revision
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);
-}
diff -r 39b01a6f0f75 -r 96576c9c7828 s_Lcd.h
--- a/s_Lcd.h Wed Nov 23 12:12:11 2011 +0000
+++ b/s_Lcd.h Thu Nov 24 14:01:45 2011 +0000
@@ -2,6 +2,10 @@
#define a_Lcd_H_
+void bmp(int x0,int y0,int bmp_n);
+void newline(void);
+void movecorsor(int a);
+void drawc(unsigned char c);
void s_Lcdinit();
void color(int rgb);
void pixel(int x0,int y0);