jestem amatorem(poczatkujacym), prosze o wyrozumialosc
musze zmodyfikowac program aby uzyskac
-obsługę przycisków w ten sposób, aby w oknie terminala ukazywał się komunikat z numerem wciśniętego przycisku
-efekty świetlne polegające na sekwencjach migania diod LED (disco
), przy czym wybór sekwencji odbywałby się poprzez wysłanie z terminala numeru efektu
Dodałem znaczniki [code] i zmieniłem tytuł tematu
Autora proszę, o zapoznanie się z regulaminem naszego forum, bo kolejny temat napisany w tym stylu, wyląduje w koszu.
[zumek]
musze zmodyfikowac program aby uzyskac
-obsługę przycisków w ten sposób, aby w oknie terminala ukazywał się komunikat z numerem wciśniętego przycisku
-efekty świetlne polegające na sekwencjach migania diod LED (disco
// Sterownie diodą LED podłączoną do dowolnej linii mikrokontrolera
// za pomocą dowolnego znaku odebranego z portu szeregowego
// mikrokontrolera i wysyłanie jej stanu na port szeregowy
#include <avr/io.h> // dostęp do rejestrów
#include <avr\iom128.h>
#include <compat/deprecated.h>
// Zmieniając poniższe definicje można dostosować program do potrzeb
#define F_CPU 8000000ul // częstotliwość zegara w Hz 12
#define UART_BAUD 19200ul // prędkość transmisji bit/s
#define LED_PORT PORTD // port diody LED
#define LED_BIT 4 // bit diody LED
#define DDR(x) _SFR_IO8(_SFR_IO_ADDR(x)-1) // adr. rej. kier. PORTx
#define PIN(x) _SFR_IO8(_SFR_IO_ADDR(x)-2) // adr. rej. wej. PORTx
#define LED_PORT_O LED_PORT // rejestr wyjściowy
#define LED_PORT_D DDR(LED_PORT) // rejestr kierunkowy
#define LED_PORT_I PIN(LED_PORT) // rejestr wejściowy
#define UART_CONST (F_CPU/(16ul*UART_BAUD)-1)
// _UCR_
#ifdef UCR
#define _UCR_ UCR
#endif
#ifdef UCSRB
#define _UCR_ UCSRB
#endif
#ifdef UCSR0B
#define _UCR_ UCSR0B
#endif
// _USR_
#ifdef USR
#define _USR_ USR
#endif
#ifdef UCSRA
#define _USR_ UCSRA
#endif
#ifdef UCSR0A
#define _USR_ UCSR0A
#endif
// Definicje funkcji
// inicjalizacja portu szeregowego
void UART_init(void)
{
UBRR0H = (UART_CONST >> 8); // ustaw prędkość transmisji
UBRR0L = (UART_CONST & 0xFF);
_UCR_ = _BV(RXEN)|_BV(TXEN); // załącz tx, rx
}
// wysyła znak podany jako parametr na port szeregowy
void UART_putchar (char c)
{
UDR0 = c; // wpisz c do rejestru UDR
loop_until_bit_is_set(_USR_,TXC); // czekaj na zakończenie transmisji
sbi(_USR_,TXC); // ustaw bit TXC w rej. USR
}
// odbiera znak z portu szeregowego i zwraca go jako wartość funkcji
char UART_getchar (void)
{
loop_until_bit_is_set(_USR_,RXC); // czekaj na zakończenie odbioru
cbi(_USR_,RXC); // skasuj bit RXC w rej. USR
return UDR0; // zwróć zawartość rejestru UDR
}
13
int main(void) // program główny
{
UART_init(); // inicjalizacja portu szeregowego
sbi(LED_PORT_D,LED_BIT); // użyj linii jako wyjścia
while(1) // pętla nieskończona
{
cbi(LED_PORT_O,LED_BIT); // zapal diodę LED
UART_putchar('1'); // wyślij '1' na port szeregowy
UART_getchar(); // czekaj na znak z portu szeregowego
sbi(LED_PORT_O,LED_BIT); // zgaś diodę LED
UART_putchar('0'); // wyślij '0' na port szeregowy
UART_getchar(); // czekaj na znak z portu szeregowego
}
}
Dodałem znaczniki [code] i zmieniłem tytuł tematu
Autora proszę, o zapoznanie się z regulaminem naszego forum, bo kolejny temat napisany w tym stylu, wyląduje w koszu.
[zumek]