Driver Library for our displays

Dependents:   dm_bubbles dm_calc dm_paint dm_sdcard_with_adapter ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers DmTftHX8353C.cpp Source File

DmTftHX8353C.cpp

00001 /**********************************************************************************************
00002  Copyright (c) 2014 DisplayModule. All rights reserved.
00003 
00004  Redistribution and use of this source code, part of this source code or any compiled binary
00005  based on this source code is permitted as long as the above copyright notice and following
00006  disclaimer is retained.
00007 
00008  DISCLAIMER:
00009  THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
00010  NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
00011  ********************************************************************************************/
00012 
00013  //Tested on NUCLEO-F401RE, LPCXpresso11U68 platform.
00014 
00015 #include "DmTftHX8353C.h"
00016 #if defined (DM_TOOLCHAIN_ARDUINO)
00017 DmTftHX8353C::DmTftHX8353C(uint8_t mosi, uint8_t clk, uint8_t cs, uint8_t dc, uint8_t rst) : DmTftBase(128,160) 
00018 #elif defined (DM_TOOLCHAIN_MBED)
00019 DmTftHX8353C::DmTftHX8353C(PinName mosi, PinName clk, PinName cs, PinName dc, PinName rst) : DmTftBase(128,160) 
00020 #endif
00021 {
00022   _mosi = mosi;
00023   _clk = clk;
00024   _cs = cs;
00025   _dc = dc;
00026   _rst = rst;
00027 }
00028 
00029 DmTftHX8353C::~DmTftHX8353C() {
00030 #if defined (DM_TOOLCHAIN_MBED)
00031   delete _pinMOSI;
00032   delete _pinCLK;
00033   delete _pinCS;
00034   delete _pinDC;
00035   delete _pinRST;
00036 
00037   _pinMOSI = NULL;
00038   _pinCLK = NULL;
00039   _pinCS = NULL;
00040   _pinDC = NULL;
00041   _pinRST = NULL;
00042 #endif
00043 }
00044 
00045 void DmTftHX8353C::writeBus(uint8_t data) {
00046   if (data & 0x80) {
00047     sbi(_pinMOSI, _bitmaskMOSI);
00048   }
00049   else {
00050     cbi(_pinMOSI, _bitmaskMOSI);
00051   }
00052   pulse_low(_pinCLK, _bitmaskCLK);
00053 
00054   if (data & 0x40) {
00055     sbi(_pinMOSI, _bitmaskMOSI);
00056   }
00057   else {
00058     cbi(_pinMOSI, _bitmaskMOSI);
00059   }
00060   pulse_low(_pinCLK, _bitmaskCLK);
00061 
00062   if (data & 0x20) {
00063     sbi(_pinMOSI, _bitmaskMOSI);
00064   }
00065   else {
00066     cbi(_pinMOSI, _bitmaskMOSI);
00067   }
00068   pulse_low(_pinCLK, _bitmaskCLK);
00069 
00070   if (data & 0x10) {
00071     sbi(_pinMOSI, _bitmaskMOSI);
00072   }
00073   else {
00074     cbi(_pinMOSI, _bitmaskMOSI);
00075   }
00076   pulse_low(_pinCLK, _bitmaskCLK);
00077 
00078   if (data & 0x08) {
00079     sbi(_pinMOSI, _bitmaskMOSI);
00080   }
00081   else {
00082     cbi(_pinMOSI, _bitmaskMOSI);
00083   }
00084   pulse_low(_pinCLK, _bitmaskCLK);
00085 
00086   if (data & 0x04) {
00087     sbi(_pinMOSI, _bitmaskMOSI);
00088   }
00089   else {
00090     cbi(_pinMOSI, _bitmaskMOSI);
00091   }
00092   pulse_low(_pinCLK, _bitmaskCLK);
00093 
00094   if (data & 0x02) {
00095     sbi(_pinMOSI, _bitmaskMOSI);
00096   }
00097   else {
00098     cbi(_pinMOSI, _bitmaskMOSI);
00099   }
00100   pulse_low(_pinCLK, _bitmaskCLK);
00101 
00102   if (data & 0x01) {
00103     sbi(_pinMOSI, _bitmaskMOSI);
00104   }
00105   else {
00106     cbi(_pinMOSI, _bitmaskMOSI);
00107   }
00108   pulse_low(_pinCLK, _bitmaskCLK);
00109 }
00110 
00111 void DmTftHX8353C::sendCommand(uint8_t index) {
00112   cbi(_pinDC, _bitmaskDC);
00113   writeBus(index);
00114 }
00115 
00116 void DmTftHX8353C::send8BitData(uint8_t data) {
00117   sbi(_pinDC, _bitmaskDC);
00118   writeBus(data);
00119 }
00120 
00121 void DmTftHX8353C::sendData(uint16_t data) {
00122   sbi(_pinDC, _bitmaskDC);
00123   writeBus(data>>8);
00124   writeBus(data);
00125 }
00126 
00127 void DmTftHX8353C::setAddress(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
00128   sendCommand(0x2A); // SetColumn
00129   sendData(x0);
00130   sendData(x1);
00131   sendCommand(0x2B); // SetPage
00132   sendData(y0);
00133   sendData(y1);
00134 
00135   sendCommand(0x2c);
00136 }
00137 
00138 
00139 void DmTftHX8353C::init (void) {
00140   setTextColor(BLACK, WHITE);
00141 #if defined (DM_TOOLCHAIN_ARDUINO)
00142   _pinMOSI= portOutputRegister(digitalPinToPort(_mosi));
00143   _bitmaskMOSI= digitalPinToBitMask(_mosi);
00144   _pinCLK= portOutputRegister(digitalPinToPort(_clk));
00145   _bitmaskCLK= digitalPinToBitMask(_clk);
00146   _pinCS  = portOutputRegister(digitalPinToPort(_cs));
00147   _bitmaskCS  = digitalPinToBitMask(_cs);
00148   _pinDC  = portOutputRegister(digitalPinToPort(_dc));
00149   _bitmaskDC  = digitalPinToBitMask(_dc);
00150   _pinRST = portOutputRegister(digitalPinToPort(_rst));
00151   _bitmaskRST = digitalPinToBitMask(_rst);
00152 
00153   pinMode(_mosi,OUTPUT);
00154   pinMode(_clk,OUTPUT);
00155   pinMode(_cs,OUTPUT);
00156   pinMode(_dc,OUTPUT);
00157   pinMode(_rst,OUTPUT);
00158 #elif defined (DM_TOOLCHAIN_MBED)
00159   _pinMOSI = new DigitalOut(_mosi);
00160   _pinCLK = new DigitalOut(_clk);
00161   _pinCS = new DigitalOut(_cs);
00162   _pinDC = new DigitalOut(_dc);
00163   _pinRST = new DigitalOut(_rst);
00164 #endif
00165 
00166   sbi(_pinRST, _bitmaskRST);
00167   delay(5);
00168   cbi(_pinRST, _bitmaskRST);
00169   delay(15);
00170   sbi(_pinRST, _bitmaskRST);
00171   delay(15);
00172   cbi(_pinCS, _bitmaskCS);
00173 
00174   sendCommand(0xB9);             // HX8353C INIT
00175   send8BitData(0xFF);
00176   send8BitData(0x83);
00177   send8BitData(0x53);
00178 
00179   sendCommand(0xB0);
00180   send8BitData(0x3C);
00181   send8BitData(0X01);
00182 
00183   sendCommand(0xB6);
00184   send8BitData(0x94);
00185   send8BitData(0x6C);
00186   send8BitData(0x50);
00187 
00188   sendCommand(0xB1);
00189   send8BitData(0x00);
00190   send8BitData(0x01);
00191   send8BitData(0x1B);
00192   send8BitData(0x03);
00193   send8BitData(0X01);
00194   send8BitData(0X08);
00195   send8BitData(0x77);
00196   send8BitData(0x89);
00197 
00198   sendCommand(0xE0);
00199   send8BitData(0x50);
00200   send8BitData(0x77);
00201   send8BitData(0X40);
00202   send8BitData(0X08);
00203   send8BitData(0xBE);
00204   send8BitData(0x00);
00205   send8BitData(0x03);
00206   send8BitData(0x0F);
00207   send8BitData(0x00);
00208   send8BitData(0x01);
00209   send8BitData(0x73);
00210   send8BitData(0x00);
00211   send8BitData(0x72);
00212   send8BitData(0x03);
00213   send8BitData(0xB0);
00214   send8BitData(0x0F);
00215   send8BitData(0x08);
00216   send8BitData(0x00);
00217   send8BitData(0x0F);
00218   sendCommand(0x3A);
00219   send8BitData(0x05);
00220   sendCommand(0x36);
00221   send8BitData(0xC0);
00222   sendCommand(0x11);
00223   delay(150);
00224   sendCommand(0x29);
00225   delay(150);
00226   sendCommand(0x2D);
00227   uint8_t i=0;
00228 
00229   for(i=0;i<32;i++) {
00230     send8BitData(2*i);
00231   } //Red
00232 
00233   for(i=0;i<64;i++) {
00234     send8BitData(1*i);
00235   } //Green
00236 
00237   for(i=0;i<32;i++)
00238   {
00239     send8BitData(2*i);
00240   } //Blue
00241   sendCommand(0x2C);
00242 
00243   delay(150);
00244   clearScreen();
00245 }
00246 
00247 /*********************************************************************************************************
00248   END FILE
00249 *********************************************************************************************************/
00250 
00251