LCD-Library
Dependents: Projekt_Wecker_LCD Projekt_Wecker_LCD Projekt_Wecker_LCD
LCD.cpp
- Committer:
- wolpra98
- Date:
- 2015-04-30
- Revision:
- 0:b25367985a15
File content as of revision 0:b25367985a15:
#include "mbed.h" #include "LCD.h" LCD::LCD(PinName RS, PinName EN, PinName DB4, PinName DB5, PinName DB6, PinName DB7){ _rs = RS; _en = EN; _db4 = DB4; _db5 = DB5; _db6 = DB6; _db7 = DB7; DigitalOut rs(RS); DigitalOut en(EN); BusOut db(DB4, DB5, DB6, DB7); // warten auf die Bereitschaft des LCD wait_ms( LCD_BOOTUP_MS ); // Soft-Reset muss 3mal hintereinander gesendet werden zur Initialisierung out( LCD_SOFT_RESET ); wait_ms( LCD_SOFT_RESET_MS1 ); enable(); wait_ms( LCD_SOFT_RESET_MS2 ); enable(); wait_ms( LCD_SOFT_RESET_MS3 ); // 4-bit Modus aktivieren out( LCD_SET_FUNCTION | LCD_FUNCTION_4BIT ); wait_ms( LCD_SET_4BITMODE_MS ); // 4-bit Modus / 2 Zeilen / 5x7 command( LCD_SET_FUNCTION | LCD_FUNCTION_4BIT | LCD_FUNCTION_2LINE | LCD_FUNCTION_5X7 ); // Display ein / Cursor aus / Blinken aus command( LCD_SET_DISPLAY | LCD_DISPLAY_ON | LCD_CURSOR_ON | LCD_BLINKING_OFF); // Cursor inkrement / kein Scrollen command( LCD_SET_ENTRY | LCD_ENTRY_INCREASE | LCD_ENTRY_NOSHIFT ); clear(); }; void LCD::clear(void){ command(LCD_CLEAR_DISPLAY ); wait_ms( LCD_CLEAR_DISPLAY_MS ); }; void LCD::home(void){ command( LCD_CURSOR_HOME ); wait_ms( LCD_CURSOR_HOME_MS ); } void LCD::data(unsigned char data){ DigitalOut rs(_rs); rs = 1; // RS auf 1 setzen out(data>>4); // zuerst die oberen, out(data); // dann die unteren 4 Bit senden wait_us( LCD_WRITEDATA_US ); } // Schreibt einen String auf das LCD void LCD::string(const char *data){ while( *data != '\0' ) LCD::data( *data++ ); } // Setzt den Cursor in Spalte x (0..15) Zeile y (1..4) void LCD::setcursor(unsigned char x, unsigned char y ) { unsigned char data; switch (y) { case 1: // 1. Zeile data = LCD_SET_DDADR + LCD_DDADR_LINE1 + x; break; case 2: // 2. Zeile data = LCD_SET_DDADR + LCD_DDADR_LINE2 + x; break; case 3: // 3. Zeile data = LCD_SET_DDADR + LCD_DDADR_LINE3 + x; break; case 4: // 4. Zeile data = LCD_SET_DDADR + LCD_DDADR_LINE4 + x; break; default: return; // für den Fall einer falschen Zeile } command(data); } void LCD::out(unsigned char data){ BusOut db(_db4, _db5, _db6, _db7); db = data; // Bits setzen enable(); }; void LCD::enable(){ DigitalOut en(_en); en = 1; wait_us( LCD_ENABLE_US ); // kurze Pause en = 0; }; void LCD::command(unsigned char data){ DigitalOut rs(_rs); // RS auf 0 setzen rs = 0; out(data>>4); // zuerst die oberen, out(data); // dann die unteren 4 Bit senden wait_us( LCD_COMMAND_US ); };