#include #include #include void LCD_init(void); void DelayMs(int Ms); void LCD_cmd4(unsigned char cmd); void LCD_dat4(unsigned char byte); unsigned char i; const unsigned char Msg1[] = "LCD Test"; const unsigned char Msg2[] = "MSP430"; void main() { WDTCTL = WDTPW + WDTHOLD // Stop Watchdog Timer P1DIR = 0x0C; // D4 und D5 bestimmen P3DIR = 0x80; // RS bestimmen P4DIR = 0x06; // D6 und D7 bestimmen P8DIR = 0x04; // EN bestimmen DelayMs(500); // Verzögerung LCD_init(); // LCD Initialisierung DelayMs(500); // Verzögerung while(1) { LCD_cmd4(0x80); for(i=0;i<16;i++) { LCD_dat4(Msg1[i]); DelayMs(5); } LCD_cmd4(0xc0); for(i=0;i<16;i++) { LCD_dat4(Msg2[i]); DelayMs(5); } } } void LCD_init(void) { DelayMs(15); // Verzögerung mindestens 15Ms LCD_cmd4(0x30); // Interface auf 8-Bit setzen DelayMs(5); // Verzögerung mindestens 5Ms LCD_cmd4(0x30); // Interface auf 8-Bit setzen DelayMs(5); // Verzögerung mindestens 100µs LCD_cmd4(0x30); // Interface auf 8-Bit setzen DelayMs(5); // Verzögerung mindestens 5Ms LCD_cmd4(0x20); // Umschaltbefehl von 8-Bit auf 4-Bit DelayMs(5); // Verzögerung mindestens 100µs LCD_cmd4(0x28); // 28 für 4 Bit mode LCD_cmd4(0x0F); // Schaltet das Display an LCD_cmd4(0x01); // Cursor bewegt sich nach rechts LCD_cmd4(0x06); // Löscht das Display } void LCD_cmd4(unsigned char cmd) { uint8_t PortwertA; // Variable deklarieren ohne Vorzeichen Integer 8-Bit Typ uint8_t PortwertB; // Variable deklarieren ohne Vorzeichen Integer 8-Bit Typ P3OUT = 0x00; // RS=0 cmd = (cmd & 0x0F); // Variable CMD wird mit oberen 4 Bits verändert PortwertA = 0; // Variable löschen PortwertB = 0; // Variable löschen if (cmd & (1 << 0)) // Bit 0 PortwertA |= (1 << 3); // Um 3 Stellen nach links verschieben (P1.3) if (cmd & (1 << 1)) // Bit 1 PortwertA |= (1 << 2); // Um 2 Stellen nach links verschieben (P1.2) if (cmd & (1 << 2)) // Bit 2 PortwertB |= (1 << 3); // Um 3 Stellen nach links verschieben (4.3) if (cmd & (1 << 3)) // Bit 3 PortwertB |= (1 << 0); // Um 0Stellen nach links verschieben (4.0) P1OUT = PortwertA; // Variable gibt Inhalt an P1 P4OUT = PortwertB; // Variable gibt Inhalt an P4 P8OUT = 0x80; // En = 1; P8OUT = 0x00; // En = 0; cmd = (cmd << 4) & 0xF0; // Variable CMD wird mit unteren 4 Bits verändertn PortwertA = 0; // Variable löschen PortwertB = 0; // Variable löschen if (cmd & (1 << 0)) // Bit 0 PortwertA |= (1 << 3); // Um 3 Stellen nach links verschieben (P1.3) if (cmd & (1 << 1)) // Bit 1 PortwertA |= (1 << 2); // Um 2 Stellen nach links verschieben (P1.2) if (cmd & (1 << 2)) // Bit 2 PortwertB |= (1 << 3); // Um 3 Stellen nach links verschieben (4.3) if (cmd & (1 << 3)) // Bit 3 PortwertB |= (1 << 0); // Um 0Stellen nach links verschieben (4.0) P1OUT = PortwertA; // Variable gibt Inhalt an P1 P4OUT = PortwertB; // Variable gibt Inhalt an P4 P8OUT = 0x80; // En = 1; P8OUT = 0x00; // En = 0; DelayMs(5); // Verzögerung } void LCD_dat4(unsigned char byte) { uint8_t PortwertA; // Variable deklarieren ohne Vorzeichen Integer 8-Bit Typ uint8_t PortwertB; // Variable deklarieren ohne Vorzeichen Integer 8-Bit Typ P3OUT = 0x80; // RS=1 byte = (byte & 0x0F); // Variable Byte wird mit oberen 4 Bits verändert PortwertA = 0; // Variable löschen PortwertB = 0; // Variable löschen if (byte & (1 << 0)) // Bit 0 PortwertA |= (1 << 3); // Um 3 Stellen nach links verschieben (P1.3) if (byte & (1 << 1)) // Bit 1 PortwertA |= (1 << 2); // Um 2 Stellen nach links verschieben (P1.2) if (byte & (1 << 2)) // Bit 2 PortwertB |= (1 << 3); // Um 3 Stellen nach links verschieben (4.3) if (byte & (1 << 3)) // Bit 3 PortwertB |= (1 << 0); // Um 0Stellen nach links verschieben (4.0) P1OUT = PortwertA; // Variable gibt Inhalt an P1 P4OUT = PortwertB; // Variable gibt Inhalt an P4 P8OUT = 0x80; // En = 1; P8OUT = 0x00; // En = 0; byte = (byte<<4) & 0xF0; // Variable Byte wird mit unteren 4 Bits verändertn PortwertA = 0; // Variable löschen PortwertB = 0; // Variable löschen if (byte & (1 << 0)) // Bit 0 PortwertA |= (1 << 3); // Um 3 Stellen nach links verschieben (P1.3) if (byte & (1 << 1)) // Bit 1 PortwertA |= (1 << 2); // Um 2 Stellen nach links verschieben (P1.2) if (byte & (1 << 2)) // Bit 2 PortwertB |= (1 << 3); // Um 3 Stellen nach links verschieben (4.3) if (byte & (1 << 3)) // Bit 3 PortwertB |= (1 << 0); // Um 0Stellen nach links verschieben (4.0) P1OUT = PortwertA; // Variable gibt Inhalt an P1 P4OUT = PortwertB; // Variable gibt Inhalt an P4 P8OUT = 0x04; // En = 1; P8OUT = 0x00; // En = 0; DelayMs(5); // Verzögerung } void DelayMs(int Ms) { int i; while(Ms>0) { for(i=0;i<104;i++); Ms--; } }