TextLCD library for controlling various LCD panels based on the HD44780 4-bit interface. adapted for winstar oled display by CJS august 2012. Moved some functions into public class to enable custom character generation from user code.

Dependents:   CCRMonitor12_sp07_120ver

Fork of TextLCD by Simon Ford

Committer:
pegcjs
Date:
Tue Aug 07 11:32:45 2012 +0000
Revision:
10:8e272a434581
Parent:
TextLCD.h@9:c1ad3961696d
Child:
11:25a700bce989
TextLCD library modified to allow acees to low level commands for defining custom characters and to drive winstar 16x2 OLED. Seems that this can become corrupted unless it is powered down before use. will try running it from a digital output pin...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 1:ac48b187213c 1 /* mbed TextLCD Library, for a 4-bit LCD based on HD44780
simon 6:e4cb7ddee0d3 2 * Copyright (c) 2007-2010, sford, http://mbed.org
simon 1:ac48b187213c 3 *
simon 1:ac48b187213c 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
simon 1:ac48b187213c 5 * of this software and associated documentation files (the "Software"), to deal
simon 1:ac48b187213c 6 * in the Software without restriction, including without limitation the rights
simon 1:ac48b187213c 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
simon 1:ac48b187213c 8 * copies of the Software, and to permit persons to whom the Software is
simon 1:ac48b187213c 9 * furnished to do so, subject to the following conditions:
simon 2:227356c7d12c 10 *
simon 1:ac48b187213c 11 * The above copyright notice and this permission notice shall be included in
simon 1:ac48b187213c 12 * all copies or substantial portions of the Software.
simon 2:227356c7d12c 13 *
simon 1:ac48b187213c 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
simon 1:ac48b187213c 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
simon 1:ac48b187213c 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
simon 1:ac48b187213c 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
simon 1:ac48b187213c 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
simon 1:ac48b187213c 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
simon 1:ac48b187213c 20 * THE SOFTWARE.
simon 1:ac48b187213c 21 */
simon 1:ac48b187213c 22
simon 1:ac48b187213c 23 #ifndef MBED_TEXTLCD_H
simon 1:ac48b187213c 24 #define MBED_TEXTLCD_H
simon 1:ac48b187213c 25
simon 1:ac48b187213c 26 #include "mbed.h"
simon 2:227356c7d12c 27
simon 5:a53b3e2d6f1e 28 /** A TextLCD interface for driving 4-bit HD44780-based LCDs
simon 2:227356c7d12c 29 *
simon 5:a53b3e2d6f1e 30 * Currently supports 16x2, 20x2 and 20x4 panels
simon 2:227356c7d12c 31 *
simon 2:227356c7d12c 32 * @code
simon 2:227356c7d12c 33 * #include "mbed.h"
simon 2:227356c7d12c 34 * #include "TextLCD.h"
simon 5:a53b3e2d6f1e 35 *
simon 7:44f34c09bd37 36 * TextLCD lcd(p10, p12, p15, p16, p29, p30); // rs, e, d4-d7
simon 5:a53b3e2d6f1e 37 *
simon 2:227356c7d12c 38 * int main() {
simon 2:227356c7d12c 39 * lcd.printf("Hello World!\n");
simon 2:227356c7d12c 40 * }
simon 2:227356c7d12c 41 * @endcode
simon 2:227356c7d12c 42 */
simon 1:ac48b187213c 43 class TextLCD : public Stream {
simon 1:ac48b187213c 44 public:
pegcjs 9:c1ad3961696d 45 void writeCommand(int command);
pegcjs 9:c1ad3961696d 46 void writeData(int data);
pegcjs 9:c1ad3961696d 47 void character(int column, int row, int c);
pegcjs 9:c1ad3961696d 48
simon 2:227356c7d12c 49 /** LCD panel format */
simon 1:ac48b187213c 50 enum LCDType {
simon 2:227356c7d12c 51 LCD16x2 /**< 16x2 LCD panel (default) */
simon 2:227356c7d12c 52 , LCD16x2B /**< 16x2 LCD panel alternate addressing */
simon 2:227356c7d12c 53 , LCD20x2 /**< 20x2 LCD panel */
simon 2:227356c7d12c 54 , LCD20x4 /**< 20x4 LCD panel */
simon 1:ac48b187213c 55 };
simon 1:ac48b187213c 56
simon 2:227356c7d12c 57 /** Create a TextLCD interface
simon 2:227356c7d12c 58 *
simon 2:227356c7d12c 59 * @param rs Instruction/data control line
simon 2:227356c7d12c 60 * @param e Enable line (clock)
simon 7:44f34c09bd37 61 * @param d4-d7 Data lines for using as a 4-bit interface
simon 2:227356c7d12c 62 * @param type Sets the panel size/addressing mode (default = LCD16x2)
simon 2:227356c7d12c 63 */
simon 7:44f34c09bd37 64 TextLCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7, LCDType type = LCD16x2);
simon 2:227356c7d12c 65
simon 2:227356c7d12c 66 #if DOXYGEN_ONLY
simon 2:227356c7d12c 67 /** Write a character to the LCD
simon 2:227356c7d12c 68 *
simon 2:227356c7d12c 69 * @param c The character to write to the display
simon 2:227356c7d12c 70 */
simon 2:227356c7d12c 71 int putc(int c);
simon 2:227356c7d12c 72
simon 2:227356c7d12c 73 /** Write a formated string to the LCD
simon 2:227356c7d12c 74 *
simon 2:227356c7d12c 75 * @param format A printf-style format string, followed by the
simon 2:227356c7d12c 76 * variables to use in formating the string.
simon 2:227356c7d12c 77 */
simon 2:227356c7d12c 78 int printf(const char* format, ...);
simon 2:227356c7d12c 79 #endif
simon 2:227356c7d12c 80
simon 2:227356c7d12c 81 /** Locate to a screen column and row
simon 2:227356c7d12c 82 *
simon 2:227356c7d12c 83 * @param column The horizontal position from the left, indexed from 0
simon 2:227356c7d12c 84 * @param row The vertical position from the top, indexed from 0
simon 2:227356c7d12c 85 */
simon 1:ac48b187213c 86 void locate(int column, int row);
simon 2:227356c7d12c 87
simon 2:227356c7d12c 88 /** Clear the screen and locate to 0,0 */
simon 1:ac48b187213c 89 void cls();
simon 2:227356c7d12c 90
simon 1:ac48b187213c 91 int rows();
simon 2:227356c7d12c 92 int columns();
simon 2:227356c7d12c 93
simon 1:ac48b187213c 94 protected:
simon 1:ac48b187213c 95
simon 1:ac48b187213c 96 // Stream implementation functions
simon 1:ac48b187213c 97 virtual int _putc(int value);
simon 1:ac48b187213c 98 virtual int _getc();
simon 1:ac48b187213c 99
simon 2:227356c7d12c 100 int address(int column, int row);
pegcjs 9:c1ad3961696d 101 //void character(int column, int row, int c);
simon 1:ac48b187213c 102 void writeByte(int value);
pegcjs 9:c1ad3961696d 103
simon 1:ac48b187213c 104
simon 1:ac48b187213c 105 DigitalOut _rs, _e;
simon 1:ac48b187213c 106 BusOut _d;
simon 1:ac48b187213c 107 LCDType _type;
simon 1:ac48b187213c 108
simon 1:ac48b187213c 109 int _column;
simon 1:ac48b187213c 110 int _row;
simon 1:ac48b187213c 111 };
simon 1:ac48b187213c 112
simon 1:ac48b187213c 113 #endif