A fork of Chris Yan's Nokia 5110 LCD library, adapted to LPC1347. Should work on a DipCortex M3 and an EzSBC2 dev board.

Dependencies:   mbed

Fork of Nokia5110 by Krissi Yan

Committer:
Fuzball
Date:
Mon Jan 16 19:47:48 2012 +0000
Revision:
0:fbba596f1039

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Fuzball 0:fbba596f1039 1 // Project: Fuzzy LCD Voltmeter
Fuzball 0:fbba596f1039 2 // File: NOKIA_5110.cpp
Fuzball 0:fbba596f1039 3 // Author: Chris Yan
Fuzball 0:fbba596f1039 4 // Created: January, 2012
Fuzball 0:fbba596f1039 5 // Revised:
Fuzball 0:fbba596f1039 6 // Desc: Supporting code for the NokiaLcd class
Fuzball 0:fbba596f1039 7
Fuzball 0:fbba596f1039 8 #include "NOKIA_5110.h"
Fuzball 0:fbba596f1039 9 #include "mbed.h"
Fuzball 0:fbba596f1039 10
Fuzball 0:fbba596f1039 11 NokiaLcd::NokiaLcd(LcdPins pinout)
Fuzball 0:fbba596f1039 12 {
Fuzball 0:fbba596f1039 13 // SPI
Fuzball 0:fbba596f1039 14 LcdSpi = new SPI(pinout.mosi, pinout.miso, pinout.sclk);
Fuzball 0:fbba596f1039 15 LcdSpi->format(LCD_SPI_BITS, LCD_SPI_MODE);
Fuzball 0:fbba596f1039 16 LcdSpi->frequency(LCD_FREQ);
Fuzball 0:fbba596f1039 17
Fuzball 0:fbba596f1039 18 // Control Pins
Fuzball 0:fbba596f1039 19 Pins = new DigitalOut*[3];
Fuzball 0:fbba596f1039 20 Pins[PIN_RST] = new DigitalOut(pinout.rst);
Fuzball 0:fbba596f1039 21 Pins[PIN_SCE] = new DigitalOut(pinout.sce);
Fuzball 0:fbba596f1039 22 Pins[PIN_DC] = new DigitalOut(pinout.dc);
Fuzball 0:fbba596f1039 23
Fuzball 0:fbba596f1039 24 // Initial Command Instructions, note the initial command mode
Fuzball 0:fbba596f1039 25 FunctionSet.V = CMD_FS_HORIZONTAL_MODE;
Fuzball 0:fbba596f1039 26 FunctionSet.H = CMD_FS_EXTENDED_MODE;
Fuzball 0:fbba596f1039 27 FunctionSet.PD = CMD_FS_ACTIVE_MODE;
Fuzball 0:fbba596f1039 28 FunctionChar = CreateFunctionChar();
Fuzball 0:fbba596f1039 29
Fuzball 0:fbba596f1039 30 TempControlChar = CMD_TC_TEMP_2;
Fuzball 0:fbba596f1039 31 DispControlChar = CMD_DC_NORMAL_MODE;
Fuzball 0:fbba596f1039 32 BiasChar = CMD_BI_MUX_48;
Fuzball 0:fbba596f1039 33 VopChar = CMD_VOP_7V38;
Fuzball 0:fbba596f1039 34 }
Fuzball 0:fbba596f1039 35
Fuzball 0:fbba596f1039 36 void NokiaLcd::ShutdownLcd()
Fuzball 0:fbba596f1039 37 {
Fuzball 0:fbba596f1039 38 FunctionSet.PD = CMD_FS_POWER_DOWN_MODE;
Fuzball 0:fbba596f1039 39
Fuzball 0:fbba596f1039 40 ClearLcdMem();
Fuzball 0:fbba596f1039 41 SendFunction( CMD_DC_CLEAR_DISPLAY );
Fuzball 0:fbba596f1039 42 SendFunction( CreateFunctionChar() );
Fuzball 0:fbba596f1039 43 }
Fuzball 0:fbba596f1039 44
Fuzball 0:fbba596f1039 45 void NokiaLcd::ClearLcdMem()
Fuzball 0:fbba596f1039 46 {
Fuzball 0:fbba596f1039 47 Pins[PIN_SCE]->write(0); // Chip Select goes low
Fuzball 0:fbba596f1039 48 Pins[PIN_DC]->write(1); // Data/CMD goes high
Fuzball 0:fbba596f1039 49
Fuzball 0:fbba596f1039 50 for(int tick = 0; tick <= 503; tick++)
Fuzball 0:fbba596f1039 51 LcdSpi->write(0x00);
Fuzball 0:fbba596f1039 52
Fuzball 0:fbba596f1039 53 Pins[PIN_SCE]->write(1); // Chip Select goes high
Fuzball 0:fbba596f1039 54 }
Fuzball 0:fbba596f1039 55
Fuzball 0:fbba596f1039 56 void NokiaLcd::TestLcd(char test_pattern)
Fuzball 0:fbba596f1039 57 {
Fuzball 0:fbba596f1039 58 Pins[PIN_SCE]->write(0); // Chip Select goes low
Fuzball 0:fbba596f1039 59 Pins[PIN_DC]->write(1); // Data/CMD goes high
Fuzball 0:fbba596f1039 60
Fuzball 0:fbba596f1039 61 for(int tick = 0; tick <= 503; tick++)
Fuzball 0:fbba596f1039 62 LcdSpi->write(test_pattern); // Command gets sent
Fuzball 0:fbba596f1039 63
Fuzball 0:fbba596f1039 64 Pins[PIN_SCE]->write(1); // Chip Select goes high
Fuzball 0:fbba596f1039 65 }
Fuzball 0:fbba596f1039 66
Fuzball 0:fbba596f1039 67 void NokiaLcd::InitLcd()
Fuzball 0:fbba596f1039 68 {
Fuzball 0:fbba596f1039 69 ResetLcd();
Fuzball 0:fbba596f1039 70
Fuzball 0:fbba596f1039 71 // Redefine the FunctionChar in case it has changed
Fuzball 0:fbba596f1039 72 FunctionSet.V = CMD_FS_HORIZONTAL_MODE;
Fuzball 0:fbba596f1039 73 FunctionSet.H = CMD_FS_EXTENDED_MODE;
Fuzball 0:fbba596f1039 74 FunctionSet.PD = CMD_FS_ACTIVE_MODE;
Fuzball 0:fbba596f1039 75 SendFunction( CreateFunctionChar() ); // Extended CMD set
Fuzball 0:fbba596f1039 76 SendFunction( VopChar ); // | Vop
Fuzball 0:fbba596f1039 77 SendFunction( TempControlChar ); // | Temp
Fuzball 0:fbba596f1039 78 SendFunction( BiasChar ); // | Bias
Fuzball 0:fbba596f1039 79
Fuzball 0:fbba596f1039 80 FunctionSet.H = CMD_FS_BASIC_MODE;
Fuzball 0:fbba596f1039 81 SendFunction( CreateFunctionChar() ); // Basic CMD set
Fuzball 0:fbba596f1039 82 SendFunction( DispControlChar ); // | Display Mode
Fuzball 0:fbba596f1039 83
Fuzball 0:fbba596f1039 84 ClearLcdMem();
Fuzball 0:fbba596f1039 85 }
Fuzball 0:fbba596f1039 86
Fuzball 0:fbba596f1039 87 void NokiaLcd::ResetLcd()
Fuzball 0:fbba596f1039 88 {
Fuzball 0:fbba596f1039 89 Pins[PIN_RST]->write(0); // Reset goes low
Fuzball 0:fbba596f1039 90 Pins[PIN_RST]->write(1); // Reset goes high
Fuzball 0:fbba596f1039 91 }
Fuzball 0:fbba596f1039 92
Fuzball 0:fbba596f1039 93 char NokiaLcd::CreateFunctionChar()
Fuzball 0:fbba596f1039 94 {
Fuzball 0:fbba596f1039 95 return ( 0x20 | FunctionSet.PD | FunctionSet.V | FunctionSet.H );
Fuzball 0:fbba596f1039 96 }
Fuzball 0:fbba596f1039 97
Fuzball 0:fbba596f1039 98 void NokiaLcd::SendDrawData(char data)
Fuzball 0:fbba596f1039 99 {
Fuzball 0:fbba596f1039 100 Pins[PIN_SCE]->write(0); // Chip Select goes low
Fuzball 0:fbba596f1039 101 Pins[PIN_DC]->write(1); // Data/CMD goes high
Fuzball 0:fbba596f1039 102
Fuzball 0:fbba596f1039 103 LcdSpi->write(data); // Command gets sent
Fuzball 0:fbba596f1039 104
Fuzball 0:fbba596f1039 105 Pins[PIN_SCE]->write(1); // Chip Select goes high
Fuzball 0:fbba596f1039 106 }
Fuzball 0:fbba596f1039 107
Fuzball 0:fbba596f1039 108 void NokiaLcd::DrawChar(char character)
Fuzball 0:fbba596f1039 109 {
Fuzball 0:fbba596f1039 110 for( int i = 0; i < 6; i++)
Fuzball 0:fbba596f1039 111 SendDrawData( FONT_6x6[ ((character - 32)*6) + i] );
Fuzball 0:fbba596f1039 112 }
Fuzball 0:fbba596f1039 113
Fuzball 0:fbba596f1039 114 void NokiaLcd::SendFunction(char cmd) //TODO:Detection of what H should be
Fuzball 0:fbba596f1039 115 {
Fuzball 0:fbba596f1039 116 Pins[PIN_SCE]->write(0); // Chip Select goes low
Fuzball 0:fbba596f1039 117 Pins[PIN_DC]->write(0); // Data/CMD goes low
Fuzball 0:fbba596f1039 118
Fuzball 0:fbba596f1039 119 LcdSpi->write(cmd); // Command gets sent
Fuzball 0:fbba596f1039 120
Fuzball 0:fbba596f1039 121 Pins[PIN_DC]->write(1); // Data/CMD goes back to Data mode
Fuzball 0:fbba596f1039 122 Pins[PIN_SCE]->write(1); // Chip Select goes high
Fuzball 0:fbba596f1039 123 }
Fuzball 0:fbba596f1039 124
Fuzball 0:fbba596f1039 125 NokiaLcd::~NokiaLcd()
Fuzball 0:fbba596f1039 126 {
Fuzball 0:fbba596f1039 127 ShutdownLcd();
Fuzball 0:fbba596f1039 128 }