Clock to use with LCD NK5110. You need to use N5110 libraries
Fork of Nokia5110 by
NOKIA_5110.cpp@0:fbba596f1039, 2012-01-16 (annotated)
- Committer:
- Fuzball
- Date:
- Mon Jan 16 19:47:48 2012 +0000
- Revision:
- 0:fbba596f1039
Who changed what in which revision?
User | Revision | Line number | New 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 | } |