Baseline for testing

Committer:
foxbrianr
Date:
Tue Sep 17 13:48:43 2019 +0000
Revision:
2:73721d9e0056
Parent:
1:0f1dffc6103a
Beta 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
foxbrianr 2:73721d9e0056 1 /**************************************************************************
foxbrianr 2:73721d9e0056 2 * @file LCD.h
foxbrianr 2:73721d9e0056 3 * @brief Base class for wrapping the interface with the New Haven 40x4
foxbrianr 2:73721d9e0056 4 * LCD monitor.
foxbrianr 2:73721d9e0056 5 * @version: V1.0
foxbrianr 2:73721d9e0056 6 * @date: 9/17/2019
foxbrianr 0:c428f1d60316 7
foxbrianr 2:73721d9e0056 8 *
foxbrianr 2:73721d9e0056 9 * @note
foxbrianr 2:73721d9e0056 10 * Copyright (C) 2019 E3 Design. All rights reserved.
foxbrianr 2:73721d9e0056 11 *
foxbrianr 2:73721d9e0056 12 * @par
foxbrianr 2:73721d9e0056 13 * E3 Designers LLC is supplying this software for use with Cortex-M3 LPC1768
foxbrianr 2:73721d9e0056 14 * processor based microcontroller for the ESCM 2000 Monitor and Display.
foxbrianr 2:73721d9e0056 15 * *
foxbrianr 2:73721d9e0056 16 * @par
foxbrianr 2:73721d9e0056 17 * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
foxbrianr 2:73721d9e0056 18 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
foxbrianr 2:73721d9e0056 19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
foxbrianr 2:73721d9e0056 20 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
foxbrianr 2:73721d9e0056 21 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
foxbrianr 2:73721d9e0056 22 *
foxbrianr 2:73721d9e0056 23 ******************************************************************************/
foxbrianr 0:c428f1d60316 24 #ifndef _LCD_
foxbrianr 0:c428f1d60316 25 #define _LCD_
foxbrianr 0:c428f1d60316 26
foxbrianr 0:c428f1d60316 27 #include "mbed.h"
foxbrianr 0:c428f1d60316 28
foxbrianr 0:c428f1d60316 29 /*
foxbrianr 0:c428f1d60316 30 * LCD commands.
foxbrianr 0:c428f1d60316 31 */
foxbrianr 0:c428f1d60316 32 // Clear display:
foxbrianr 0:c428f1d60316 33 #define LCD_CLEAR (1 << 0)
foxbrianr 0:c428f1d60316 34
foxbrianr 0:c428f1d60316 35 // return cursor and LCD to home position:
foxbrianr 0:c428f1d60316 36 #define LCD_HOME (1 << 1)
foxbrianr 0:c428f1d60316 37
foxbrianr 0:c428f1d60316 38 // set cursor move direction:
foxbrianr 0:c428f1d60316 39 #define LCD_MOVEDIR (1 << 2)
foxbrianr 0:c428f1d60316 40 // shift display when byte written to display
foxbrianr 0:c428f1d60316 41 #define LCD_MOVEDIR_SHIFT (1 << 0)
foxbrianr 0:c428f1d60316 42 // increment the cursor after each byte written:
foxbrianr 0:c428f1d60316 43 #define LCD_MOVEDIR_ID (1 << 1)
foxbrianr 0:c428f1d60316 44
foxbrianr 0:c428f1d60316 45 // Enable display/cursor:
foxbrianr 0:c428f1d60316 46 #define LCD_DISPEN (1 << 3)
foxbrianr 0:c428f1d60316 47 // turn cursor blink on:
foxbrianr 0:c428f1d60316 48 #define LCD_DISPEN_BLINK (1 << 0)
foxbrianr 0:c428f1d60316 49 // turn cursor on:
foxbrianr 0:c428f1d60316 50 #define LCD_DISPEN_CURSOR (1 << 1)
foxbrianr 0:c428f1d60316 51 // turn display on:
foxbrianr 0:c428f1d60316 52 #define LCD_DISPEN_DISP (1 << 2)
foxbrianr 0:c428f1d60316 53
foxbrianr 0:c428f1d60316 54 // move cursor/shift display:
foxbrianr 0:c428f1d60316 55 #define LCD_MCSD (1 << 4)
foxbrianr 0:c428f1d60316 56 // direction of shift (right if set):
foxbrianr 0:c428f1d60316 57 #define LCD_MCSD_RL (1 << 2)
foxbrianr 0:c428f1d60316 58 // turn on display shift:
foxbrianr 0:c428f1d60316 59 #define LCD_MCSD_SC (1 << 3)
foxbrianr 0:c428f1d60316 60
foxbrianr 0:c428f1d60316 61 // set interface length:
foxbrianr 0:c428f1d60316 62 #define LCD_SETIFLEN (1 << 5)
foxbrianr 0:c428f1d60316 63 // set character font 5x10 (1) or 5x7 (0)
foxbrianr 0:c428f1d60316 64 #define LCD_SETIFLEN_F (1 << 2)
foxbrianr 0:c428f1d60316 65 // set # of display lines 1 if 0, 2 if 1:
foxbrianr 0:c428f1d60316 66 #define LCD_SETIFLEN_N (1 << 3)
foxbrianr 0:c428f1d60316 67 // set interface length 8 bits if 1, 4 bits if 0
foxbrianr 0:c428f1d60316 68 #define LCD_SETIFLEN_DL (1 << 4)
foxbrianr 0:c428f1d60316 69
foxbrianr 0:c428f1d60316 70 // move cursor into CGRAM:
foxbrianr 0:c428f1d60316 71 #define LCD_MOVERAM (1 << 6)
foxbrianr 0:c428f1d60316 72
foxbrianr 0:c428f1d60316 73 // Move cursor to display:
foxbrianr 0:c428f1d60316 74 #define LCD_MOVEDISPLAY (1 << 7)
foxbrianr 0:c428f1d60316 75 #define LCD_DATAREAD 0x00
foxbrianr 0:c428f1d60316 76 #define LCD_DATAWRITE 0xFF
foxbrianr 0:c428f1d60316 77 #define LCD_READ 1
foxbrianr 0:c428f1d60316 78 #define LCD_WRITE 0
foxbrianr 0:c428f1d60316 79 #define LCD_HIGH 1
foxbrianr 0:c428f1d60316 80 #define LCD_LOW 0
foxbrianr 0:c428f1d60316 81
foxbrianr 0:c428f1d60316 82 #define LCD_RS_COMMANDREGISTERS 0
foxbrianr 0:c428f1d60316 83 #define LCD_RS_DATAREGISTERS 1
foxbrianr 0:c428f1d60316 84
foxbrianr 0:c428f1d60316 85 #define LCD_wakeUp 0x30 //
foxbrianr 0:c428f1d60316 86 #define LCD_functionSet 0x28 // Sets the interface data type to 4 bits, 2 lines, and font size 5x8. 0x28 = 0010 1000
foxbrianr 0:c428f1d60316 87 #define LCD_returnHome 0x02 // Sets the cursor to the beginning of the screen. 0x02 = 0000 0010
foxbrianr 0:c428f1d60316 88 #define LCD_setCursor 0x10 // Sets cursor moving and display shift, and direction without changing DDRAM data. 0x10 = 0001 0000
foxbrianr 0:c428f1d60316 89 #define LCD_setDisplayOn 0x0C // Sets Entire Display on, Display on, Cursor on. 0x0C = 0000 1011
foxbrianr 0:c428f1d60316 90 #define LCD_setDisplayEdit 0x0E // Sets Entire Display on, Display on, Cursor on. 0x0C = 0000 1011
foxbrianr 0:c428f1d60316 91 #define LCD_setDisplayBlink 0x0F// Sets Entire Display on, Display on, Cursor on. 0x0C = 0000 1011
foxbrianr 0:c428f1d60316 92 #define LCD_setDisplayOff 0x08 // Sets Entire Display off, Display on, Cursor on. 0x0C = 0000 1000
foxbrianr 0:c428f1d60316 93 #define LCD_entryModeSet 0x06 // Sets Entry Mode. 0x06 = 0000 0110
foxbrianr 0:c428f1d60316 94 #define LCD_cursorModeSet 0x06 // Sets Entry Mode. 0x06 = 0000 0110
foxbrianr 0:c428f1d60316 95 #define LCD_clearDisplay 0x01 // Resets the whole display to blank
foxbrianr 0:c428f1d60316 96
foxbrianr 0:c428f1d60316 97
foxbrianr 0:c428f1d60316 98
foxbrianr 0:c428f1d60316 99 class LCD
foxbrianr 0:c428f1d60316 100 {
foxbrianr 1:0f1dffc6103a 101 public:
foxbrianr 1:0f1dffc6103a 102
foxbrianr 1:0f1dffc6103a 103 LCD();
foxbrianr 0:c428f1d60316 104
foxbrianr 1:0f1dffc6103a 105 virtual ~LCD();
foxbrianr 1:0f1dffc6103a 106
foxbrianr 1:0f1dffc6103a 107 void init(void) ;
foxbrianr 1:0f1dffc6103a 108
foxbrianr 1:0f1dffc6103a 109 void display(char *show);
foxbrianr 2:73721d9e0056 110
foxbrianr 2:73721d9e0056 111 void clear();
foxbrianr 2:73721d9e0056 112
foxbrianr 1:0f1dffc6103a 113 void cls();
foxbrianr 1:0f1dffc6103a 114
foxbrianr 1:0f1dffc6103a 115 void locate(int row, int column);
foxbrianr 1:0f1dffc6103a 116
foxbrianr 1:0f1dffc6103a 117 void putc(const char c);
foxbrianr 1:0f1dffc6103a 118
foxbrianr 1:0f1dffc6103a 119 void printf(const char* fmt, ...);
foxbrianr 1:0f1dffc6103a 120
foxbrianr 1:0f1dffc6103a 121 int rows()
foxbrianr 1:0f1dffc6103a 122 {
foxbrianr 1:0f1dffc6103a 123 return 4;
foxbrianr 1:0f1dffc6103a 124 }
foxbrianr 1:0f1dffc6103a 125
foxbrianr 1:0f1dffc6103a 126 int columns()
foxbrianr 1:0f1dffc6103a 127 {
foxbrianr 1:0f1dffc6103a 128 return 40;
foxbrianr 1:0f1dffc6103a 129 }
foxbrianr 1:0f1dffc6103a 130
foxbrianr 1:0f1dffc6103a 131 private:
foxbrianr 1:0f1dffc6103a 132 void setCursorMode (int mode);
foxbrianr 1:0f1dffc6103a 133
foxbrianr 1:0f1dffc6103a 134 void clear(int e1,int e2);
foxbrianr 1:0f1dffc6103a 135
foxbrianr 1:0f1dffc6103a 136 void writeByte1(int value);
foxbrianr 1:0f1dffc6103a 137 void writeByte2(int value);
foxbrianr 1:0f1dffc6103a 138
foxbrianr 1:0f1dffc6103a 139 void command1(char i) ;
foxbrianr 1:0f1dffc6103a 140 void command2(char i) ;
foxbrianr 1:0f1dffc6103a 141
foxbrianr 1:0f1dffc6103a 142 void writedata1(char i) ;
foxbrianr 1:0f1dffc6103a 143 void writedata2(char i) ;
foxbrianr 1:0f1dffc6103a 144
foxbrianr 1:0f1dffc6103a 145 void nextline1();
foxbrianr 1:0f1dffc6103a 146 void nextline2();
foxbrianr 1:0f1dffc6103a 147
foxbrianr 1:0f1dffc6103a 148 int isBusy(int e1,int e2);
foxbrianr 1:0f1dffc6103a 149
foxbrianr 1:0f1dffc6103a 150 int isBusy1(void);
foxbrianr 1:0f1dffc6103a 151 int isBusy2(void);
foxbrianr 1:0f1dffc6103a 152
foxbrianr 1:0f1dffc6103a 153 void waitBusy();
foxbrianr 1:0f1dffc6103a 154
foxbrianr 1:0f1dffc6103a 155 void write(const char* text);
foxbrianr 1:0f1dffc6103a 156 void writeLine(int line, const char* text );
foxbrianr 1:0f1dffc6103a 157 void writeCharacter(const char c, int row, int column);
foxbrianr 1:0f1dffc6103a 158 void writeCharacters(const char* text, int row, int column);
foxbrianr 1:0f1dffc6103a 159
foxbrianr 1:0f1dffc6103a 160 void writeCommand(char value,int e1,int e2);
foxbrianr 1:0f1dffc6103a 161 void writeChar (char value,int e1,int e2);
foxbrianr 1:0f1dffc6103a 162 void writeData (char value,int e1,int e2);
foxbrianr 1:0f1dffc6103a 163
foxbrianr 1:0f1dffc6103a 164 int address(int row, int column);
foxbrianr 1:0f1dffc6103a 165
foxbrianr 1:0f1dffc6103a 166 void character (int row, int column, char c);
foxbrianr 1:0f1dffc6103a 167
foxbrianr 1:0f1dffc6103a 168 DigitalInOut LCD_E1;
foxbrianr 1:0f1dffc6103a 169 DigitalInOut LCD_E2;
foxbrianr 1:0f1dffc6103a 170 DigitalInOut LCD_RS;
foxbrianr 1:0f1dffc6103a 171 DigitalInOut LCD_RW;
foxbrianr 1:0f1dffc6103a 172
foxbrianr 1:0f1dffc6103a 173 BusInOut LCD_DATA;
foxbrianr 1:0f1dffc6103a 174
foxbrianr 1:0f1dffc6103a 175 Mutex mutex;
foxbrianr 1:0f1dffc6103a 176
foxbrianr 2:73721d9e0056 177 volatile int _row;
foxbrianr 2:73721d9e0056 178 volatile int _column;
foxbrianr 2:73721d9e0056 179 volatile char isOutput;
foxbrianr 0:c428f1d60316 180
foxbrianr 0:c428f1d60316 181 };
foxbrianr 0:c428f1d60316 182
foxbrianr 0:c428f1d60316 183 #endif