#include #include #include void LCD_init(void); void DelayUs(int Us); 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 DelayUs(5000); // Verzögerung LCD_init(); // LCD Initialisierung DelayUs(5000); // Verzögerung while(1) { LCD_cmd4(0x80); for(i=0;i<16;i++) { LCD_dat4(Msg1[i]); DelayUs(5000); } LCD_cmd4(0xc0); for(i=0;i<16;i++) { LCD_dat4(Msg2[i]); DelayUs(5000); } } } void LCD_init(void) { DelayUs(15000); // Verzögerung indestens 15Ms LCD_cmd4(0x3); // Interface auf 8-Bit setzen P8OUT = 0x04; // En = 1; DelayUs(1); // Verzögerung mindestens 1µs P8OUT = 0x00; // En = 0; DelayUs(5000); // Verzögerung mindestens 5Ms LCD_cmd4(0x3); // Interface auf 8-Bit setzen P8OUT = 0x04; // En = 1; DelayUs(1); // Verzögerung mindestens 1µs P8OUT = 0x00; // En = 0; DelayUs(5000); // Verzögerung mindestens 5Ms LCD_cmd4(0x3); // Interface auf 8-Bit setzen P8OUT = 0x04; // En = 1; DelayUs(1); // Verzögerung mindestens 1µs P8OUT = 0x00; // En = 0; DelayUs(5000); // Verzögerung mindestens 5Ms LCD_cmd4(0x2); // Interface auf 8-Bit setzen P8OUT = 0x04; // En = 1; DelayUs(1); // Verzögerung mindestens 1µs P8OUT = 0x00; // En = 0; DelayUs(5000); // Verzögerung mindestens 5Ms 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) //P8OUT = 0x04; // En = 1; //P8OUT = 0x00; // En = 0; P1OUT = PortwertA; // Variable gibt Inhalt an P1 P4OUT = PortwertB; // Variable gibt Inhalt an P4 P8OUT = 0x04; // 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) //P8OUT = 0x04; // En = 1; //P8OUT = 0x00; // En = 0; P1OUT = PortwertA; // Variable gibt Inhalt an P1 P4OUT = PortwertB; // Variable gibt Inhalt an P4 P8OUT = 0x04; // En = 1; P8OUT = 0x00; // En = 0; DelayUs(5000); // 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 = 0x04; // 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; DelayUs(5000); } void DelayUs(int Us) { int i; while(Us>0) { for(i=0;i<104;i++); Us--; } }