- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 3 von 3

Thema: RN-Control 1.4 Mega32 & RN-KeyLCD Tastaturabfrage RS232

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.03.2005
    Beiträge
    25

    RN-Control 1.4 Mega32 & RN-KeyLCD Tastaturabfrage RS232

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo zusammen )

    Ich habe das RN-Control 1.4 Mega32 Board
    mit dem RN-KeyLCD Tastaturabfrage über RS232 verbunden.

    Ich will die Tastatur des RN-KeyLCD abfragen.

    Zeichen auf das LCD kann ich bereits senden.

    Hat jemand ein paar C Codes für die Abfrage der Tastatur
    für das RN-KeyLCD über RS-232.

    Bin für jeden Codeschnipsel Dankbar

    mfg
    mit freundlichen Grüßen

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    11.03.2005
    Beiträge
    25
    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

  3. #3
    Gast
    Hallo ich hebe eine Frage
    ich benutze ein LCD von Electronic assembly und ich brauche eine Funktion die die Cursor bewegt ? kann jemand mir helfen
    danke

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests