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.
Diff: N5110.cpp
- Revision:
- 0:d563e74f0ae9
- Child:
- 1:df68f34cd32d
diff -r 000000000000 -r d563e74f0ae9 N5110.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/N5110.cpp Sun Jan 26 18:55:16 2014 +0000
@@ -0,0 +1,218 @@
+#include "mbed.h"
+#include "N5110.h"
+
+N5110::N5110(PinName pwrPin, PinName ledPin, PinName scePin, PinName rstPin, PinName dcPin, PinName mosiPin, PinName sclkPin)
+{
+
+ spi = new SPI(mosiPin,NC,sclkPin); // create new SPI instance and initialise
+ initSPI();
+
+ led = new PwmOut(ledPin);
+ pwr = new DigitalOut(pwrPin);
+ sce = new DigitalOut(scePin);
+ rst = new DigitalOut(rstPin);
+ dc = new DigitalOut(dcPin);
+
+}
+
+void N5110::init()
+{
+ turnOn(); // power up
+ reset(); // reset LCD
+
+ // function set - extended
+ sendCommand(0x20 | CMD_FS_ACTIVE_MODE | CMD_FS_HORIZONTAL_MODE | CMD_FS_EXTENDED_MODE);
+
+ sendCommand(CMD_VOP_7V38); // operating voltage
+ sendCommand(CMD_TC_TEMP_2); // temperature control
+ sendCommand(CMD_BI_MUX_48); // bias
+
+ // function set - basic
+ sendCommand(0x20 | CMD_FS_ACTIVE_MODE | CMD_FS_HORIZONTAL_MODE | CMD_FS_BASIC_MODE);
+ sendCommand(CMD_DC_NORMAL_MODE); // black on white
+ //sendLCDCommand(CMD_DC_INVERT_VIDEO); // white on black
+
+ // RAM is undefined at power-up so clear
+ clearRAM();
+
+}
+
+// function to power up the LCD and backlight
+void N5110::turnOn()
+{
+ // set brightness of LED - 0.0 to 1.0 - default is 50%
+ setBrightness(0.5);
+ pwr->write(1); // apply power
+}
+
+// function to power down LCD
+void N5110::turnOff()
+{
+
+ setBrightness(0.0); // turn backlight off
+ clearRAM(); // clear RAM to ensure specified current consumption
+ sendCommand(0x20 | CMD_FS_ACTIVE_MODE | CMD_FS_HORIZONTAL_MODE | CMD_FS_BASIC_MODE);
+ sendCommand(CMD_DC_CLEAR_DISPLAY);
+ sendCommand(0x20 | CMD_FS_POWER_DOWN_MODE | CMD_FS_HORIZONTAL_MODE | CMD_FS_EXTENDED_MODE);
+ pwr->write(0);
+
+}
+
+// function to change LED backlight brightness
+void N5110::setBrightness(float brightness)
+{
+ // check whether brightness is within range
+ if (brightness < 0.0)
+ brightness = 0.0;
+ if (brightness > 1.0)
+ brightness = 1.0;
+ // set PWM duty cycle
+ led->write(brightness);
+}
+
+
+// pulse the active low reset line
+void N5110::reset()
+{
+ rst->write(0); // reset the LCD
+ rst->write(1);
+}
+
+// function to initialise SPI peripheral
+void N5110::initSPI()
+{
+ spi->format(8,1); // 8 bits, Mode 1 - polarity 0, phase 1 - base value of clock is 0, data captured on falling edge/propagated on rising edge
+ spi->frequency(4000000); // maximum of screen is 4 MHz
+}
+
+void N5110::sendCommand(unsigned char command)
+{
+ dc->write(0); // set DC low for command
+ sce->write(0); // set CE low to begin frame
+ spi->write(command); // send command
+ dc->write(1); // turn back to data by default
+ sce->write(1); // set CE high to end frame (expected for transmission of single byte)
+
+}
+
+void N5110::sendData(unsigned char data)
+{
+ sce->write(0); // set CE low to begin frame
+ spi->write(data);
+ sce->write(1); // set CE high to end frame (expected for transmission of single byte)
+}
+
+// this function writes 0 to the 504 bytes to clear the RAM
+void N5110::clearRAM()
+{
+ int i;
+ sce->write(0); //set CE low to begin frame
+ for(i = 0; i < 504; i++) { // 48 x 84 bits = 504 bytes
+ spi->write(0x00); // send 0's
+ }
+ sce->write(1); // set CE high to end frame
+
+}
+
+void N5110::setXYAddress(int x, int y)
+{
+
+ // check whether address is in range
+ if (x > 83)
+ x=83;
+ if (y > 5)
+ y=5;
+
+ sendCommand(0x80 | x);
+ sendCommand(0x40 | y);
+}
+
+void N5110::setPixel(int x, int y)
+{
+ // calculate bank and shift 1 to required position
+ buffer[x][y/8] |= (1 << y%8);
+}
+
+void N5110::clearPixel(int x, int y)
+{
+ // calculate bank and shift 1 to required position (using bit clear)
+ buffer[x][y/8] &= ~(1 << y%8);
+}
+
+unsigned char N5110::getPixel(int x, int y)
+{
+ // return relevant bank and mask required bit
+ return buffer[x][y/8] & (1 << y%8);
+
+}
+
+void N5110::refreshDisplay()
+{
+
+ int i,j;
+ sce->write(0); //set CE low to begin frame
+
+ for(j = 0; j < 6; j++) { // be careful to use correct order (j,i) for horizontal addressing
+ for(i = 0; i < 84; i++) {
+ spi->write(buffer[i][j]); // send buffer
+ }
+ }
+ sce->write(1); // set CE high to end frame
+
+}
+
+void N5110::randomiseBuffer()
+{
+
+ int i,j;
+
+ for(j = 0; j < 6; j++) { // be careful to use correct order (j,i) for horizontal addressing
+ for(i = 0; i < 84; i++) {
+ buffer[i][j] = rand()%256; // generate random byte
+ }
+ }
+
+}
+
+// function to print 5x7 font
+void N5110::printChar(char c)
+{
+
+ // loop through 5 columns
+ for (int j = 0; j < 5 ; j++ ) {
+ sendData(font5x7[(c - 32)*5 + j]);
+ // array is offset by 32 relative to ASCII, each character is 5 pixels wide
+ }
+
+}
+
+// function to print string at specified position
+void N5110::printString(const char * str,int x,int y)
+{
+ int n = 0 ; // counter for number of characters in string
+ // loop through string and print character
+ while(*str) {
+
+ setXYAddress(x+6*n,y); // leave 1 pixel (6 = 5 + 1) between each character
+ printChar(*str);
+ str++; // go to next character in string
+ n++; // increment index
+ }
+
+}
+
+void N5110::clear()
+{
+ clearBuffer();
+ refreshDisplay();
+}
+
+void N5110::clearBuffer()
+{
+ int i,j;
+ for (i=0; i<84; i++) {
+ for (j=0; j<6; j++) {
+ buffer[i][j]=0;
+ }
+ }
+}
\ No newline at end of file