Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-Control 1.4 Mega32 & RN-KeyLCD Tastaturabfrage RS232
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
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?
A:Das Programm liest von der 3x4 Matrix-Tastatur und gibt das Zeichen
sofort auf das LCD-Display aus.
/* 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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.