Stap 2: Develope de code voor ATMEGA128
Dit is de functie voor het communiceren met de Laptop:
VOID usart_init (unsigned int ubrr)
{
/ * Set baud-rate * /
UBRR0H = (unsigned char) (ubrr >> 8);
UBRR0L = ubrr (unsigned char);
/ * Inschakelen van de ontvanger en zender * /
UCSR0B = (1 << RXEN) | (1 << TXEN);
/ * Set frame-indeling: 8data, 2stop bits * /
UCSR0C = (1 << USBS) | (3 << UCSZ0);
}
VOID usart_transmit (unsigned char gegevens)
{
/ * Wachten op lege zenden buffer * /
terwijl (! () UCSR0A & (1 << UDRE)))
;
/ * Gegevens in buffer plaatsen, stuurt de gegevens * /
UDR0 = gegevens;
}
VOID usart_pstr (unsigned char * s) {}
doorlopen van de gehele tekenreeks
terwijl (* s) {}
usart_transmit(*s);
s+ +;
}
}
unsigned char usart_receive (void)
{
/ * Wachten op gegevens te ontvangen * /
terwijl (! () UCSR0A & (1 << RXC)))
;
/ * Krijgen en ontvangen gegevens retourneren uit buffer * /
Return UDR0;
}
.
.
.
.
op main()
Voeg toe:
doen
{
c_byte = usart_receive();
usart_transmit(c_byte);
}
terwijl (c_byte ==' ');
_delay_ms (10);
lcd_cmd (0x01); //Clear display
lcd_data(c_byte);
lcd_cmd (0xC0), de tweede rij //goto
lcd_string("selected");
_delay_ms(1000);
switch(c_byte) {}
geval 'a':
_delay_ms (10);
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_cmd (0xC0), de tweede rij //goto
_delay_ms (10);
lcd_cmd(0x01); Duidelijk display
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_string ("A Relay");
lcd_cmd (0xC0), de tweede rij //goto
lcd_string("activated..");
_delay_ms(1000);
volgende scherm
relay1 activeren
relay1 = 1;
relay2 = 0;
breken; / * optionele * /
Case "b":
_delay_ms (10);
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_cmd (0xC0), de tweede rij //goto
_delay_ms (10);
lcd_cmd(0x01); Duidelijk display
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_string ("B Relay");
lcd_cmd (0xC0), de tweede rij //goto
lcd_string("activated");
_delay_ms(1000);
volgende scherm
relay2 activeren
relay1 = 0;
relay2 = 1;
breken;
Case "c":
usart_pstr ("HALLO FROM ATMEGA128\n");
printf ("HALLO RIKO");
_delay_ms(50000);
_delay_ms (10);
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_cmd (0xC0), de tweede rij //goto
_delay_ms (10);
lcd_cmd(0x01); Duidelijk display
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_string("Message");
lcd_cmd (0xC0), de tweede rij //goto
lcd_string("flasher");
_delay_ms(1000);
volgende scherm
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_string ("met ATMEGA128");
lcd_cmd (0xC0), de tweede rij //goto
lcd_string ("door arick");
_delay_ms(1000);
volgende scherm
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_string ("gepubliceerd op");
lcd_cmd (0xC0), de tweede rij //goto
lcd_string("instructable.com");
_delay_ms(1000);
volgende scherm
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_string ("Made in");
lcd_cmd (0xC0), de tweede rij //goto
lcd_string("Australia");
_delay_ms(1000);
volgende scherm
lcd_cmd (0x80); //put de cursor in de eerste rij
_delay_ms (10);
lcd_cmd (0x01); //Clear display
_delay_ms (10);
lcd_string("Disable");
lcd_cmd (0xC0), de tweede rij //goto
lcd_string ("alle Relais");
_delay_ms(1000);
uitschakelen van alle Relais
relay1 = 0;
relay2 = 0;
breken;
} //end geval