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
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