this is kazushi's branch of AD128160
Fork of AD128160 by
s_Lcd.cpp
- Committer:
- akira
- Date:
- 2011-11-24
- Revision:
- 6:96576c9c7828
- Parent:
- 5:39b01a6f0f75
- Child:
- 7:227b64bf8fb1
File content as of revision 6:96576c9c7828:
#include "mbed.h" #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"); 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]; char Identifier[6+1]; char FontName[8+1]; unsigned char XSize; unsigned char YSize; unsigned char Size; unsigned char CodeType; unsigned char Tnum; #define FONT_XBYTE ((XSize + 7) >> 3) #define FONT_YBYTE ((YSize + 7) >> 3) void lcdspeed() { device.putc(0x55);// UART Speed 115200bps device.putc(0x05); device.putc(0x8B); device.putc(0x00); device.putc(0x01); device.putc(0xC2); device.putc(0x00); 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() { device.putc(0x55);// Clear device.putc(0x02); device.putc(0x80); device.putc(0x55); device.putc(0xD5); device.putc(0xAA); } void scroll(void){ } void lcdputs( char data[98],int x,int y) { unsigned char s=0; unsigned char x0H; unsigned char x0L; unsigned char y0H; unsigned char y0L; unsigned char datalen; x0H = x >> 8; x0L = x & 0xFF; y0H = y >> 8; y0L = y & 0xFF; datalen = strlen(data)+5; device.putc(0x55); device.putc(datalen); device.putc(0x0B); // command ASCII Print device.putc(x0H); //x upper 8bit device.putc(x0L); //x low 8bit device.putc(y0H); //y upper 8bit device.putc(y0L); //y low 8bit for(int a=0;a<strlen(data);a++) { device.putc(data[a]); s = s+data[a]; } s = s+x0H+x0L+y0H+y0L+0x0B; device.putc(s);//sumcheck device.putc(0xAA); } void color(int rgb) { int c1; int c2; int sum; c1=(rgb >> 8) & 0xff; c2=(rgb & 0xff); sum=c1+c2+0x84; device.putc(0x55); device.putc(0x03); device.putc(0x84); device.putc(c1); device.putc(c2); device.putc(sum); device.putc(0xAA); } 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; unsigned char x0L; unsigned char y0H; unsigned char y0L; unsigned char sum; x0H = x0 >> 8; x0L = x0 & 0xFF; y0H = y0 >> 8; y0L = y0 & 0xff; sum = x0H+x0L+y0H+y0L+0x01; device.putc(0x55); device.putc(0x05); device.putc(0x01);//command device.putc(x0H); device.putc(x0L); device.putc(y0H); device.putc(y0L); device.putc(sum); device.putc(0xAA); } void box(int x0,int y0,int x1,int y1,int paint) { unsigned char x0H; unsigned char x0L; unsigned char x1H; unsigned char x1L; unsigned char y0H; unsigned char y0L; unsigned char y1H; unsigned char y1L; unsigned char sum; unsigned char cmd; switch (paint) { case 1: cmd = 0x04; break; default: cmd =0x03; break; } x0H = x0 >> 8; x0L = x0 & 0xFF; y0H = y0 >> 8; y0L = y0 & 0xff; x1H = x1 >> 8; x1L = x1 & 0xFF; y1H = y1 >> 8; y1L = y1 & 0xff; sum = x0H+x0L+y0H+y0L+x1H+x1L+y1H+y1L+cmd; device.putc(0x55);//Box device.putc(0x09); device.putc(cmd);//command device.putc(x0H); device.putc(x0L); device.putc(y0H); device.putc(y0L); device.putc(x1H); device.putc(x1L); device.putc(y1H); device.putc(y1L); device.putc(sum); device.putc(0xAA); } void circle(int x0,int y0,int r,int paint) { unsigned char x0H; unsigned char x0L; unsigned char y0H; unsigned char y0L; unsigned char rH; unsigned char rL; unsigned char sum; unsigned char cmd; switch (paint) { case 0: cmd = 0x05; break; case 1: cmd = 0x06; break; default: cmd =0x05; break; } x0H = x0 >> 8; x0L = x0 & 0xFF; y0H = y0 >> 8; y0L = y0 & 0xff; rH = r >> 8; rL = r & 0xFF; sum = x0H+x0L+y0H+y0L+rH+rL+cmd; device.putc(0x55); device.putc(0x07); device.putc(cmd);//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 line(int x0,int y0,int x1,int y1) { unsigned char x0H; unsigned char x0L; unsigned char x1H; unsigned char x1L; unsigned char y0H; unsigned char y0L; unsigned char y1H; unsigned char y1L; unsigned char sum; x0H = x0 >> 8; x0L = x0 & 0xFF; y0H = y0 >> 8; y0L = y0 & 0xff; x1H = x1 >> 8; x1L = x1 & 0xFF; y1H = y1 >> 8; y1L = y1 & 0xff; sum = x0H+x0L+y0H+y0L+x1H+x1L+y1H+y1L+02; device.putc(0x55); device.putc(0x09); device.putc(0x02);//command device.putc(x0H); device.putc(x0L); device.putc(y0H); device.putc(y0L); device.putc(x1H); device.putc(x1L); device.putc(y1H); device.putc(y1L); device.putc(sum); device.putc(0xAA); } void lcdput(unsigned char data,int x,int y) { unsigned char s; unsigned char x0H; unsigned char x0L; unsigned char y0H; unsigned char y0L; unsigned char datalen; x0H = x >> 8; x0L = x & 0xFF; y0H = y >> 8; y0L = y & 0xFF; datalen = 6; device.putc(0x55); device.putc(datalen); device.putc(0x0B); // command ASCII Print device.putc(x0H); //x upper 8bit device.putc(x0L); //x low 8bit device.putc(y0H); //y upper 8bit device.putc(y0L); //y low 8bit device.putc(data); s = data+x0H+x0L+y0H+y0L+0x0B; device.putc(s);//sumcheck device.putc(0xAA); } 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); rst = 0; //Reset wait(0.1); rst = 1; wait(0.1); lcdspeed();//speed 115200 wait(0.1); device.baud(115200); device.putc(0x55);//Back light On device.putc(0x03); device.putc(0x89); device.putc(0x01); 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(); }