Gast
#4199250
Hallo,
ich habe einen MSP EXP430F5529 und möchte gerne damit einen 2x16 LCD
(PCB-BT10809) ansteuern. Die Verdrahtung habe ich soweit vorgenommen und
als Beispeilcode, war dieser hier mitgeliefert worden.
Mein Display hängt an folgenden Ports vom MSP:
D0-D3 frei
D4 ->P1.3
D5 ->P1.2
D6 ->P4.3
D7 ->P4.0
R/S ->P3.7
E ->P8.2
R/W ->P1.6
Das Problem ist, das Display zeigt nichts an.
Liegt es an den Ports?
Müssen die im Programm geändert warden?
#include <msp430x552x.h>
#include <stdio.h>
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[] = " 16x2 LCD Test... ";
const unsigned char Msg2[] = " F2812 EVB BOARD ";
void main()
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P7DIR = 0xF0; // Set P7.4-P7.7 to Output
direction
P5DIR = 0xC0;
P4DIR = 0x80;
DelayMs(100);
LCD_init();
DelayMs(50);
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)
{
LCD_cmd4(0x33); LCD_cmd4(0x22); LCD_cmd4(0x22); LCD_cmd4(0x22);
LCD_cmd4(0x28); // 28 for four bit mode
LCD_cmd4(0x0c);
LCD_cmd4(0x06);
LCD_cmd4(0x01);
}
void LCD_cmd4(unsigned char cmd)
{
P5OUT = 0x00; // RW=0,RS=0
P7OUT = cmd;
P4OUT = 0x80; // En = 1;
P4OUT = 0x00; // En = 0;
cmd = (cmd<<4) & 0xF0;
P7OUT = cmd;
P4OUT = 0x80; // En = 1;
P4OUT = 0x00; // En = 0;
DelayMs(3);
}
void LCD_dat4(unsigned char byte)
{
P5OUT = 0x80; // RW=0,RS=0
P7OUT = byte;
P4OUT = 0x80; // En = 1;
P4OUT = 0x00; // En = 0;
byte = (byte<<4) & 0xF0;
P7OUT = byte;
P4OUT = 0x80; // En = 1;
P4OUT = 0x00; // En = 0;
DelayMs(3);
}
void DelayMs(int Ms)
{
int i;
while(Ms>0)
{
for(i=0;i<104;i++);
Ms--;
}
}