Erik Kerger / NewTextLCD

Dependents:   tuner Base_Hybrid_V3 Base_Hybrid_V2 base_rekam_darurat_v1 ... more

Committer:
erik_kedo
Date:
Mon Feb 28 17:13:47 2011 +0000
Revision:
0:9bdcc985b306
0.9

Who changed what in which revision?

UserRevisionLine numberNew contents of line
erik_kedo 0:9bdcc985b306 1 /* mbed TextLCD Library, for a 4-bit LCD based on HD44780
erik_kedo 0:9bdcc985b306 2 * Copyright (c) 2007-2010, sford, http://mbed.org
erik_kedo 0:9bdcc985b306 3 *
erik_kedo 0:9bdcc985b306 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
erik_kedo 0:9bdcc985b306 5 * of this software and associated documentation files (the "Software"), to deal
erik_kedo 0:9bdcc985b306 6 * in the Software without restriction, including without limitation the rights
erik_kedo 0:9bdcc985b306 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
erik_kedo 0:9bdcc985b306 8 * copies of the Software, and to permit persons to whom the Software is
erik_kedo 0:9bdcc985b306 9 * furnished to do so, subject to the following conditions:
erik_kedo 0:9bdcc985b306 10 *
erik_kedo 0:9bdcc985b306 11 * The above copyright notice and this permission notice shall be included in
erik_kedo 0:9bdcc985b306 12 * all copies or substantial portions of the Software.
erik_kedo 0:9bdcc985b306 13 *
erik_kedo 0:9bdcc985b306 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
erik_kedo 0:9bdcc985b306 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
erik_kedo 0:9bdcc985b306 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
erik_kedo 0:9bdcc985b306 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
erik_kedo 0:9bdcc985b306 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
erik_kedo 0:9bdcc985b306 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
erik_kedo 0:9bdcc985b306 20 * THE SOFTWARE.
erik_kedo 0:9bdcc985b306 21 */
erik_kedo 0:9bdcc985b306 22
erik_kedo 0:9bdcc985b306 23 #ifndef MBED_TEXTLCD_H
erik_kedo 0:9bdcc985b306 24 #define MBED_TEXTLCD_H
erik_kedo 0:9bdcc985b306 25
erik_kedo 0:9bdcc985b306 26 #include "mbed.h"
erik_kedo 0:9bdcc985b306 27
erik_kedo 0:9bdcc985b306 28 /** A TextLCD interface for driving 4-bit HD44780-based LCDs
erik_kedo 0:9bdcc985b306 29 *
erik_kedo 0:9bdcc985b306 30 * Currently supports 16x2, 20x2 and 20x4 panels
erik_kedo 0:9bdcc985b306 31 *
erik_kedo 0:9bdcc985b306 32 * @code
erik_kedo 0:9bdcc985b306 33 * #include "mbed.h"
erik_kedo 0:9bdcc985b306 34 * #include "NewTextLCD.h"
erik_kedo 0:9bdcc985b306 35 *
erik_kedo 0:9bdcc985b306 36 * TextLCD lcd(p10, p12, p13, p15, p16, p29, p30); // rs, e, d0-d3
erik_kedo 0:9bdcc985b306 37 *
erik_kedo 0:9bdcc985b306 38 * int main() {
erik_kedo 0:9bdcc985b306 39 * lcd.printf("Hello mbed\n");
erik_kedo 0:9bdcc985b306 40 *
erik_kedo 0:9bdcc985b306 41 * //define user chars
erik_kedo 0:9bdcc985b306 42 * int pattern[8];
erik_kedo 0:9bdcc985b306 43 * int pattern1[8];
erik_kedo 0:9bdcc985b306 44 * pattern[0] = 1; // *
erik_kedo 0:9bdcc985b306 45 * pattern[1] = 3; // **
erik_kedo 0:9bdcc985b306 46 * pattern[2] = 5; // * *
erik_kedo 0:9bdcc985b306 47 * pattern[3] = 9; // * *
erik_kedo 0:9bdcc985b306 48 * pattern[4] = 0x11; // * *
erik_kedo 0:9bdcc985b306 49 * pattern[5] = 0x19; // ** *
erik_kedo 0:9bdcc985b306 50 * pattern[6] = 0x1d; // *** *
erik_kedo 0:9bdcc985b306 51 * pattern[7] = 0x1f; // *****
erik_kedo 0:9bdcc985b306 52 *
erik_kedo 0:9bdcc985b306 53 * pattern1[0] = 0x10; // *
erik_kedo 0:9bdcc985b306 54 * pattern1[1] = 0x18; // **
erik_kedo 0:9bdcc985b306 55 * pattern1[2] = 0x14; // * *
erik_kedo 0:9bdcc985b306 56 * pattern1[3] = 0x12; // * *
erik_kedo 0:9bdcc985b306 57 * pattern1[4] = 0x11; // * *
erik_kedo 0:9bdcc985b306 58 * pattern1[5] = 0x13; // * **
erik_kedo 0:9bdcc985b306 59 * pattern1[6] = 0x17; // * ***
erik_kedo 0:9bdcc985b306 60 * pattern1[7] = 0x1f; // *****
erik_kedo 0:9bdcc985b306 61 *
erik_kedo 0:9bdcc985b306 62 * lcd.writeCGRAM(0, pattern);
erik_kedo 0:9bdcc985b306 63 * lcd.writeCGRAM(1, pattern1);
erik_kedo 0:9bdcc985b306 64 *
erik_kedo 0:9bdcc985b306 65 * lcd.locate(15,0);
erik_kedo 0:9bdcc985b306 66 * lcd.putc(0); // user pattern 0
erik_kedo 0:9bdcc985b306 67 * lcd.putc(1); // user pattern 1
erik_kedo 0:9bdcc985b306 68 * }
erik_kedo 0:9bdcc985b306 69 * @endcode
erik_kedo 0:9bdcc985b306 70 */
erik_kedo 0:9bdcc985b306 71 class TextLCD : public Stream {
erik_kedo 0:9bdcc985b306 72 public:
erik_kedo 0:9bdcc985b306 73
erik_kedo 0:9bdcc985b306 74 /** LCD panel format */
erik_kedo 0:9bdcc985b306 75 enum LCDType {
erik_kedo 0:9bdcc985b306 76 LCD16x2 /**< 16x2 LCD panel (default) */
erik_kedo 0:9bdcc985b306 77 , LCD16x2B /**< 16x2 LCD panel alternate addressing */
erik_kedo 0:9bdcc985b306 78 , LCD20x2 /**< 20x2 LCD panel */
erik_kedo 0:9bdcc985b306 79 , LCD20x4 /**< 20x4 LCD panel */
erik_kedo 0:9bdcc985b306 80 , LCD24x2 /**< 24x2 LCD panel */
erik_kedo 0:9bdcc985b306 81 , LCDuser /** User defined LCD, rows/columns must be set */
erik_kedo 0:9bdcc985b306 82 };
erik_kedo 0:9bdcc985b306 83
erik_kedo 0:9bdcc985b306 84 /** Create a TextLCD interface
erik_kedo 0:9bdcc985b306 85 *
erik_kedo 0:9bdcc985b306 86 * @param rs Instruction/data control line
erik_kedo 0:9bdcc985b306 87 * @param e Enable line (clock)
erik_kedo 0:9bdcc985b306 88 * @param d4-d7 Data lines
erik_kedo 0:9bdcc985b306 89 * @param type Sets the panel size/addressing mode (default = LCD16x2)
erik_kedo 0:9bdcc985b306 90 */
erik_kedo 0:9bdcc985b306 91 TextLCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7, LCDType type = LCD16x2);
erik_kedo 0:9bdcc985b306 92
erik_kedo 0:9bdcc985b306 93 #if DOXYGEN_ONLY
erik_kedo 0:9bdcc985b306 94 /** Write a character to the LCD
erik_kedo 0:9bdcc985b306 95 *
erik_kedo 0:9bdcc985b306 96 * @param c The character to write to the display
erik_kedo 0:9bdcc985b306 97 */
erik_kedo 0:9bdcc985b306 98 int putc(int c);
erik_kedo 0:9bdcc985b306 99
erik_kedo 0:9bdcc985b306 100 /** Write a formated string to the LCD
erik_kedo 0:9bdcc985b306 101 *
erik_kedo 0:9bdcc985b306 102 * @param format A printf-style format string, followed by the
erik_kedo 0:9bdcc985b306 103 * variables to use in formating the string.
erik_kedo 0:9bdcc985b306 104 */
erik_kedo 0:9bdcc985b306 105 int printf(const char* format, ...);
erik_kedo 0:9bdcc985b306 106 #endif
erik_kedo 0:9bdcc985b306 107
erik_kedo 0:9bdcc985b306 108 /** Locate to a screen column and row
erik_kedo 0:9bdcc985b306 109 *
erik_kedo 0:9bdcc985b306 110 * @param column The horizontal position from the left, indexed from 0
erik_kedo 0:9bdcc985b306 111 * @param row The vertical position from the top, indexed from 0
erik_kedo 0:9bdcc985b306 112 */
erik_kedo 0:9bdcc985b306 113 void locate(int column, int row);
erik_kedo 0:9bdcc985b306 114
erik_kedo 0:9bdcc985b306 115 /** Clear the screen and locate to 0,0 */
erik_kedo 0:9bdcc985b306 116 void cls();
erik_kedo 0:9bdcc985b306 117
erik_kedo 0:9bdcc985b306 118 struct LCDparam {
erik_kedo 0:9bdcc985b306 119 int rows; // number of lines //
erik_kedo 0:9bdcc985b306 120 int columns; // number of columns //
erik_kedo 0:9bdcc985b306 121 int delay; // delay for commands microseconds //
erik_kedo 0:9bdcc985b306 122 int adresses[4]; // start adresses for 4 lines //
erik_kedo 0:9bdcc985b306 123 } LCDparam;
erik_kedo 0:9bdcc985b306 124
erik_kedo 0:9bdcc985b306 125 /** write a user defined char
erik_kedo 0:9bdcc985b306 126 *
erik_kedo 0:9bdcc985b306 127 * @param address The user defined char (0-7)
erik_kedo 0:9bdcc985b306 128 * @param pattern[8] bit pattern 5*8 of char
erik_kedo 0:9bdcc985b306 129 */
erik_kedo 0:9bdcc985b306 130 void writeCGRAM(int address, int pattern[8]);
erik_kedo 0:9bdcc985b306 131
erik_kedo 0:9bdcc985b306 132 /** Get the char at the current position
erik_kedo 0:9bdcc985b306 133 *
erik_kedo 0:9bdcc985b306 134 * int getc()
erik_kedo 0:9bdcc985b306 135 */
erik_kedo 0:9bdcc985b306 136 void writeCommand(int command);
erik_kedo 0:9bdcc985b306 137
erik_kedo 0:9bdcc985b306 138 protected:
erik_kedo 0:9bdcc985b306 139
erik_kedo 0:9bdcc985b306 140 // Stream implementation functions
erik_kedo 0:9bdcc985b306 141 virtual int _putc(int value);
erik_kedo 0:9bdcc985b306 142 virtual int _getc();
erik_kedo 0:9bdcc985b306 143
erik_kedo 0:9bdcc985b306 144 int address(int column, int row);
erik_kedo 0:9bdcc985b306 145 void character(int column, int row, int c);
erik_kedo 0:9bdcc985b306 146 void writeByte(int value);
erik_kedo 0:9bdcc985b306 147 void writeData(int data);
erik_kedo 0:9bdcc985b306 148 void setLCDparam(LCDType _type);
erik_kedo 0:9bdcc985b306 149 DigitalOut _rs, _e;
erik_kedo 0:9bdcc985b306 150 BusOut _d;
erik_kedo 0:9bdcc985b306 151 LCDType _type;
erik_kedo 0:9bdcc985b306 152
erik_kedo 0:9bdcc985b306 153 int _column;
erik_kedo 0:9bdcc985b306 154 int _row;
erik_kedo 0:9bdcc985b306 155 };
erik_kedo 0:9bdcc985b306 156
erik_kedo 0:9bdcc985b306 157 #endif