Modified version of the DmTftLibrary, optimized for the LPC4088 Experiment Base Board

Dependents:   lpc4088_ebb_dm_calc lpc4088_ebb_dm_bubbles

Fork of DmTftLibrary by Display Module

DmTftHX8353C.cpp

Committer:
embeddedartists
Date:
2014-09-11
Revision:
12:eb97ccfe7c3f
Parent:
0:d6ff5fa503e8

File content as of revision 12:eb97ccfe7c3f:

/**********************************************************************************************
 Copyright (c) 2014 DisplayModule. All rights reserved.

 Redistribution and use of this source code, part of this source code or any compiled binary
 based on this source code is permitted as long as the above copyright notice and following
 disclaimer is retained.

 DISCLAIMER:
 THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
 NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
 ********************************************************************************************/

#include "DmTftHX8353C.h"

DmTftHX8353C::DmTftHX8353C(uint8_t mosi, uint8_t clk, uint8_t cs, uint8_t dc, uint8_t rst) : DmTftBase(128,160) {
  _mosi = mosi;
  _clk = clk;
  _cs = cs;
  _dc = dc;
  _rst = rst;
}

DmTftHX8353C::~DmTftHX8353C() {
#if defined (DM_TOOLCHAIN_MBED)
  delete _pinMOSI;
  delete _pinCLK;
  delete _pinCS;
  delete _pinDC;
  delete _pinRST;

  _pinMOSI = NULL;
  _pinCLK = NULL;
  _pinCS = NULL;
  _pinDC = NULL;
  _pinRST = NULL;
#endif
}

void DmTftHX8353C::writeBus(uint8_t data) {
  if (data & 0x80) {
    sbi(_pinMOSI, _bitmaskMOSI);
  }
  else {
    cbi(_pinMOSI, _bitmaskMOSI);
  }
  pulse_low(_pinCLK, _bitmaskCLK);

  if (data & 0x40) {
    sbi(_pinMOSI, _bitmaskMOSI);
  }
  else {
    cbi(_pinMOSI, _bitmaskMOSI);
  }
  pulse_low(_pinCLK, _bitmaskCLK);

  if (data & 0x20) {
    sbi(_pinMOSI, _bitmaskMOSI);
  }
  else {
    cbi(_pinMOSI, _bitmaskMOSI);
  }
  pulse_low(_pinCLK, _bitmaskCLK);

  if (data & 0x10) {
    sbi(_pinMOSI, _bitmaskMOSI);
  }
  else {
    cbi(_pinMOSI, _bitmaskMOSI);
  }
  pulse_low(_pinCLK, _bitmaskCLK);

  if (data & 0x08) {
    sbi(_pinMOSI, _bitmaskMOSI);
  }
  else {
    cbi(_pinMOSI, _bitmaskMOSI);
  }
  pulse_low(_pinCLK, _bitmaskCLK);

  if (data & 0x04) {
    sbi(_pinMOSI, _bitmaskMOSI);
  }
  else {
    cbi(_pinMOSI, _bitmaskMOSI);
  }
  pulse_low(_pinCLK, _bitmaskCLK);

  if (data & 0x02) {
    sbi(_pinMOSI, _bitmaskMOSI);
  }
  else {
    cbi(_pinMOSI, _bitmaskMOSI);
  }
  pulse_low(_pinCLK, _bitmaskCLK);

  if (data & 0x01) {
    sbi(_pinMOSI, _bitmaskMOSI);
  }
  else {
    cbi(_pinMOSI, _bitmaskMOSI);
  }
  pulse_low(_pinCLK, _bitmaskCLK);
}

void DmTftHX8353C::sendCommand(uint8_t index) {
  cbi(_pinDC, _bitmaskDC);
  writeBus(index);
}

void DmTftHX8353C::send8BitData(uint8_t data) {
  sbi(_pinDC, _bitmaskDC);
  writeBus(data);
}

void DmTftHX8353C::sendData(uint16_t data) {
  sbi(_pinDC, _bitmaskDC);
  writeBus(data>>8);
  writeBus(data);
}

void DmTftHX8353C::setAddress(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
  sendCommand(0x2A); // SetColumn
  sendData(x0);
  sendData(x1);
  sendCommand(0x2B); // SetPage
  sendData(y0);
  sendData(y1);

  sendCommand(0x2c);
}


void DmTftHX8353C::init (void) {
  setTextColor(BLACK, WHITE);
#if defined (DM_TOOLCHAIN_ARDUINO)
  _pinMOSI= portOutputRegister(digitalPinToPort(_mosi));
  _bitmaskMOSI= digitalPinToBitMask(_mosi);
  _pinCLK= portOutputRegister(digitalPinToPort(_clk));
  _bitmaskCLK= digitalPinToBitMask(_clk);
  _pinCS  = portOutputRegister(digitalPinToPort(_cs));
  _bitmaskCS  = digitalPinToBitMask(_cs);
  _pinDC  = portOutputRegister(digitalPinToPort(_dc));
  _bitmaskDC  = digitalPinToBitMask(_dc);
  _pinRST = portOutputRegister(digitalPinToPort(_rst));
  _bitmaskRST = digitalPinToBitMask(_rst);

  pinMode(_mosi,OUTPUT);
  pinMode(_clk,OUTPUT);
  pinMode(_cs,OUTPUT);
  pinMode(_dc,OUTPUT);
  pinMode(_rst,OUTPUT);
#elif defined (DM_TOOLCHAIN_MBED)
  _pinMOSI = new DigitalOut((PinName)_mosi);
  _pinCLK = new DigitalOut((PinName)_clk);
  _pinCS = new DigitalOut((PinName)_cs);
  _pinDC = new DigitalOut((PinName)_dc);
  _pinRST = new DigitalOut((PinName)_rst);
#endif

  sbi(_pinRST, _bitmaskRST);
  delay(5);
  cbi(_pinRST, _bitmaskRST);
  delay(15);
  sbi(_pinRST, _bitmaskRST);
  delay(15);
  cbi(_pinCS, _bitmaskCS);

  sendCommand(0xB9);             // HX8353C INIT
  send8BitData(0xFF);
  send8BitData(0x83);
  send8BitData(0x53);

  sendCommand(0xB0);
  send8BitData(0x3C);
  send8BitData(0X01);

  sendCommand(0xB6);
  send8BitData(0x94);
  send8BitData(0x6C);
  send8BitData(0x50);

  sendCommand(0xB1);
  send8BitData(0x00);
  send8BitData(0x01);
  send8BitData(0x1B);
  send8BitData(0x03);
  send8BitData(0X01);
  send8BitData(0X08);
  send8BitData(0x77);
  send8BitData(0x89);

  sendCommand(0xE0);
  send8BitData(0x50);
  send8BitData(0x77);
  send8BitData(0X40);
  send8BitData(0X08);
  send8BitData(0xBE);
  send8BitData(0x00);
  send8BitData(0x03);
  send8BitData(0x0F);
  send8BitData(0x00);
  send8BitData(0x01);
  send8BitData(0x73);
  send8BitData(0x00);
  send8BitData(0x72);
  send8BitData(0x03);
  send8BitData(0xB0);
  send8BitData(0x0F);
  send8BitData(0x08);
  send8BitData(0x00);
  send8BitData(0x0F);
  sendCommand(0x3A);
  send8BitData(0x05);
  sendCommand(0x36);
  send8BitData(0xC0);
  sendCommand(0x11);
  delay(150);
  sendCommand(0x29);
  delay(150);
  sendCommand(0x2D);
  uint8_t i=0;

  for(i=0;i<32;i++) {
    send8BitData(2*i);
  } //Red

  for(i=0;i<64;i++) {
    send8BitData(1*i);
  } //Green

  for(i=0;i<32;i++)
  {
    send8BitData(2*i);
  } //Blue
  sendCommand(0x2C);

  delay(150);
  clearScreen();
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/