es spielt eigentlich keine rolle ob disp_text() oder sonst eine Sendeaufgabe...
hier der disp_text() code und die UART initialisierung und senderoutine:
Code:
void UART0_init(long int baudrate, long int quarzfrequenz)
{
int baudwert;
baudwert = (quarzfrequenz/(baudrate*16))-1;
UBRR0H = (baudwert>>8);
UBRR0L = baudwert;
UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
}
void UART0_send_char(char c0)
{
if(c0=='ü'||'ä'||'ö'||'Ü'||'Ä'||'Ö') // Falls das zu sendende Zeichen ein Umlaut
{ // wird der richtige Charaker zugeordnet
switch(c0)
{
case 'ü': c0=129; break;
case 'ä': c0=132; break;
case 'ö': c0=148; break;
case 'Ü': c0=154; break;
case 'Ä': c0=142; break;
case 'Ö': c0=153; break;
default: break;
}
}
while((PIND&0x02)==0x02); // Warten bis das Display bereit ist
while ( !( UCSR0A & (1<<UDRE0)) ); // Warten bis der Sender bereit ist
UDR0=c0; // Zeichen senden
}
/****************************************************************************************
* orientation: h=horizontal, v=vertikal *
* position: l=linksbündig, c=zentriert, r=rechtsbündig *
****************************************************************************************/
void disp_text(char orientation, char position, int x, int y, char *text)
{
UART0_send_char(27);
UART0_send_char('z');
if(orientation=='v')
{
switch(position)
{
case 'l': UART0_send_char('o'); break;
case 'c': UART0_send_char('m'); break;
case 'r': UART0_send_char('u'); break;
default: UART0_send_char('o'); break;
}
}
else
{
switch(position)
{
case 'l': UART0_send_char('l'); break;
case 'c': UART0_send_char('z'); break;
case 'r': UART0_send_char('r'); break;
default: UART0_send_char('l'); break;
}
}
UART0_send_char(x);
UART0_send_char(y);
UART0_send_string(text);
UART0_send_char(0);
}
Lesezeichen