Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of N5110 by
Diff: N5110.cpp
- Revision:
- 44:57f9d32fb521
- Parent:
- 43:c2598020fcac
--- a/N5110.cpp Tue Mar 21 11:46:14 2017 +0000
+++ b/N5110.cpp Wed Nov 01 20:48:05 2017 +0000
@@ -57,22 +57,14 @@
{
turnOn(); // power up
reset(); // reset LCD - must be done within 100 ms
-
- initSPI();
- // function set - extended
- sendCommand(0x20 | CMD_FS_ACTIVE_MODE | CMD_FS_HORIZONTAL_MODE | CMD_FS_EXTENDED_MODE);
- // Don't completely understand these parameters - they seem to work as they are
- // Consult the datasheet if you need to change them
- sendCommand(CMD_VOP_7V38); // operating voltage - these values are from Chris Yan's Library
- sendCommand(CMD_TC_TEMP_2); // temperature control
- sendCommand(CMD_BI_MUX_48); // changing this can sometimes improve the contrast on some displays
-
- // function set - basic
- sendCommand(0x20 | CMD_FS_ACTIVE_MODE | CMD_FS_HORIZONTAL_MODE | CMD_FS_BASIC_MODE);
+ initSPI();
+
+ setContrast(0.40); // this may need tuning (say 0.4 to 0.6)
+ setBias(3); // datasheet - 48:1 mux - don't mess with if you don't know what you're doing!
+ setTempCoefficient(0); // datasheet - may need increasing (range 0 to 3) at very low temperatures
normalMode(); // normal video mode by default
- sendCommand(CMD_DC_NORMAL_MODE); // black on white
-
- clearRAM(); // RAM is undefined at power-up so clear
+
+ clearRAM(); // RAM is undefined at power-up so clear to be sure
clear(); // clear buffer
setBrightness(0.5);
}
@@ -80,13 +72,15 @@
// sets normal video mode (black on white)
void N5110::normalMode()
{
- sendCommand(CMD_DC_NORMAL_MODE);
+ sendCommand(0b00100000); // basic instruction
+ sendCommand(0b00001100); // normal video mode- datasheet
}
// sets normal video mode (white on black)
void N5110::inverseMode()
{
- sendCommand(CMD_DC_INVERT_VIDEO);
+ sendCommand(0b00100000); // basic instruction
+ sendCommand(0b00001101); // inverse video mode - datasheet
}
// function to power up the LCD and backlight - only works when using GPIO to power
@@ -105,16 +99,15 @@
setBrightness(0.0); // turn backlight off
clearRAM(); // clear RAM to ensure specified current consumption
// send command to ensure we are in basic mode
- sendCommand(0x20 | CMD_FS_ACTIVE_MODE | CMD_FS_HORIZONTAL_MODE | CMD_FS_BASIC_MODE);
- // clear the display
- sendCommand(CMD_DC_CLEAR_DISPLAY);
- // enter the extended mode and power down
- sendCommand(0x20 | CMD_FS_POWER_DOWN_MODE | CMD_FS_HORIZONTAL_MODE | CMD_FS_EXTENDED_MODE);
- // small delay and then turn off the power pin
- wait_ms(10);
-
+
+ sendCommand(0b00100000); // basic mode
+ sendCommand(0b00001000); // clear display
+ sendCommand(0b00100001); // extended mode
+ sendCommand(0b00100100); // power down
+
// if we are powering the LCD using the GPIO then make it low to turn off
if (_pwr != NULL) {
+ wait_ms(10); // small delay and then turn off the power pin
_pwr->write(0); // turn off power
}
@@ -132,6 +125,58 @@
_led->write(brightness);
}
+void N5110::setContrast(float contrast) {
+
+ // enforce limits
+ if (contrast > 1.0)
+ contrast = 1.0;
+ else if (contrast < 0.0)
+ contrast = 0.0;
+
+ // convert to char in range 0 to 127 (i.e. 6 bits)
+ char ic = char(contrast*127.0);
+
+ sendCommand(0b00100001); // extended instruction set
+ sendCommand(0b10000000 | ic); // set Vop (which controls contrast)
+ sendCommand(0b00100000); // back to basic instruction set
+}
+
+void N5110::setTempCoefficient(char tc) {
+
+ // enforce limits
+ if (tc>3) {
+ tc=3;
+ }
+
+ // temperature coefficient may need increasing at low temperatures
+
+ sendCommand(0b00100001); // extended instruction set
+ sendCommand(0b00000100 | tc);
+ sendCommand(0b00100000); // back to basic instruction set
+}
+
+void N5110::setBias(char bias) {
+
+ // from data sheet
+ // bias mux rate
+ // 0 1:100
+ // 1 1:80
+ // 2 1:65
+ // 3 1:48 (default)
+ // 4 1:40/1:34
+ // 5 1:24
+ // 6 1:18/1:16
+ // 7 1:10/1:9/1:8
+
+ // enforce limits
+ if (bias>7) {
+ bias=7;
+ }
+
+ sendCommand(0b00100001); // extended mode instruction
+ sendCommand(0b00010000 | bias);
+ sendCommand(0b00100000); // end of extended mode instruction
+}
// pulse the active low reset line
void N5110::reset()
@@ -182,8 +227,9 @@
unsigned int const y)
{
if (x<WIDTH && y<HEIGHT) { // check within range
- sendCommand(0x80 | x); // send addresses to display with relevant mask
- sendCommand(0x40 | y);
+ sendCommand(0b00100000); // basic instruction
+ sendCommand(0b10000000 | x); // send addresses to display with relevant mask
+ sendCommand(0b01000000 | y);
}
}
