PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Quellcode für LCD mit HD44780 gefunden...



KurtM
18.12.2004, 19:08
Liebe Community!
gestern habe ich ein Frage über LCD Steuerung gestellt aber keine hat sich bis jetzt gemeldet. Natürlich habe ich dann weiter ein Source Code gesucht und gefunden...
Das Problem ist, daß diese Source Code bei mir nicht funktioniert. Obwohl er validiert sein soll, ich sehe aber noch nicht mal ein Lebenszeichen aus meinem LCD-Display. Ich habe alle Anschlüsse mehrmals kontrolliert... Das Display ist nagel neu... Wo ist das Problem? Ist etwa mein Display kaputt oder gibt es irgendein Problem in der Software?
Übrigens, ich benutze ein SAB80C537 Board mit 12 MHz Oszillator. Der Code sieht so aus;


/* =============== 2L_x_16C_TEST=============*/
/*====== Brief Description of program =======*/
/* Program to test out a 2 line LCD
on 0803 PCB. It also toggles a LED.
Code compiled and checked OK
on hardware. - 12 Nov 2004: 5.00PM */

/*==============Include Files ===============*/
#include <reg52.h>
#include <string.h>

/*============== Type Defines ================*/
typedef unsigned char tChar;
typedef unsigned int tInt;
typedef unsigned long tLong;

/*============== Bit Defines =================*/
sfr P4 = 0xe8;
sbit LCD_RS = P4^0;
sbit LCD_R_W = P4^1;
sbit LCD_ENB = P4^2;

sbit TST_LED = P3^0;
bit FLG_CPL;

/*==========Function Prototypes ==============*/
void ready(void);
void command(tChar);
void display(tChar *);
void msDelay(tInt);

/*================== MAIN ====================*/
void main(void)
{
msDelay(3);
command(0x38);
msDelay(1);
command(0x38);
msDelay(1);
command(0x38);
msDelay(1);
command(0x0c);
command(0x01);
msDelay(5);

display("TEST");

while(1)
{
msDelay(10);
if (FLG_CPL == 1) // Toggle test LED
{
FLG_CPL = 0;
TST_LED = 0;
}
else
{
FLG_CPL = 1;
TST_LED = 1;
}
}
}

/*===============COMMAND=========================== ===*/
void command(tChar cmd)
{
ready();
P1 = cmd;

LCD_RS = 0;
LCD_R_W = 0;
LCD_ENB = 1;
msDelay(2);
LCD_ENB = 0;
}

/*================READY============================ =*/
void ready(void)
{
msDelay(1);
}

/*================DISPLAY========================== ====*/
void display(tChar *msg)
{
tInt count;
for (count=0; count <= strlen(msg)-1; ++count)
{
if(count == 16)
command(0xc0);
ready();
P1 = msg[count];
LCD_RS = 1;
LCD_R_W = 0;
LCD_ENB = 1;
msDelay(1);
LCD_ENB = 0;
}
}

/*==================MSDELAY======================== =====*/
void msDelay(tInt msec)
{
tInt cntr_1, cntr_2;
for (cntr_1 = 0; cntr_1 <= msec; ++cntr_1 )
{
for ( cntr_2 = 0; cntr_2 <= 5000; ++cntr_2);
}
}

Vielen Dank im Voraus
Grüße

KurtM

Michael
18.12.2004, 21:47
Hallo KurtM,


Obwohl er validiert sein soll, ich sehe aber noch nicht mal ein Lebenszeichen aus meinem LCD-Display.

das wird es sein.
Wenn du gar nichts siehst, solltest du die Kontrastspannung überprüfen, es gibt Displays, die hier eine negative Spannung brauchen.
Wenn gleich nach dem Einschalten ein schwarzer Balken in der 1.Zeile erscheint, ist zumindest die Kontrastspannung in Ordnung.
Gruß, Michael

19.12.2004, 14:02
Hallo Michael,
danke danke danke... Da Problem ist genau das, was du gesagt hast. Jetzt ist es aber endlich erledigt....
Grüße
KurtM

Toastbrot
25.12.2004, 09:54
Ich habe auch mehrere solcher Displays, allerdings in der Größe 20*4. Außerdem habe ich die am PC angeschlossen. Wie kann ich so ein Teil z.B. an RN-Control (geht das überhaupt?) oder per I2C ansteuern?

Ein Schaltplan wäre ideal ;) Danke & noch frohe Weihnachten