Gast
#220211
Hallo Zusammen,
hier ist ein Stück eines Programmes die ich verstehen will aber
schwierigkeiten habe. Mein Problem liegt daran, ich verstehe nicht
warum er für die Funktionen clear_display: P0=0x01, shift_links:
P0=0x10, shift_recht: P0=0x14, return_home: P0=0x02 und ausgabe: P0=aus
hinschreibt?
void init_display(void) // Display initialisieren
{
char i=0; // Hilfsvariable
// Array für Grundeinstellung
unsigned char array[7]={0x30,0x30,0x30,0x30,0x0e,0x01,0x06};
pause(1500); // Warten >15ms
for(i=0;i<7;i++) // Schleife für Initialisierung
{
P2_7=1; // Enable auf 1 setzen
P2_5=0; // RS auf Code Input
P2_6=0; // R/W auf Write
pause(500); // Warten >4.1ms
P0=array[i]; // Daten an LCD anlegen
pause(120); // Warten >450ns
P2_7=0; // Enable auf 0 setzen
pause(120); // Warten >450ns
}
}
void intro (void) // Intro schreiben
{
unsigned char i; // Hilfsvariable
unsigned char intro[16]={"Arbeit"} @ xdata;
for(i=0;i<16;i++)
ausgabe (intro[i]); // Ausgabe Intro
pause(150000); // Pause für Intro-Anzeige
}
void clear_display (void) // Display löschen
{
P2_7=1; // Enable auf 1 setzen
P2_5=0; // RS auf Code Input
P2_6=0; // R/W auf Write
P0=0x01; // Default (Clear Display)
pause(120); // Warten >450ns
P2_7=0; // Enable auf 0 setzen
pause(120); // Warten >450ns
}
void clear_zeichen(void) // Zeichen löschen
{
shift_links(); // Cursor nach links verschieben
ausgabe(0xa0); // Ausgabe Leerzeichen
}
void shift_links (void) // Cursor nach links verschieben
{
P2_7=1; // Enable auf 1 setzen
P2_5=0; // RS auf Code Input
P2_6=0; // R/W auf Write
P0=0x10; // Shift links
pause(120); // Warten >450ns
P2_7=0; // Enable auf 0 setzen
pause(120); // Warten >450ns
}
void shift_rechts (void) // Cursor nach rechts verschieben
{
P2_7=1; // Enable auf 1 setzen
P2_5=0; // RS auf Code Input
P2_6=0; // R/W auf Write
P0=0x14; // Shift rechts
pause(120); // Warten >450ns
P2_7=0; // Enable auf 0 setzen
pause(120); // Warten >450ns
}
void return_home(void) // Dispaly zum Zeilenanfang
{
P2_7=1; // Enable auf 1 setzen
P2_5=0; // RS auf Code Input
P2_6=0; // R/W auf Write
P0=0x02; // Zeilenanfang
pause(120); // Warten >450ns
P2_7=0; // Enable auf 0 setzen
pause(120); // Warten >450ns
}
void bf_display(void) // Busy-Flag abfragen
{
unsigned char a; // Hilfsvariable
do // Warteschleife
{
P2_7=1; // Enable auf 1 setzen
P2_5=0; // RS auf Code Input
P2_6=1; // R/W auf Read
pause(120); // Warten >450ns
P2_7=0; // Enable auf 0 setzen
pause(120); // Warten >450ns
a=P0_7; // Busy-Flag abfragen
}while(a!=0); // Warteschleife
}
void ausgabe(unsigned char aus) // Daten auf Display ausgeben
{
bf_display(); // Busy-Flag Abfrage
P2_7=1; // Enable auf 1 setzen
P2_5=1; // RS auf Data Input
P2_6=0; // R/W auf Write
P0=aus; // Daten an LCD anlegen
pause(120); // Warten >450ns
P2_7=0; // Enable auf 0 setzen
pause(120); // Warten >450ns
P0=0; // Datenbits zurücksetzen
}
void pause(unsigned long warten) // Delay
{
unsigned long i=0; // Hilfsvariable
for(i=0;i<=warten;i++); // Warteschleife
}
void send_char(char C) // Senden über die UART
{
while(!TI);
TI = 0;
SBUF = C;
}