//LCD_Init_Class.h header file#ifndef LCD_INIT_CLASS_H#define LCD_INIT_CLASS_H#include "Arduino.h"#include <LCD_ROM_Class.h>#define COL_SPAN 14#define ROW_SPAN 6#define LCD_CMD LOW //information to LCD is a command#define LCD_DAT HIGH //treat information to LCD as dataclass LCD_Init_Class : public LCD_ROM_Class { public : LCD_Init_Class( ); // LCD_Init_Class(int pin_vcc=2, int pin_gnd=3, int pin_sce=4, int pin_res=5, int pin_dc=6, int pin_sd=7, int pin_ck=8); LCD_Init_Class(int pin_vcc, int pin_gnd, int pin_sce, int pin_res, int pin_dc, int pin_sd, int pin_ck); void begin(); int char2lcd(byte val); void setX(byte x); void setY(byte y); void setXY(byte x, byte y); void clear( ); private : int _vcc,_gnd,_sce,_res,_dc,_sd,_ck; void _LcdWrite(byte dc, byte data); }; #endif
----------------------------------------------//LCD_Init_Class.cpp implementation code#include "LCD_Init_Class.h"LCD_Init_Class::LCD_Init_Class(int pin_vcc, int pin_gnd, int pin_sce, int pin_res, int pin_dc, int pin_sd, int pin_ck ){ _vcc=pin_vcc; _gnd=pin_gnd; _sce=pin_sce; _res=pin_res; _dc=pin_dc; _sd=pin_sd; _ck= pin_ck; }; LCD_Init_Class::LCD_Init_Class( ) { _vcc= 2; _gnd=3; _sce=4; _res=5; _dc=6; _sd=7; _ck= 8; };void LCD_Init_Class::begin( ){ pinMode(_vcc, OUTPUT); //VCC pinMode(_gnd, OUTPUT); //GND pinMode(_sce, OUTPUT); pinMode(_res, OUTPUT); pinMode(_dc, OUTPUT); pinMode(_sd, OUTPUT); pinMode(_ck, OUTPUT); digitalWrite(_vcc,HIGH); //Vcc digitalWrite(_gnd,LOW); //Gnd digitalWrite(_res, LOW); delay(100); //LCD reset pin low for at least 100 mSec digitalWrite(_res, HIGH); //then high to reset LCD // while(1) { // shiftOut(_sd, _ck, MSBFIRST, 'U'); // delay(100); // } _LcdWrite( LCD_CMD, 0x21 ); // LCD Extended Commands. _LcdWrite( LCD_CMD, 0xB0 ); // Set LCD Vop (Contrast). //A8-B1 TRY ADJUSTING THIS IF IT'S NOT WORKING 80-FF are valid _LcdWrite( LCD_CMD, 0x04 ); // Set Temp coefficent. //0x04 _LcdWrite( LCD_CMD, 0x14 ); // LCD bias mode 1:40. //0x14 _LcdWrite(LCD_CMD, 0x20); _LcdWrite(LCD_CMD, 0x0C); //Black on white display // LcdWrite(LCD_CMD, 0x0D); //White on black display clear( ); // while(1) _LcdWrite(LCD_DAT,0xAA);}void LCD_Init_Class::_LcdWrite(byte dc, byte data){ digitalWrite(_dc, dc); //digitalWrite(_sce, LOW); shiftOut(_sd, _ck, MSBFIRST, data); //digitalWrite(_sce, HIGH);}byte _pattern[6];int LCD_Init_Class::char2lcd(byte ch){ char_pat(ch,_pattern); for (int pp =0; pp<6; pp++) _LcdWrite(LCD_DAT,_pattern[pp]); return 1; }
void LCD_Init_Class::setX(byte x){ _LcdWrite(LCD_CMD,0x80 | (x*6));}void LCD_Init_Class::setY(byte y){ _LcdWrite(LCD_CMD,0x40 | y);}void LCD_Init_Class::setXY(byte x, byte y){ setX(x); setY(y);}
void LCD_Init_Class::clear( ){ for (int pp= 0; pp < (COL_SPAN * ROW_SPAN); pp++) char2lcd(' '); setXY(0,0); }---------------------------------------------------//LCD_Init_Class.ino - the client or test code#include "LCD_INIT_Class.h"// LCD_Init_Class LCD(2,3,4,5,6,7,8);LCD_Init_Class LCD;
//byte pattern[6];
void setup() { LCD.begin( );}void loop() {// LCD.char_pat('A',pattern); for (int pp = ' '; pp<=0x7f; pp++) LCD.char2lcd(pp);delay(2000);LCD.setXY(0,0);}