Set of routines to access 16*32character LCD display on WattBob I board.

Dependents:   Assignment_2_herpe Final_V1 ass2 ass2 ... more

Committer:
jimherd
Date:
Sun Dec 11 00:14:10 2011 +0000
Revision:
9:3b26cd028e85
Parent:
8:5a1c4254e4a6

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jimherd 0:e5b7c70254ac 1 /* draft mbed TextLCD
jimherd 0:e5b7c70254ac 2 * (c) 2007/8, sford
jimherd 0:e5b7c70254ac 3 */
jimherd 0:e5b7c70254ac 4
jimherd 0:e5b7c70254ac 5 #ifndef WATTBOB_TEXTLCD_H
jimherd 0:e5b7c70254ac 6 #define WATTBOB_TEXTLCD_H
jimherd 0:e5b7c70254ac 7
jimherd 0:e5b7c70254ac 8 #include "mbed.h"
jimherd 0:e5b7c70254ac 9 #include "Stream.h"
jimherd 0:e5b7c70254ac 10 #include "MCP23017.h"
jimherd 0:e5b7c70254ac 11
jimherd 0:e5b7c70254ac 12 #define RS_BIT 7
jimherd 0:e5b7c70254ac 13 #define RW_BIT 6
jimherd 0:e5b7c70254ac 14 #define E_BIT 5
jimherd 0:e5b7c70254ac 15 #define BL_BIT 4
jimherd 0:e5b7c70254ac 16
jimherd 8:5a1c4254e4a6 17 //
jimherd 8:5a1c4254e4a6 18 // Registers and bit definitions for 2*16 character display chip
jimherd 8:5a1c4254e4a6 19 //
jimherd 9:3b26cd028e85 20 #define CMD_NULL 0x00
jimherd 9:3b26cd028e85 21
jimherd 8:5a1c4254e4a6 22 #define CMD_CLEAR_DISPLAY 0x01
jimherd 8:5a1c4254e4a6 23
jimherd 8:5a1c4254e4a6 24 #define CMD_RETURN_HOME 0x02
jimherd 8:5a1c4254e4a6 25
jimherd 8:5a1c4254e4a6 26 #define CMD_ENTRY_MODE 0x04
jimherd 8:5a1c4254e4a6 27 #define CURSOR_STEP_LEFT 0x00
jimherd 8:5a1c4254e4a6 28 #define CURSOR_STEP_RIGHT 0x02
jimherd 8:5a1c4254e4a6 29 #define DISPLAY_SHIFT_OFF 0x00
jimherd 8:5a1c4254e4a6 30 #define DISPLAY_SHIFT_ON 0x01
jimherd 8:5a1c4254e4a6 31
jimherd 8:5a1c4254e4a6 32 #define CMD_DISPLAY_CONTROL 0x08
jimherd 8:5a1c4254e4a6 33 #define DISPLAY_OFF 0x00
jimherd 8:5a1c4254e4a6 34 #define DISPLAY_ON 0x04
jimherd 8:5a1c4254e4a6 35 #define CURSOR_OFF 0x00
jimherd 8:5a1c4254e4a6 36 #define CURSOR_ON 0x02
jimherd 8:5a1c4254e4a6 37 #define CURSOR_CHAR_BLINK_OFF 0x00
jimherd 8:5a1c4254e4a6 38 #define CURSOR_CHAR_BLINK_ON 0x01
jimherd 8:5a1c4254e4a6 39
jimherd 8:5a1c4254e4a6 40 #define CMD_CURSOR_SHIFT 0x10
jimherd 8:5a1c4254e4a6 41 #define SHIFT_CURSOR_LEFT 0x00
jimherd 8:5a1c4254e4a6 42 #define SHIFT_CURSOR_RIGHT 0x04
jimherd 8:5a1c4254e4a6 43 #define SHIFT_DISPLAY_LEFT 0x08
jimherd 8:5a1c4254e4a6 44 #define SHIFT_DISPLAY_RIGHT 0x0C
jimherd 8:5a1c4254e4a6 45
jimherd 8:5a1c4254e4a6 46 #define CMD_MODE_POWER 0x13
jimherd 8:5a1c4254e4a6 47 #define CHARACTER_MODE 0x00
jimherd 8:5a1c4254e4a6 48 #define GRAPHICS_MODE 0x08
jimherd 8:5a1c4254e4a6 49 #define INTERNAL_POWER_OFF 0x00
jimherd 8:5a1c4254e4a6 50 #define INTERNAL_POWER_ON 0x04
jimherd 8:5a1c4254e4a6 51
jimherd 8:5a1c4254e4a6 52 #define CMD_FUNCTION_SET 0x20
jimherd 8:5a1c4254e4a6 53 #define ENGL_JAPAN_FONT_SET 0x00
jimherd 8:5a1c4254e4a6 54 #define EUROPE_FONT_SET 0x01
jimherd 8:5a1c4254e4a6 55 #define ENGL_RUSSIAN_FONT_SET 0x20
jimherd 8:5a1c4254e4a6 56 #define FONT_5x8 0x00
jimherd 8:5a1c4254e4a6 57 #define FONT_5x10 0x04
jimherd 8:5a1c4254e4a6 58 #define ONE_LINE_DISPLAY 0x00
jimherd 8:5a1c4254e4a6 59 #define TWO_LINE_DISPLAY 0x08
jimherd 8:5a1c4254e4a6 60 #define INTERFACE_4_BIT 0x00
jimherd 8:5a1c4254e4a6 61 #define INTERFACE_8_BIT 0x10
jimherd 8:5a1c4254e4a6 62
jimherd 8:5a1c4254e4a6 63 #define CMD_SET_CGRAM_ADDRESS 0x40
jimherd 8:5a1c4254e4a6 64
jimherd 8:5a1c4254e4a6 65 #define CMD_SET_DDRAM_ADDRESS 0x80
jimherd 8:5a1c4254e4a6 66 //
jimherd 8:5a1c4254e4a6 67 // nibble commands
jimherd 8:5a1c4254e4a6 68 //
jimherd 8:5a1c4254e4a6 69 #define CMD4_SET_4_BIT_INTERFACE 0x2
jimherd 8:5a1c4254e4a6 70 #define CMD4_SET_8_BIT_INTERFACE 0x3
jimherd 8:5a1c4254e4a6 71 //
jimherd 8:5a1c4254e4a6 72 // Misc 2*16 character display constants
jimherd 8:5a1c4254e4a6 73 //
jimherd 9:3b26cd028e85 74 #define DISPLAY_INIT_DELAY_SECS 0.5f // 500mS
jimherd 9:3b26cd028e85 75 #define DISPLAY_CLEAR_DELAY 0.01f // 10 mS (spec is 6.2mS)
jimherd 8:5a1c4254e4a6 76
jimherd 1:190b705fb9e1 77 /** Class to access 16*2 LCD display connected to an MCP23017 I/O extender chip
jimherd 1:190b705fb9e1 78 *
jimherd 1:190b705fb9e1 79 * Derived from the "stream" class to be able to use methods such as "printf"
jimherd 1:190b705fb9e1 80 *
jimherd 1:190b705fb9e1 81 * Example :
jimherd 1:190b705fb9e1 82 * @code
jimherd 4:f06e69c4c7f3 83 * .....
jimherd 7:020722c18a8b 84 * #include "MCP23017.h"
jimherd 4:f06e69c4c7f3 85 * #include "WattBob_TextLCD.h"
jimherd 4:f06e69c4c7f3 86 * .....
jimherd 1:190b705fb9e1 87 * MCP23017 *par_port;
jimherd 1:190b705fb9e1 88 * WattBob_TextLCD *lcd;
jimherd 1:190b705fb9e1 89 * .....
jimherd 3:9c142edbfae8 90 * int main()
jimherd 7:020722c18a8b 91 * par_port = new MCP23017(p9, p10, 0x40);
jimherd 7:020722c18a8b 92 * par_port->config(0x0F00, 0x0F00, 0x0F00); // configure MCP23017 chip on WattBob
jimherd 3:9c142edbfae8 93 * lcd = new WattBob_TextLCD(par_port);
jimherd 3:9c142edbfae8 94 *
jimherd 1:190b705fb9e1 95 * par_port->write_bit(1,BL_BIT); // turn LCD backlight ON
jimherd 1:190b705fb9e1 96 * lcd->cls(); lcd->locate(0,0);
jimherd 1:190b705fb9e1 97 * lcd->printf("%s", message);
jimherd 1:190b705fb9e1 98 * lcd->locate(1,0);lcd->printf("press 1 to cont");
jimherd 1:190b705fb9e1 99 * @endcode
jimherd 1:190b705fb9e1 100 */
jimherd 0:e5b7c70254ac 101 class WattBob_TextLCD : public Stream {
jimherd 0:e5b7c70254ac 102
jimherd 0:e5b7c70254ac 103 public:
jimherd 1:190b705fb9e1 104 /** Create TextLCD object connected to a MCP23017 device
jimherd 1:190b705fb9e1 105 *
jimherd 1:190b705fb9e1 106 * @param port pointer to MCP23017 object
jimherd 1:190b705fb9e1 107 */
jimherd 1:190b705fb9e1 108 WattBob_TextLCD(MCP23017 *port);
jimherd 1:190b705fb9e1 109
jimherd 1:190b705fb9e1 110 /** Set cursor to a known point
jimherd 1:190b705fb9e1 111 *
jimherd 1:190b705fb9e1 112 * Virtual function for stream class
jimherd 1:190b705fb9e1 113 *
jimherd 1:190b705fb9e1 114 * @param row integer row number (0 or 1)
jimherd 1:190b705fb9e1 115 * @param col integer column number (0 or 15)
jimherd 1:190b705fb9e1 116 */
jimherd 0:e5b7c70254ac 117 virtual void locate(int row, int column);
jimherd 1:190b705fb9e1 118
jimherd 1:190b705fb9e1 119 /** clear display
jimherd 1:190b705fb9e1 120 *
jimherd 1:190b705fb9e1 121 * Virtual function for stream class
jimherd 1:190b705fb9e1 122 */
jimherd 1:190b705fb9e1 123 virtual void cls();
jimherd 1:190b705fb9e1 124
jimherd 1:190b705fb9e1 125 /** reset the display
jimherd 1:190b705fb9e1 126 *
jimherd 1:190b705fb9e1 127 * Virtual function for stream class
jimherd 1:190b705fb9e1 128 */
jimherd 0:e5b7c70254ac 129 virtual void reset();
jimherd 0:e5b7c70254ac 130
jimherd 0:e5b7c70254ac 131 protected:
jimherd 0:e5b7c70254ac 132
jimherd 1:190b705fb9e1 133 virtual int _putc(int c);
jimherd 1:190b705fb9e1 134 virtual int _getc();
jimherd 1:190b705fb9e1 135 virtual void newline();
jimherd 1:190b705fb9e1 136
jimherd 0:e5b7c70254ac 137 void clock();
jimherd 0:e5b7c70254ac 138 void writeData(int data);
jimherd 0:e5b7c70254ac 139 void writeCommand(int command);
jimherd 0:e5b7c70254ac 140 void writeByte(int value);
jimherd 0:e5b7c70254ac 141 void writeNibble(int value);
jimherd 0:e5b7c70254ac 142
jimherd 0:e5b7c70254ac 143 void _rs (int data);
jimherd 0:e5b7c70254ac 144 void _rw (int data);
jimherd 0:e5b7c70254ac 145 void _e (int data);
jimherd 0:e5b7c70254ac 146 void _d (int data);
jimherd 1:190b705fb9e1 147
jimherd 0:e5b7c70254ac 148 int _rows;
jimherd 0:e5b7c70254ac 149 int _columns;
jimherd 0:e5b7c70254ac 150 int _row;
jimherd 0:e5b7c70254ac 151 int _column;
jimherd 0:e5b7c70254ac 152
jimherd 0:e5b7c70254ac 153 private:
jimherd 0:e5b7c70254ac 154 MCP23017 *par_port;
jimherd 0:e5b7c70254ac 155 };
jimherd 0:e5b7c70254ac 156
jimherd 0:e5b7c70254ac 157 #endif