cycyy

Dependencies:   MCP23017 WattBob_TextLCD

Committer:
mihaidd
Date:
Wed May 08 03:58:47 2019 +0000
Revision:
0:a9b4ee4ed395
ccc

Who changed what in which revision?

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