Se her

Dependencies:   SDFileSystem mbed

Fork of SDFileSystem_HelloWorld by mbed official

DOGM_STREAM_SPI.cpp

Committer:
Matias123
Date:
2017-03-28
Revision:
2:6ae05f48fe57
Parent:
1:957e5e772f20

File content as of revision 2:6ae05f48fe57:

#include "DOGM_STREAM_SPI.h"

DogM::DogM(PinName mosi, PinName miso, PinName sclk, PinName _rs_, PinName _csb_, PinName _res_) :
        dogm(mosi, miso, sclk), rs(_rs_), csb(_csb_), res(_res_) {

    // Setup the spi for 8 bit data, high steady state clock,
    // second edge capture, with a 1MHz clock rate
    dogm.format(8,0);
    dogm.frequency(100000); // Also working with 1MHz

    // RESETTING DOGM MODULE
    res = 0;
    wait_ms(10);
    res = 1;
    wait_ms(10);
    res = 0;
    wait_ms(40);
    res = 1;
    wait_ms(10);

    //command(0x39); // FUNCTION SET
    //wait_ms(40);

    // FROM DOGM DATABLAD - OPPSETT FOR 3 LINJER 3.3 V

    command(0x39); // FUNCTION SET
    wait_us(100);

    command(0x15); // BIAS SET
    wait_us(50);

    command(0x55); // POWER CONTROL
    wait_ms(200);

    command(0x6E); // FOLLOWER CONTROL
    wait_ms(200);

    command(0x72); // CONTRAST SET
    wait_ms(50);

    command(0x38); // FUNCTION SET
    wait_us(50);

    command(0x0F); // DISPLAY ON/OFF
    wait_us(50);

    command(0x01); // CLEAR DISPLAY
    wait_us(50);

    command(0x06); // ENTRY MODE SET
    wait_us(50);

    _rows = 3;
    _columns = 16;
}


void DogM::data(uint8_t c) {
    csb = 0;
    wait_us(1);
    rs = 1;
    wait_us(1);
    dogm.write(c);
    wait_us(1);
    csb = 1;
    wait_us(40); // Default delay
}

void DogM::command(uint8_t c) {
    csb = 0;
    wait_us(1);
    rs = 0;
    wait_us(1);
    dogm.write(c);
    wait_us(1);
    csb = 1;
    wait_us(40); // Default delay
}

void DogM::blank() {
    command(0x01);
    wait_us(2000);
}

void DogM::home() {
    command (0x02);
    wait_us(2000);
}

void DogM::upper() {
    command (0x80);
}

void DogM::middle() {
    command (0x90);
}

void DogM::lower() {
    command (0xA0);
}

void DogM::chr(uint8_t c) {
    data(c);
}

void DogM::out(char *s) {
    while (*s) {
        data(*s++);
    }
}

void DogM::line(uint8_t column, uint8_t row, char *s) {
    command(address(column, row));
    for (int i = column; i < _columns; i++) {
        if (*s != '\0') {
            data(*s);
            s++;
        } else {
            data(' ');
        }
    }
}

// Upper line = 0, middle line = 1, lower line = 2
// First position on line is 0 - last is 15
void DogM::pos(uint8_t column, uint8_t row) {
    uint8_t adress;
    switch (row) {
        case 1:
            adress = 0x10;
            break;
        case 2:
            adress = 0x20;
            break;
        default:
            adress = 0x00;
            break;
    }
    adress += (column + 0x80);
    _row = row;
    _column = column;
    command (adress);
}

void DogM::c_off() {
    command (0x0C);
}
void DogM::c_on () {
    command (0x0E);
}

void DogM::c_blink() {
    command (0x0F);
}

void DogM::c_left() {
    command (0x10);
}

void DogM::c_right() {
    command (0x14);
}

// COPIED FROM TxtLCD class

void DogM::character(int column, int row, int c) {
    int a = address(column, row);
    command(a);
    data(c);
}

void DogM::cls() {
    command(0x01);    // cls, and set cursor to 0
    wait(0.00164f);   // This command takes 1.64 ms
    locate(0, 0);
}

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

int DogM::_putc(int value) {
    if (value == '\n') {
        _column = 0;
        _row++;
        if (_row >= _rows) {
            _row = 0;
        }
    } else {
        character(_column, _row, value);
        _column++;
        if (_column >= _columns) {
            _column = 0;
            _row++;
            if (_row >= _rows) {
                _row = 0;
            }
        }
    }
    return value;
}

int DogM::_getc() {
    return -1;
}

int DogM::address(int column, int row) {
    return 0x80 + (row * 0x10) + column;
}