Use with a Nucleo F401RE and a Sharp Optical Dust Sensor GP2Y1010AU0F to measure dust with a Nokia 5110 display to show result.

Dependencies:   mbed

Committer:
kirchnet
Date:
Sat Jun 14 02:25:52 2014 +0000
Revision:
0:99fdd85b4929
Use with a Nucleo F401RE and a Sharp Optical Dust Sensor GP2Y1010AU0F to measure dust with a Nokia 5110 display to show results.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kirchnet 0:99fdd85b4929 1 // Project: Nokia5110 - Controlling a NK5110 display from an NXP LPC1768
kirchnet 0:99fdd85b4929 2 // File: NOKIA_5110.h
kirchnet 0:99fdd85b4929 3 // Author: Chris Yan
kirchnet 0:99fdd85b4929 4 // Created: January, 2012
kirchnet 0:99fdd85b4929 5 // Revised: January, 2014
kirchnet 0:99fdd85b4929 6 // Desc: Commands, fonts, and class for using a
kirchnet 0:99fdd85b4929 7 // Nokia 5110 LCD via the Phillips 8554 LCD driver.
kirchnet 0:99fdd85b4929 8 //
kirchnet 0:99fdd85b4929 9 // Typical Usage: User must fill the LcdPins struct with the pinout used to control the LCD and
kirchnet 0:99fdd85b4929 10 // instantiate the NokiaLcd class - passing the created LcdPins struct to the constructor.
kirchnet 0:99fdd85b4929 11 // The class function NokiaLcd::InitLcd may then be called to reset and start the LCD driver.
kirchnet 0:99fdd85b4929 12 // A simple 6x6 font (6x8 in LCD space and ~5x5 character space) is included to facilitate
kirchnet 0:99fdd85b4929 13 // the NokiaLcd::DrawChar( char character ) function, which will copy the character 8 bits
kirchnet 0:99fdd85b4929 14 // at a time for 6 clock cycles.
kirchnet 0:99fdd85b4929 15 // Commands may be sent to the LCD via the NokiaLcd::SendFunction(char cmd)
kirchnet 0:99fdd85b4929 16 // function, but be aware that certain commands require the Function Set register's H-value
kirchnet 0:99fdd85b4929 17 // to be either 1 or 0, depending on the command. This class does not check to see whether
kirchnet 0:99fdd85b4929 18 // the H-value is of proper status. The Function Set register /may/ be changed via the
kirchnet 0:99fdd85b4929 19 // NokiaLcd::SendFunction(char cmd), but the code uses this internally and expects that
kirchnet 0:99fdd85b4929 20 // most function registers have not been changed by the user.
kirchnet 0:99fdd85b4929 21 //
kirchnet 0:99fdd85b4929 22 // Example:
kirchnet 0:99fdd85b4929 23 // #include "mbed.h"
kirchnet 0:99fdd85b4929 24 // #include "NOKIA_5110.h"
kirchnet 0:99fdd85b4929 25 //
kirchnet 0:99fdd85b4929 26 // int main() {
kirchnet 0:99fdd85b4929 27 // LcdPins myLcdPins = { p11, NC, p13, p10, p8, p9 };
kirchnet 0:99fdd85b4929 28 // NokiaLcd myLcd( myLcdPins ); // SPI is started here (8-bits, mode 1)
kirchnet 0:99fdd85b4929 29 // myLcd.InitLcd(); // LCD is reset and DDRAM is cleared
kirchnet 0:99fdd85b4929 30 // myLcd.TestLcd( 0xAA ); // Draws a vertical pattern where every other pixel is on
kirchnet 0:99fdd85b4929 31 // wait(10);
kirchnet 0:99fdd85b4929 32 // myLcd.ShutdownLcd(); // Clears the LCD's DDRAM and powers it down via CMD_FS_POWER_DOWN_MODE, H=0
kirchnet 0:99fdd85b4929 33 // while(1)
kirchnet 0:99fdd85b4929 34 // { };
kirchnet 0:99fdd85b4929 35 // }
kirchnet 0:99fdd85b4929 36
kirchnet 0:99fdd85b4929 37 // Command Instructions
kirchnet 0:99fdd85b4929 38 // H = 0
kirchnet 0:99fdd85b4929 39 #ifndef __NOKIA_5110_H__
kirchnet 0:99fdd85b4929 40 #define __NOKIA_5110_H__
kirchnet 0:99fdd85b4929 41
kirchnet 0:99fdd85b4929 42 // Command Instructions
kirchnet 0:99fdd85b4929 43 // H = 0
kirchnet 0:99fdd85b4929 44 #define CMD_DC_CLEAR_DISPLAY 0x08
kirchnet 0:99fdd85b4929 45 #define CMD_DC_NORMAL_MODE 0x0C
kirchnet 0:99fdd85b4929 46 #define CMD_DC_FILL_DISPLAY 0x09
kirchnet 0:99fdd85b4929 47 #define CMD_DC_INVERT_VIDEO 0x0D
kirchnet 0:99fdd85b4929 48 #define CMD_FS_HORIZONTAL_MODE 0x00
kirchnet 0:99fdd85b4929 49 #define CMD_FS_VERTICAL_MODE 0x02
kirchnet 0:99fdd85b4929 50 #define CMD_FS_BASIC_MODE 0x00
kirchnet 0:99fdd85b4929 51 #define CMD_FS_EXTENDED_MODE 0x01
kirchnet 0:99fdd85b4929 52 #define CMD_FS_ACTIVE_MODE 0x00
kirchnet 0:99fdd85b4929 53 #define CMD_FS_POWER_DOWN_MODE 0x04
kirchnet 0:99fdd85b4929 54 // H = 1
kirchnet 0:99fdd85b4929 55 #define CMD_TC_TEMP_0 0x04
kirchnet 0:99fdd85b4929 56 #define CMD_TC_TEMP_1 0x05
kirchnet 0:99fdd85b4929 57 #define CMD_TC_TEMP_2 0x06
kirchnet 0:99fdd85b4929 58 #define CMD_TC_TEMP_3 0x07
kirchnet 0:99fdd85b4929 59 #define CMD_BI_MUX_24 0x15
kirchnet 0:99fdd85b4929 60 #define CMD_BI_MUX_48 0x13
kirchnet 0:99fdd85b4929 61 #define CMD_BI_MUX_100 0x10
kirchnet 0:99fdd85b4929 62 #define CMD_VOP_6V06 0xB2
kirchnet 0:99fdd85b4929 63 #define CMD_VOP_7V38 0xC8
kirchnet 0:99fdd85b4929 64
kirchnet 0:99fdd85b4929 65 // LCD Characteristics
kirchnet 0:99fdd85b4929 66 #define LCD_FREQ 1000000
kirchnet 0:99fdd85b4929 67 #define LCD_SPI_MODE 0x01
kirchnet 0:99fdd85b4929 68 #define LCD_SPI_BITS 0x08
kirchnet 0:99fdd85b4929 69 #define LCD_X_MAX 84
kirchnet 0:99fdd85b4929 70 #define LCD_Y_MAX 48
kirchnet 0:99fdd85b4929 71
kirchnet 0:99fdd85b4929 72 #define PIN_RST 0x00
kirchnet 0:99fdd85b4929 73 #define PIN_SCE 0x01
kirchnet 0:99fdd85b4929 74 #define PIN_DC 0x02
kirchnet 0:99fdd85b4929 75
kirchnet 0:99fdd85b4929 76 #include "mbed.h"
kirchnet 0:99fdd85b4929 77
kirchnet 0:99fdd85b4929 78 struct LcdPins
kirchnet 0:99fdd85b4929 79 {
kirchnet 0:99fdd85b4929 80 PinName mosi;
kirchnet 0:99fdd85b4929 81 PinName miso;
kirchnet 0:99fdd85b4929 82 PinName sclk;
kirchnet 0:99fdd85b4929 83 PinName dc;
kirchnet 0:99fdd85b4929 84 PinName sce;
kirchnet 0:99fdd85b4929 85 PinName rst;
kirchnet 0:99fdd85b4929 86 };
kirchnet 0:99fdd85b4929 87
kirchnet 0:99fdd85b4929 88 struct LcdFunctionSet
kirchnet 0:99fdd85b4929 89 {
kirchnet 0:99fdd85b4929 90 char PD;
kirchnet 0:99fdd85b4929 91 char V;
kirchnet 0:99fdd85b4929 92 char H;
kirchnet 0:99fdd85b4929 93 };
kirchnet 0:99fdd85b4929 94
kirchnet 0:99fdd85b4929 95 typedef char LcdFunctionChar;
kirchnet 0:99fdd85b4929 96 typedef char LcdTempControl;
kirchnet 0:99fdd85b4929 97 typedef char LcdDispControl;
kirchnet 0:99fdd85b4929 98 typedef char LcdBiasChar;
kirchnet 0:99fdd85b4929 99 typedef char LcdVopChar;
kirchnet 0:99fdd85b4929 100
kirchnet 0:99fdd85b4929 101 class NokiaLcd
kirchnet 0:99fdd85b4929 102 {
kirchnet 0:99fdd85b4929 103 public:
kirchnet 0:99fdd85b4929 104 NokiaLcd(LcdPins lcd_pinout);
kirchnet 0:99fdd85b4929 105 ~NokiaLcd();
kirchnet 0:99fdd85b4929 106
kirchnet 0:99fdd85b4929 107 public:
kirchnet 0:99fdd85b4929 108 void InitLcd();
kirchnet 0:99fdd85b4929 109 void ClearLcdMem();
kirchnet 0:99fdd85b4929 110 void ShutdownLcd();
kirchnet 0:99fdd85b4929 111 void SendFunction(char cmd);
kirchnet 0:99fdd85b4929 112 void TestLcd(char test_pattern);
kirchnet 0:99fdd85b4929 113 void SendDrawData(char data);
kirchnet 0:99fdd85b4929 114
kirchnet 0:99fdd85b4929 115 public:
kirchnet 0:99fdd85b4929 116 void DrawString(char* str);
kirchnet 0:99fdd85b4929 117 void DrawChar(char character);
kirchnet 0:99fdd85b4929 118 void SetXY(char x, char y);
kirchnet 0:99fdd85b4929 119 void DrawFrameChar(char character);
kirchnet 0:99fdd85b4929 120 void DrawNegFrameChar(char character);
kirchnet 0:99fdd85b4929 121 char* NumToStr(int num);
kirchnet 0:99fdd85b4929 122
kirchnet 0:99fdd85b4929 123 private:
kirchnet 0:99fdd85b4929 124 char CreateFunctionChar();
kirchnet 0:99fdd85b4929 125 void ResetLcd();
kirchnet 0:99fdd85b4929 126
kirchnet 0:99fdd85b4929 127 private:
kirchnet 0:99fdd85b4929 128 LcdFunctionChar FunctionChar;
kirchnet 0:99fdd85b4929 129 LcdTempControl TempControlChar;
kirchnet 0:99fdd85b4929 130 LcdDispControl DispControlChar;
kirchnet 0:99fdd85b4929 131 LcdFunctionSet FunctionSet;
kirchnet 0:99fdd85b4929 132 LcdBiasChar BiasChar;
kirchnet 0:99fdd85b4929 133 LcdVopChar VopChar;
kirchnet 0:99fdd85b4929 134 DigitalOut** Pins;
kirchnet 0:99fdd85b4929 135 SPI* LcdSpi;
kirchnet 0:99fdd85b4929 136
kirchnet 0:99fdd85b4929 137 };
kirchnet 0:99fdd85b4929 138
kirchnet 0:99fdd85b4929 139 const char FONT_6x6[570] = //should be 564 total char
kirchnet 0:99fdd85b4929 140 {
kirchnet 0:99fdd85b4929 141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // SPACE 1
kirchnet 0:99fdd85b4929 142 0x00, 0x06, 0x2F, 0x06, 0x00, 0x00, // ! 2
kirchnet 0:99fdd85b4929 143 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, // " 3
kirchnet 0:99fdd85b4929 144 0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00, // # 4
kirchnet 0:99fdd85b4929 145 0x2E, 0x2A, 0x3F, 0x2A, 0x3A, 0x00, // $ 5
kirchnet 0:99fdd85b4929 146 0x26, 0x16, 0x08, 0x34, 0x32, 0x00, // % 6
kirchnet 0:99fdd85b4929 147 0x34, 0x2A, 0x3C, 0x18, 0x28, 0x00, // & 7
kirchnet 0:99fdd85b4929 148 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, // ' 8
kirchnet 0:99fdd85b4929 149 0x00, 0x00, 0x1C, 0x36, 0x22, 0x00, // ( 9
kirchnet 0:99fdd85b4929 150 0x22, 0x36, 0x1C, 0x00, 0x00, 0x00, // ) 10
kirchnet 0:99fdd85b4929 151 0x24, 0x18, 0x0E, 0x18, 0x24, 0x00, // * 11
kirchnet 0:99fdd85b4929 152 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, // + 12
kirchnet 0:99fdd85b4929 153 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, // , 13
kirchnet 0:99fdd85b4929 154 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // - 14
kirchnet 0:99fdd85b4929 155 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // . 15
kirchnet 0:99fdd85b4929 156 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, // / 16
kirchnet 0:99fdd85b4929 157 0x00, 0x1C, 0x22, 0x22, 0x1C, 0x00, // 0 17
kirchnet 0:99fdd85b4929 158 0x00, 0x24, 0x3E, 0x20, 0x00, 0x00, // 1 18
kirchnet 0:99fdd85b4929 159 0x3A, 0x2A, 0x2A, 0x2A, 0x2E, 0x00, // 2 19
kirchnet 0:99fdd85b4929 160 0x22, 0x2A, 0x2A, 0x2A, 0x3E, 0x00, // 3 20
kirchnet 0:99fdd85b4929 161 0x0E, 0x08, 0x08, 0x3E, 0x08, 0x00, // 4 21
kirchnet 0:99fdd85b4929 162 0x2E, 0x2A, 0x2A, 0x2A, 0x3A, 0x00, // 5 22
kirchnet 0:99fdd85b4929 163 0x3E, 0x2A, 0x2A, 0x2A, 0x3A, 0x00, // 6 23
kirchnet 0:99fdd85b4929 164 0x22, 0x12, 0x0A, 0x06, 0x02, 0x00, // 7 24
kirchnet 0:99fdd85b4929 165 0x3E, 0x2A, 0x2A, 0x2A, 0x3E, 0x00, // 8 25
kirchnet 0:99fdd85b4929 166 0x00, 0x2E, 0x2A, 0x2A, 0x3E, 0x00, // 9 26
kirchnet 0:99fdd85b4929 167 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, // : 27
kirchnet 0:99fdd85b4929 168 0x00, 0x20, 0x14, 0x00, 0x00, 0x00, // ; 28
kirchnet 0:99fdd85b4929 169 0x00, 0x00, 0x08, 0x14, 0x22, 0x00, // < 29
kirchnet 0:99fdd85b4929 170 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, // = 30
kirchnet 0:99fdd85b4929 171 0x22, 0x14, 0x08, 0x00, 0x00, 0x00, // > 31
kirchnet 0:99fdd85b4929 172 0x06, 0x01, 0x2D, 0x06, 0x00, 0x00, // ? 32
kirchnet 0:99fdd85b4929 173 0x1E, 0x23, 0x19, 0x35, 0x3E, 0x00, // @ 33
kirchnet 0:99fdd85b4929 174 0x3C, 0x0A, 0x0A, 0x0A, 0x3C, 0x00, // A 34
kirchnet 0:99fdd85b4929 175 0x3E, 0x2A, 0x2A, 0x2A, 0x1C, 0x00, // B 35
kirchnet 0:99fdd85b4929 176 0x1C, 0x22, 0x22, 0x22, 0x22, 0x00, // C 36
kirchnet 0:99fdd85b4929 177 0x3E, 0x22, 0x22, 0x22, 0x1C, 0x00, // D 37
kirchnet 0:99fdd85b4929 178 0x3E, 0x2A, 0x2A, 0x2A, 0x22, 0x00, // E 38
kirchnet 0:99fdd85b4929 179 0x3E, 0x0A, 0x0A, 0x0A, 0x02, 0x00, // F 39
kirchnet 0:99fdd85b4929 180 0x1C, 0x22, 0x2A, 0x2A, 0x18, 0x00, // G 40
kirchnet 0:99fdd85b4929 181 0x3E, 0x08, 0x08, 0x08, 0x3E, 0x00, // H
kirchnet 0:99fdd85b4929 182 0x22, 0x22, 0x3E, 0x22, 0x22, 0x00, // I
kirchnet 0:99fdd85b4929 183 0x10, 0x22, 0x22, 0x1E, 0x02, 0x00, // J
kirchnet 0:99fdd85b4929 184 0x3E, 0x08, 0x14, 0x22, 0x00, 0x00, // K
kirchnet 0:99fdd85b4929 185 0x00, 0x3E, 0x20, 0x20, 0x20, 0x00, // L 45
kirchnet 0:99fdd85b4929 186 0x3E, 0x04, 0x08, 0x04, 0x3E, 0x00, // M
kirchnet 0:99fdd85b4929 187 0x3C, 0x02, 0x02, 0x02, 0x3C, 0x00, // N
kirchnet 0:99fdd85b4929 188 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00, // O
kirchnet 0:99fdd85b4929 189 0x3E, 0x0A, 0x0A, 0x04, 0x00, 0x00, // P
kirchnet 0:99fdd85b4929 190 0x1C, 0x22, 0x32, 0x3C, 0x20, 0x00, // Q 50
kirchnet 0:99fdd85b4929 191 0x3E, 0x0A, 0x0A, 0x1A, 0x24, 0x00, // R
kirchnet 0:99fdd85b4929 192 0x24, 0x2A, 0x2A, 0x2A, 0x12, 0x00, // S
kirchnet 0:99fdd85b4929 193 0x02, 0x02, 0x3E, 0x02, 0x02, 0x00, // T
kirchnet 0:99fdd85b4929 194 0x1E, 0x20, 0x20, 0x20, 0x1E, 0x00, // U
kirchnet 0:99fdd85b4929 195 0x06, 0x18, 0x20, 0x18, 0x06, 0x00, // V 55
kirchnet 0:99fdd85b4929 196 0x0E, 0x30, 0x18, 0x30, 0x0E, 0x00, // W
kirchnet 0:99fdd85b4929 197 0x22, 0x14, 0x08, 0x14, 0x22, 0x00, // X
kirchnet 0:99fdd85b4929 198 0x02, 0x04, 0x38, 0x04, 0x02, 0x00, // Y
kirchnet 0:99fdd85b4929 199 0x22, 0x32, 0x2A, 0x26, 0x22, 0x00, // Z
kirchnet 0:99fdd85b4929 200 0x00, 0x00, 0x00, 0x3E, 0x22, 0x00, // [ 60
kirchnet 0:99fdd85b4929 201 0x06, 0x0C, 0x18, 0x30, 0x00, 0x00, // backslash
kirchnet 0:99fdd85b4929 202 0x22, 0x3E, 0x00, 0x00, 0x00, 0x00, // ]
kirchnet 0:99fdd85b4929 203 0x00, 0x04, 0x02, 0x02, 0x04, 0x00, // ^
kirchnet 0:99fdd85b4929 204 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, // _
kirchnet 0:99fdd85b4929 205 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, // ` 65
kirchnet 0:99fdd85b4929 206 0x18, 0x24, 0x14, 0x38, 0x00, 0x00, // a
kirchnet 0:99fdd85b4929 207 0x1E, 0x28, 0x28, 0x10, 0x00, 0x00, // b
kirchnet 0:99fdd85b4929 208 0x18, 0x24, 0x24, 0x00, 0x00, 0x00, // c
kirchnet 0:99fdd85b4929 209 0x10, 0x28, 0x28, 0x1E, 0x00, 0x00, // d
kirchnet 0:99fdd85b4929 210 0x18, 0x2C, 0x2C, 0x08, 0x00, 0x00, // e 70
kirchnet 0:99fdd85b4929 211 0x00, 0x3C, 0x12, 0x04, 0x00, 0x00, // f
kirchnet 0:99fdd85b4929 212 0x24, 0x2A, 0x1E, 0x00, 0x00, 0x00, // g
kirchnet 0:99fdd85b4929 213 0x3E, 0x08, 0x30, 0x00, 0x00, 0x00, // h
kirchnet 0:99fdd85b4929 214 0x00, 0x3A, 0x00, 0x00, 0x00, 0x00, // i
kirchnet 0:99fdd85b4929 215 0x10, 0x20, 0x1A, 0x00, 0x00, 0x00, // j 75
kirchnet 0:99fdd85b4929 216 0x3E, 0x10, 0x2C, 0x20, 0x00, 0x00, // k
kirchnet 0:99fdd85b4929 217 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, // l
kirchnet 0:99fdd85b4929 218 0x38, 0x08, 0x18, 0x08, 0x30, 0x00, // m
kirchnet 0:99fdd85b4929 219 0x30, 0x08, 0x08, 0x30, 0x00, 0x00, // n
kirchnet 0:99fdd85b4929 220 0x10, 0x28, 0x28, 0x10, 0x00, 0x00, // o 80
kirchnet 0:99fdd85b4929 221 0x38, 0x14, 0x14, 0x08, 0x00, 0x00, // p
kirchnet 0:99fdd85b4929 222 0x08, 0x14, 0x14, 0x38, 0x00, 0x00, // q
kirchnet 0:99fdd85b4929 223 0x3C, 0x08, 0x04, 0x00, 0x00, 0x00, // r
kirchnet 0:99fdd85b4929 224 0x2C, 0x34, 0x00, 0x00, 0x00, 0x00, // s
kirchnet 0:99fdd85b4929 225 0x08, 0x3C, 0x28, 0x00, 0x00, 0x00, // t 85
kirchnet 0:99fdd85b4929 226 0x18, 0x20, 0x20, 0x18, 0x00, 0x00, // u
kirchnet 0:99fdd85b4929 227 0x08, 0x10, 0x20, 0x10, 0x08, 0x00, // v
kirchnet 0:99fdd85b4929 228 0x18, 0x20, 0x10, 0x20, 0x18, 0x00, // w
kirchnet 0:99fdd85b4929 229 0x28, 0x10, 0x28, 0x00, 0x00, 0x00, // x
kirchnet 0:99fdd85b4929 230 0x2C, 0x30, 0x1C, 0x00, 0x00, 0x00, // y 90
kirchnet 0:99fdd85b4929 231 0x24, 0x34, 0x2C, 0x24, 0x00, 0x00, // z
kirchnet 0:99fdd85b4929 232 0x00, 0x00, 0x08, 0x3E, 0x22, 0x00, // {
kirchnet 0:99fdd85b4929 233 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // |
kirchnet 0:99fdd85b4929 234 0x22, 0x3E, 0x08, 0x00, 0x00, 0x00, // }
kirchnet 0:99fdd85b4929 235 0x10, 0x08, 0x18, 0x10, 0x08, 0x00, // ~ 95
kirchnet 0:99fdd85b4929 236 };
kirchnet 0:99fdd85b4929 237
kirchnet 0:99fdd85b4929 238 #endif