this is kazushi's branch of AD128160

Fork of AD128160 by Gingax x

s_Lcd.cpp

Committer:
akira
Date:
2011-11-23
Revision:
5:39b01a6f0f75
Parent:
4:1f72df1a88e0
Child:
6:96576c9c7828

File content as of revision 5:39b01a6f0f75:

#include "mbed.h"

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;

    FILE *fp;

    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 cls()
    {
    device.putc(0x55);// Clear
    device.putc(0x02);
    device.putc(0x80);
    device.putc(0x55);
    device.putc(0xD5);
    device.putc(0xAA);
    }

void lcdputs( char data[98],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 = 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];
//            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)
    {
    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);
    //pc.printf("color %x %x %x ",c1,c2,sum);
    }

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);
//    pc.printf("print %x %x %x %x %x %d   ",x0H,x0L,y0H,y0L,s,datalen);
    }
    

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);
    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);
    }

    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);
}