Knowledge Base Nr: 00202 lcdpanel.cpp - http://www.swe-kaiser.de

Downloads:

linux: lcd-panel/lcd-modul über rs232 ansteuern

  
//infos: www.conrad.de oder www.lcd-module.de

int hw_lcdPanelText(const char* lpszZeile1, const char* lpszZeile2)
{
const int ZEICHEN_PRO_ZEILE=16;
const char* lpszLCDport = "/dev/ttyS1";

int fd = open(lpszLCDport, O_RDWR | O_NONBLOCK | O_NOCTTY, 0);
if (fd < 0)
{
printf("Schnittstelle <%s> kann nicht geöffnet werden <%d>", lpszLCDport, fd);
return -1;
}

struct termios termio;
memset(&termio, 0, sizeof(termio));

//init: 9600,n,8,1
cfsetospeed(&termio,B9600);
cfsetispeed(&termio,B9600);

termio.c_cflag |= (CLOCAL|CREAD);
termio.c_cflag |= CS8;

tcsetattr(fd, TCSANOW, &termio);

//display loeschen
char buf[100];
buf[0] = 12; //FF
buf[1] = 0;

int nErr = write(fd, buf, strlen(buf));
if (nErr < 0)
{
printf("LCD Schreibfehler <%d> <%s>", nErr, buf);
return -2;
}

//zeile1 und zeile2 schreiben
memset(&buf, ' ', sizeof(buf));
buf[2*ZEICHEN_PRO_ZEILE] = 0;

for (int n=0; n<ZEICHEN_PRO_ZEILE; n++) //1.zeile
{
if (lpszZeile1[n] == 0)
break;
buf[n] = lpszZeile1[n];
}

for (int n=0; n<ZEICHEN_PRO_ZEILE; n++) //2.zeile
{
if (lpszZeile2[n] == 0)
break;
buf[ZEICHEN_PRO_ZEILE+n] = lpszZeile2[n];
}

printf("LCD schreiben <%s>", buf);
nErr = write(fd, buf, strlen(buf));
if (nErr < 0)
{
printf("LCD Schreibfehler <%d> <%s>", nErr, buf);
return -3;
}

close(fd);
return 0;
}