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

Dependents:   Assignment_2_herpe Final_V1 ass2 ass2 ... more

WattBob_TextLCD.h

Committer:
jimherd
Date:
2011-12-11
Revision:
9:3b26cd028e85
Parent:
8:5a1c4254e4a6

File content as of revision 9:3b26cd028e85:

/* draft mbed TextLCD 
 * (c) 2007/8, sford
 */
 
#ifndef WATTBOB_TEXTLCD_H
#define WATTBOB_TEXTLCD_H

#include "mbed.h"
#include "Stream.h"
#include "MCP23017.h"

#define     RS_BIT      7
#define     RW_BIT      6
#define     E_BIT       5
#define     BL_BIT      4   

//
// Registers and bit definitions for 2*16 character display chip
//
#define     CMD_NULL                0x00

#define     CMD_CLEAR_DISPLAY       0x01

#define     CMD_RETURN_HOME         0x02

#define     CMD_ENTRY_MODE          0x04
#define       CURSOR_STEP_LEFT      0x00
#define       CURSOR_STEP_RIGHT     0x02
#define       DISPLAY_SHIFT_OFF     0x00
#define       DISPLAY_SHIFT_ON      0x01
       
#define     CMD_DISPLAY_CONTROL     0x08
#define       DISPLAY_OFF           0x00
#define       DISPLAY_ON            0x04
#define       CURSOR_OFF            0x00
#define       CURSOR_ON             0x02
#define       CURSOR_CHAR_BLINK_OFF 0x00
#define       CURSOR_CHAR_BLINK_ON  0x01

#define     CMD_CURSOR_SHIFT        0x10
#define       SHIFT_CURSOR_LEFT     0x00
#define       SHIFT_CURSOR_RIGHT    0x04
#define       SHIFT_DISPLAY_LEFT    0x08
#define       SHIFT_DISPLAY_RIGHT   0x0C

#define     CMD_MODE_POWER          0x13
#define       CHARACTER_MODE        0x00
#define       GRAPHICS_MODE         0x08
#define       INTERNAL_POWER_OFF    0x00
#define       INTERNAL_POWER_ON     0x04

#define     CMD_FUNCTION_SET        0x20
#define       ENGL_JAPAN_FONT_SET   0x00
#define       EUROPE_FONT_SET       0x01
#define       ENGL_RUSSIAN_FONT_SET 0x20
#define       FONT_5x8              0x00
#define       FONT_5x10             0x04
#define       ONE_LINE_DISPLAY      0x00
#define       TWO_LINE_DISPLAY      0x08
#define       INTERFACE_4_BIT       0x00
#define       INTERFACE_8_BIT       0x10

#define     CMD_SET_CGRAM_ADDRESS   0x40

#define     CMD_SET_DDRAM_ADDRESS   0x80
//
// nibble commands
//
#define     CMD4_SET_4_BIT_INTERFACE 0x2
#define     CMD4_SET_8_BIT_INTERFACE 0x3
//
// Misc 2*16 character display constants
//
#define     DISPLAY_INIT_DELAY_SECS    0.5f       // 500mS
#define     DISPLAY_CLEAR_DELAY        0.01f      // 10 mS (spec is 6.2mS)

/** Class to access 16*2 LCD display connected to an MCP23017 I/O extender chip
 *
 * Derived from the "stream" class to be able to use methods such as "printf"
 *
 * Example :
 * @code
 * .....
 * #include "MCP23017.h"
 * #include "WattBob_TextLCD.h"
 * .....
 * MCP23017            *par_port;
 * WattBob_TextLCD     *lcd;
 *      .....
 * int main()
 *      par_port = new MCP23017(p9, p10, 0x40);
 *      par_port->config(0x0F00, 0x0F00, 0x0F00);           // configure MCP23017 chip on WattBob       
 *      lcd = new WattBob_TextLCD(par_port);
 *
 *      par_port->write_bit(1,BL_BIT);   // turn LCD backlight ON
 *      lcd->cls(); lcd->locate(0,0);
 *      lcd->printf("%s", message);
 *      lcd->locate(1,0);lcd->printf("press 1 to cont"); 
 * @endcode
 */ 
class WattBob_TextLCD : public Stream {

public:
    /** Create TextLCD object connected to a MCP23017 device
     *
     * @param   port    pointer to MCP23017 object
     */ 
    WattBob_TextLCD(MCP23017 *port);
    
    /** Set cursor to a known point
     *
     * Virtual function for stream class
     *
     * @param   row   integer row number (0 or 1)
     * @param   col   integer column number (0 or 15)     
     */            
    virtual void locate(int row, int column);
    
    /** clear display
     *
     * Virtual function for stream class
     */     
    virtual void cls();

    /** reset the display
     *
     * Virtual function for stream class
     */             
    virtual void reset();
        
protected:

    virtual int _putc(int c);        
    virtual int _getc();
    virtual void newline();      
    
    void clock();
    void writeData(int data);
    void writeCommand(int command);
    void writeByte(int value);
    void writeNibble(int value);
    
    void _rs (int data);
    void _rw (int data);    
    void _e (int data);
    void _d (int data);
           
    int _rows;
    int _columns;
    int _row;
    int _column;   
    
private:
    MCP23017    *par_port; 
};

#endif