obi134
09.09.2008, 21:40
Hi !
Ich wollte mal probieren mit c (c18-compiler von microchip) ein mein display anzusteuern. aber irgendwie klappt wohl die Initialisierung des Displays nicht. Aber ich finde den Fehler nicht :-s Könnt ihr da vielleicht mal drüber gucken? danke schonmal
Gruß
/** I N C L U D E S ************************************************** ********/
#include <p18f242.h>
#include "delays.h"
/** C O N F I G U R A T I O N ************************************************/
#pragma config OSC = HS //CPU=20 MHz
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config WDT = OFF //Watchdog Timer
#pragma config LVP = OFF //Low Voltage ICSP
/** D E C L A R A T I O N S **************************************************/
#define XRS LATCbits.LATC4
#define XWR LATCbits.LATC5
#define E LATCbits.LATC6
#define text HALLO
#define DISPLAY_BREITE 20
/** C O D E **************************************************/
#pragma code
void LCD_Init(void);
void LCD_send_cmd(char command);
void send(void);
void main(void)
{
LATB = 0x00;
TRISB = 0x00;
LATC = 0x00;
TRISC = 0x8f; //10001111, RC0 - RC3 input, RC4 - RC6 output
LCD_Init();
} //end main
//******************************** LCD ************************************
//************************************************** ***********************
// LCD_Init():
//
// Initialisierung des LCD-Displays.
//
//************************************************** ***********************
void LCD_Init()
{
LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
LCD_send_cmd(0x0E); // Display On: ON, Cursor ON, ohne Blinken
LCD_send_cmd(0x01); // clear display
LCD_send_cmd(0x06); // Entry Mode Set: inkrementieren / Cursor automatisch
} // LCD_Init
//************************************************** ***********************
// LCD_send_char(char zeichen):
//
// Ausgabe des Zeichens <zeichen> an der aktuellen Cursorposition.
//
//************************************************** ***********************
void LCD_send_char(char zeichen)
{
LATB = zeichen;
send();
Delay10KTCYx(63);
} // LCD_send_char
//************************************************** ***********************
// LCD_send_cmd(char command):
//
// Senden des Befehls <command> zum LCD-Display
//
//************************************************** ***********************
void LCD_send_cmd(char command)
{
LATB = command;
send();
Delay10KTCYx(255);
} // LCD_send_cmd
//************************************************** ***********************
// LCD_outtext(char x, char y,const char *text):
//
// Ausgabe von <text> an der aktuellen Cursorposition.
//
//************************************************** ***********************
void LCD_outtext(char x, char y, const char *text)
{
switch(y)
{
case 1:
LCD_send_cmd(x + 0x07F);
break;
case 2:
LCD_send_cmd(x + 0x0BF);
break;
case 3:
LCD_send_cmd(x + 0x093);
break;
case 4:
LCD_send_cmd(x + 0x0D3);
break;
} // switch(y)
while(*text && (x++ <= DISPLAY_BREITE)) LCD_send_char(*text++);
} // LCD_outtext
void send()
{
XWR = 0;
XRS = 1;
E = 1;
Delay10TCYx(1);
E = 0;
XRS = 0;
XWR = 1;
}
Ich wollte mal probieren mit c (c18-compiler von microchip) ein mein display anzusteuern. aber irgendwie klappt wohl die Initialisierung des Displays nicht. Aber ich finde den Fehler nicht :-s Könnt ihr da vielleicht mal drüber gucken? danke schonmal
Gruß
/** I N C L U D E S ************************************************** ********/
#include <p18f242.h>
#include "delays.h"
/** C O N F I G U R A T I O N ************************************************/
#pragma config OSC = HS //CPU=20 MHz
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config WDT = OFF //Watchdog Timer
#pragma config LVP = OFF //Low Voltage ICSP
/** D E C L A R A T I O N S **************************************************/
#define XRS LATCbits.LATC4
#define XWR LATCbits.LATC5
#define E LATCbits.LATC6
#define text HALLO
#define DISPLAY_BREITE 20
/** C O D E **************************************************/
#pragma code
void LCD_Init(void);
void LCD_send_cmd(char command);
void send(void);
void main(void)
{
LATB = 0x00;
TRISB = 0x00;
LATC = 0x00;
TRISC = 0x8f; //10001111, RC0 - RC3 input, RC4 - RC6 output
LCD_Init();
} //end main
//******************************** LCD ************************************
//************************************************** ***********************
// LCD_Init():
//
// Initialisierung des LCD-Displays.
//
//************************************************** ***********************
void LCD_Init()
{
LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
LCD_send_cmd(0x38); // Interface data length: 8 bit, zweizeilig, 5x7 Dots
LCD_send_cmd(0x0E); // Display On: ON, Cursor ON, ohne Blinken
LCD_send_cmd(0x01); // clear display
LCD_send_cmd(0x06); // Entry Mode Set: inkrementieren / Cursor automatisch
} // LCD_Init
//************************************************** ***********************
// LCD_send_char(char zeichen):
//
// Ausgabe des Zeichens <zeichen> an der aktuellen Cursorposition.
//
//************************************************** ***********************
void LCD_send_char(char zeichen)
{
LATB = zeichen;
send();
Delay10KTCYx(63);
} // LCD_send_char
//************************************************** ***********************
// LCD_send_cmd(char command):
//
// Senden des Befehls <command> zum LCD-Display
//
//************************************************** ***********************
void LCD_send_cmd(char command)
{
LATB = command;
send();
Delay10KTCYx(255);
} // LCD_send_cmd
//************************************************** ***********************
// LCD_outtext(char x, char y,const char *text):
//
// Ausgabe von <text> an der aktuellen Cursorposition.
//
//************************************************** ***********************
void LCD_outtext(char x, char y, const char *text)
{
switch(y)
{
case 1:
LCD_send_cmd(x + 0x07F);
break;
case 2:
LCD_send_cmd(x + 0x0BF);
break;
case 3:
LCD_send_cmd(x + 0x093);
break;
case 4:
LCD_send_cmd(x + 0x0D3);
break;
} // switch(y)
while(*text && (x++ <= DISPLAY_BREITE)) LCD_send_char(*text++);
} // LCD_outtext
void send()
{
XWR = 0;
XRS = 1;
E = 1;
Delay10TCYx(1);
E = 0;
XRS = 0;
XWR = 1;
}