Mahlzeit,
und wieder habe ich mir selbst geholfen

Hier mein Test-Programm für die Kombination:

RN-Control v 1.4 16 MHz //oder andere Boards
und
RN-KEY-LCD

Kommunikation über ein 3-Poliges Kabel RS232.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! RN-Control TX an RN-KEY-LCD RX!
! RN-Control RX an RN-KEY-LCD TX!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Q:Was macht das Programm?
Aas Programm liest von der 3x4 Matrix-Tastatur und gibt das Zeichen
sofort auf das LCD-Display aus.


Code:
/*  main.c
04.04.2005

Test-Programm für die Kombination:

RN-Control v 1.4   16 MHz //oder andere Boards
und
RN-KEY-LCD

Kommunikation über ein 3-Poliges Kabel RS232.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! RN-Control TX an RN-KEY-LCD RX!
! RN-Control RX an RN-KEY-LCD TX!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Q:Was macht das Programm?
A:Das Programm liest von der 3x4 Matrix-Tastatur und gibt das Zeichen 
sofort auf das LCD-Display aus. 
 
*/



#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#define SIZE 16
unsigned char c;


/*******************************************************************/
/********************    Funktionen    *****************************/
/*******************************************************************/


/*USART initialisieren*/
void init_USART()
{
	/* setting up the USART */
	/* 16Mhz 9600 Baud No Flow Control 8 data 1 stop bit */
	UBRRL=103;
	UCSRB=_BV(TXEN);
	/* Zusaetzlich zur Baudrateneinstellung 
	und der weiteren Initialisierung: */
    UCSRB |= ( 1 << RXEN );
	
	return;
}


/* Zeichen empfangen */
uint8_t Usart_Rx(void)
{
	unsigned char Zeichen =' ';
    while (!(UCSRA & (1<<RXC)));  // warten bis Zeichen verfuegbar
    Zeichen = UDR;
	return Zeichen;                   // Zeichen aus UDR an Aufrufer zurueckgeben
}

/* Zeichen senden */
uint8_t Usart_Tx(unsigned char c)
{
while ( !(UCSRA & _BV(UDRE)) ); /* warten bis Senden moeglich                   */
    UDR = c;                  /* Schreibt das Zeichen x auf die Schnittstelle */
}



int usartprint(char *buf,int len)
{
	int i;

	for (i=0;i<len;i++) {
		/* if the UDRE bit is set this means that the UDR buffer is
		 * empty. New data can be transmitted */
		while ( !(UCSRA & _BV(UDRE)) )
			;

		UDR = buf[i];
	}

	return i;
}

int usartprintnl(void) /* print new line */
{
	while (! (UCSRA & _BV(UDRE)) )
		;
	UDR = 10; /* LF */
	while (! (UCSRA & _BV(UDRE)) )
		;
	UDR = 13; /* CR */

	return 2;

}




/* Funktionen für RN-KEYLCD*/

/* Display löschen*/
void clearlcd(void) 
{
	while (! (UCSRA & _BV(UDRE)) )
		;
	UDR = 12; 
	return;
}


/* Cursor nach links auf Spalte 1 setzen*/
void Carriage_Return(void) 
{
	while (! (UCSRA & _BV(UDRE)) )
		;
	UDR = 13; 
	return;
}

/*Cursor eine Zeile tiefer*/
void Linefeed(void) 
{
	while (! (UCSRA & _BV(UDRE)) )
		;
	UDR = 13; 
	return;
}


/*Cursor im LCD positionieren*/
void Cursor_xy(int x, int y)
{
	while (! (UCSRA & _BV(UDRE)) )
		;
	UDR = 27;
		while (! (UCSRA & _BV(UDRE)) )
		;
	UDR = 79;
		while (! (UCSRA & _BV(UDRE)) )
		;
	UDR = x; /* x-Position: Zeile 1 bis 20*/
		while (! (UCSRA & _BV(UDRE)) )
		;
	UDR = y; /* y-Position: Spalte 1 bis 4*/
		
	return;
}

/* Funktionen für RN-KEYLCD ENDE.*/



/*Tastaturabfrage*/

int Tastaturabfrage(void)
{
	c=Usart_Rx();	/*liest Zeichen von der Tastatur*/
	switch(c)		/*Vergleiche empfangenes Zeichen*/	
	{

	case '1':
	return 1;
	
	case '2':
	return 2;
	
	case '3':
	return 3;
	
	case '4':
	return 4;
	
	case '5':
	return 5;
	
	case '6':
	return 6;
	
	case '7':
	return 7;
	
	case '8':
	return 8;
	
	case '9':
	return 9;
	
	case '0':
	return 0;
	
	case '*':
	return 42; /*# etspricht 42DEZ, bzw. 2AHEX*/
	
	case '#':
	return 35; /*# etspricht 35DEZ, bzw. 23HEX*/
	}
}

/*Tastaturabfrage ENDE.*/


/*******************************************************************/
/********************     Funktionen     ***************************/
/**********************      ENDE     ******************************/








/*******************************************************************/
/**********************	HAUPTPROGRAMM ******************************/
/*******************************************************************/



int main(void)
{	

init_USART();	/* USART initialisieren */

clearlcd();		/*löscht LCD*/
	
//Cursor_xy( 5, 3);
	
//usartprint("Hello World",11);
	

	
	while(1)	/*Beton-Schleife*/
	{	
	
	c=Usart_Rx();// Zeichen von der Tastatur lesen und ...	
	Usart_Tx(c); // erkanntes Zeichen wieder an das LCD über RS232 senden	
	
	//
	
	//if((Tastaturabfrage())==35)
	//usartprint("Hello World #",11);
	
	//if((Tastaturabfrage())==42)
	//clearlcd();		/*löscht LCD*/
	
	//if((Tastaturabfrage())==0)
	//usartprint("Taste 0 erkannt",15);
	
	//... und so weiter ....
	
	}
	
	
}
Verbesserungsvorschläge oder Ergänzungen sind wilkommen.
Ich denke das Testprogramm ist eine gute möglichkeit um die
Hardware (mit C) zu Testen.

mfg
mit freundlichen Grüßen