Stap 5: Controller Circuit
Het Scenario van de code afhankelijk van:
1-waardoor de RX/TX van ATMEGA16 MCU.
2-het verzenden van de ASCII-code van de PC of Tablet.
3-vertalen van de ASCII-code door de MCU naar een specifieke output in haven A en C. poort
De fuse bit voor 16 Mhz externe frequentie resonator moet worden ingesteld op: hoog: 0xC9, laag: 0xFF zoals aangegeven in de bijgevoegde foto.
Code:
/*
ATmega16 16MHz externe frequentie resonator
Baud Rate 9600 geen pariteit, 1 stopbit, Flow Control: geen
*/
#include < avr/io.h >
#include < inttypes.h >
#include < util/delay.h >
VOID USARTInit(uint16_t ubrr_value)
{
Set Baud-rate
UBRRL = ubrr_value;
UBRRH = (ubrr_value >> 8);
UCSRC = (1 << URSEL) | (3 << UCSZ0); Instellen van de asynchrone modus, geen pariteit, 1 StopBit
UCSRB = (1 << RXEN) | (1 << TXEN); Inschakelen van de ontvanger en zender
}
char USARTReadChar()
{
terwijl (! () UCSRA & (1 << RXC)))
{
niets doen
}
retourneren UDR;
}
VOID USARTWriteChar(char data)
{
terwijl (! () UCSRA & (1 << UDRE)))
{
niets doen
}
UDR = gegevens;
}
void main()
{
DDRC = 0XFF;
DDRA = 0XFF;
char gegevens;
USARTInit(103); voor 16Mhz en 9600 baud UBRR = 103 en voor 19200 baud UBRR = 51
while(1)
{
Data=USARTReadChar();
Als (gegevens == 0x71) {PORTC = 0b10000000; USARTWriteChar('Q');} q in ascii
Als (gegevens == 0x77) {PORTC = 0b00001001; USARTWriteChar('w');} w in ascii vooruit
Als (gegevens == 0x65) {PORTC = 0b01000000; USARTWriteChar('e');} e in ascii
Als (gegevens == 0x61) {PORTC = 0b00000011; USARTWriteChar('A');} een in ascii links
Als (gegevens == 0x73) {PORTC = 0b00000000; USARTWriteChar('s');} s in ascii stoppen
Als (gegevens == 0x64) {PORTC = 0b00001100; USARTWriteChar('d');} d in ascii rechts
Als (gegevens == 0x7A) {PORTC = 0b00100000; USARTWriteChar('z');} z in ascii
Als (gegevens == 0x78) {PORTC = 0b10000110; USARTWriteChar('x');} x in ascii achterwaarts
Als (gegevens == 0x99) {PORTC = 0b11110000; USARTWriteChar('c');} c in ascii
Als (data==0x69){PORTC=0b00001001;_delay_ms(200); PORTC = 0b00000000;} ik in ascii vooruit
Als (data==0x6A){PORTC=0b00000011;_delay_ms(200); PORTC = 0b00000000;} j in ascii links
Als (data==0x6C){PORTC=0b00001100;_delay_ms(200); PORTC = 0b00000000;} l in ascii rechts
Als (data==0x6B){PORTC=0b00000110;_delay_ms(200); PORTC = 0b00000000;} k in ascii terug
Als (gegevens == 0x31) {PORTA = 0b00000001; USARTWriteChar('1');} 1 in ASCII-//2 LED op
Als (gegevens == 0x32) {PORTA = 0b00000010; USARTWriteChar('2');} 2 in ASCII-//4 LED op
Als (gegevens == 0x33) {PORTA = 0b00000111; USARTWriteChar('3');} 3 in ASCII-//6 LED op
Als (gegevens == 0x34) {PORTA = 0b00001000; USARTWriteChar('4');} 4 in ASCII-//Red LED op
Als (gegevens == 0x35) {PORTA = 0b00010000; USARTWriteChar('5');} 5 in ascii
Als (gegevens == 0x36) {PORTA = 0b00100000; USARTWriteChar('6');} 6 in ascii
Als (gegevens == 0x37) {PORTA = 0b01000000; USARTWriteChar('7');} 7 in ascii
Als (gegevens == 0x38) {PORTA = 0b10000000; USARTWriteChar('8');} 8 in ascii
Als (gegevens == 0x39) {PORTA = 0b00000000; USARTWriteChar('9');} 9 in ASCII-//All uit
else {}
}
}