AD-128160-UART制御用のライブラリ http://www.aitendo.co.jp/product/3119 gingaxさんのプログラムを参考に作らせてもらっています。 http://mbed.org/users/akira/libraries/AD128160/m159hi

Dependents:   AD128160_HelloWorld

AD128160.cpp

Committer:
nucho
Date:
2011-12-13
Revision:
3:d15cda2a5e91
Parent:
2:6f2db745808e

File content as of revision 3:d15cda2a5e91:

#include "AD128160.h"

AD128160::AD128160(PinName tx,PinName reset):_device(tx,NC),_rst(reset) {
    init();
}

void AD128160::init() {
    reset();
    brightness(300);
    cls();
    locate(0,0);
    color(0xffff);

    _font_x=8;
    _font_y=16;
    _max_columns = LCD_WIDTH/_font_x;
    _max_rows = LCD_HEIGHT/_font_y;
}

int AD128160::_putc(int c) {
    if (c == '\n') {
        newline();
    } else {
        int x = _column * _font_x;  // FIXME: Char sizes
        int y = _row * _font_y;
        unsigned char data[5];

        data[0]= x >> 8;//x upper 8bit
        data[1]= x & 0xFF;//x low 8bit
        data[2]= y >> 8; //y upper 8bit
        data[3]=y & 0xFF; //y low 8bit
        data[4]=c;
        cwrite(0x0B,data,5);

        _column++;
        if (_column >= _max_columns) {
            _row++;
            _column = 0;
        }
        if (_row >= _max_rows) {
            _row = 0;
        }
    }
    return c;
}
void AD128160::textSetting(int size,int rgb) {
    unsigned char data[4];

    data[0]= size >> 8;//x upper 8bit
    data[1]= size & 0xFF;//x low 8bit
    data[2]= rgb >> 8; //y upper 8bit
    data[3]= rgb & 0xFF; //y low 8bit

    cwrite(0x81,data,4);

    switch (size) {
        case 0:
            _font_x=6;
            _font_y=10;
            break;
        case 1:
            _font_x=7;
            _font_y=13;
            break;
        case 3:
            _font_x=10;
            _font_y=20;
            break;
        case 4:
            _font_x=16;
            _font_y=32;
            break;
        default:
            _font_x=8;
            _font_y=16;
            break;
    }
    _max_columns = LCD_WIDTH/_font_x;
    _max_rows = LCD_HEIGHT/_font_y;
    
    locate(0,0);
}


void AD128160::cwrite(int command,unsigned char* data,int length) {
    unsigned char sum=0;
    _device.putc(0x55);//start code
    _device.putc(length+1);
    _device.putc(command);
    for (int i=0; i<length; i++) {
        _device.putc(data[i]);
        sum = sum+data[i];
    }
    sum += command;
    _device.putc(sum);//check sum
    _device.putc(0xAA);//end core
}

void AD128160::brightness(int value) {
    unsigned char data[2];
    data[0] = (value & 0xff00)>>8;
    data[1] = value & 0x00ff;

    cwrite(0x89,data,2);
}

void AD128160::reset() {
    _rst = 0;            //Reset
    wait(0.1);
    _rst = 1;
    wait(0.1);
}


void AD128160::speed(int baud) {
    unsigned char data[4];

    data[0]=(baud&0xff000000)>>24;
    data[1]=(baud&0x00ff0000)>>16;
    data[2]=(baud&0x0000ff00)>>8;
    data[3]=baud&0x000000ff;

    cwrite(0x8B,data,4);

    wait(0.1);
    _device.baud(baud);

}

int AD128160::width() {
    return LCD_WIDTH;
}

int AD128160::height() {
    return LCD_HEIGHT;
}

int AD128160::columns() {
    return _max_columns;
}

int AD128160::rows() {
    return _max_rows;
}

void AD128160::bmp(int x0,int y0,int bmp_no) {
    unsigned char data[6];

    data[0] = x0 >> 8;
    data[1] = x0 & 0xFF;
    data[2] = y0 >> 8;
    data[3] = y0 & 0xff;
    data[4] = bmp_no >> 8;
    data[5] = bmp_no & 0xFF;

    cwrite(0x09,data,6);
}

void AD128160::cls() {
    unsigned char data[1];
    data[0]=0x55;
    cwrite(0x80,data,1);

    locate(0,0);
}

void AD128160::locate(int column, int row) {
    _column = column;
    _row = row;
}

void AD128160::puts(char* s) {
    int data_len=strlen(s)+4;
    unsigned char data[data_len];
    int x = _column * _font_x;  // FIXME: Char sizes
    int y = _row * _font_y;

    data[0] = x >> 8;
    data[1] = x & 0xFF;
    data[2] = y >> 8;
    data[3] = y & 0xFF;

    strcpy((char*)(data+4),s);
    cwrite(0x0B,data,data_len);
}

void AD128160::textBackground(bool mode,int rgb) {
    unsigned char data[3];

    if (mode) data[0]=1;
    else     data[0]=0;
    data[1]=(rgb >> 8) & 0xff;
    data[2]=(rgb & 0xff);
    cwrite(0x85,data,3);
}

void AD128160::color(int rgb) {
    unsigned char data[2];

    data[0]=(rgb >> 8) & 0xff;
    data[1]=(rgb & 0xff);
    cwrite(0x84,data,2);
}

void AD128160::newline(void) {
    _column = 0;
    _row++;

    if (_row >= _max_rows) {
        _row = 0;
    }
}

void AD128160::pixel(int x0,int y0) {
    unsigned char data[4];

    data[0] = x0 >> 8;
    data[1] = x0 & 0xFF;
    data[2] = y0 >> 8;
    data[3] = y0 & 0xff;

    cwrite(0x01,data,4);
}

void AD128160::box(int x0,int y0,int x1,int y1,int paint) {
    unsigned char data[8];

    data[0] = x0 >> 8;
    data[1] = x0 & 0xFF;
    data[2] = y0 >> 8;
    data[3] = y0 & 0xff;
    data[4] = x1 >> 8;
    data[5] = x1 & 0xFF;
    data[6] = y1 >> 8;
    data[7] = y1 & 0xff;

    if (paint)   cwrite(0x04,data,8);
    else        cwrite(0x03,data,8);
}

void AD128160::circle(int x0,int y0,int r,int paint) {
    unsigned char data[6];

    data[0] = x0 >> 8;
    data[1] = x0 & 0xFF;
    data[2] = y0 >> 8;
    data[3] = y0 & 0xff;
    data[4] = r >> 8;
    data[5] = r & 0xFF;

    if (paint)   cwrite(0x06,data,6);
    else        cwrite(0x05,data,6);
}

void AD128160::line(int x0,int y0,int x1,int y1) {
    unsigned char data[8];

    data[0] = x0 >> 8;
    data[1] = x0 & 0xFF;
    data[2] = y0 >> 8;
    data[3] = y0 & 0xff;
    data[4] = x1 >> 8;
    data[5] = x1 & 0xFF;
    data[6] = y1 >> 8;
    data[7] = y1 & 0xff;

    cwrite(0x02,data,8);
}