0

AVR C – Knigth Rider

Ciekawym projektem jaki można wykonać w ramach pierwszych projektów z mikrokontrolerami jest wykonania Knight Rider’a. Efekt którego osobom oglądającym Nieustraszonego nie trzeba przypominać.

Efekt jest dość podobny do poprzedniego projektu (Linijka Diodowa) z tą różnicą, że świecące diody przesuwają się w dwie strony. Trzeba też rozróżniać kierunki przesuwania się.

 

/*****************************************************************
 * 
 *	R01_Diody
 *	Knight_Rider
 *	main.c
 *	Plik : main.c	
 *	Mikrokontroler : Atmel AVR atmega644p
 *	Kompilator : avr-gcc Toolchain
 *	Autor : Mariusz Czajkowski
 *	Źródło : http://uengineering.net/
 *	Data : 08.12.2012
 *
 *****************************************************************/

 /*****************************************************************
 * 
 *	PORTB podlaczony do diod LED
 *
 *****************************************************************/

/*	Definicje	*/
#define F_CPU 16000000UL	//Definicja czestotliwosci procesora
#define LEDS	PORTB
#define	PRAWO	1
#define LEWO	0

/*	Dolaczane biblioteki	*/
#include <avr/io.h>			//Biblioteka wejsc/wyjsc
#include <util/delay.h>		//Biblioteka opoznien
#include <stdint.h>			//Biblioteka typow liczb

/*	Funkcje wlasne	*/
void ConfIO(void)
{
	/*	DDRx rejestr ustawiajacy tryb pracy pinow, 1 - wyjscie, 0 - wejscie	*/
	DDRB = 0xff;			//Port diod LED
	/*	PORTx rejestr ustawiajacy stany pinow	*/ 
	PORTB = 0xff; 			//Ustawienie wartosci stanu wysokiego
}

/*	Funckja main()	*/
int main()
{
	/*	Zmienne lokalne	*/	
	char kierunek = 0;
	char Temp = 0b00000111;

	/*	Konfiguracja procesora	*/
	ConfIO();
	//LEDS = 0b11111000;	

	/*	Petla nieskonczona	*/
	while(1)
	{
		if( kierunek == LEWO && Temp == 0b00000111 )		
		{
			kierunek = PRAWO;
			Temp = Temp * 2;
			LEDS = ~Temp;
		}
		else if( kierunek == PRAWO && Temp == 0b11100000 )
		{
			kierunek = LEWO;
			Temp = Temp / 2;
			LEDS = ~Temp;
		}
		else if( kierunek == PRAWO )
		{
			Temp = Temp * 2;
			LEDS = ~Temp;
		}
		else if( kierunek == LEWO )
		{
			Temp = Temp / 2;
			LEDS = ~Temp;
		}
		_delay_ms(100);
	}
}

 

 

 

Mariusz Czajkowski

Wykształcenie: magister inżynier Automatyki i Robotyki. Zainteresowania techniczne: Programowanie, Elektronika, Mikrokontrolery, Sterowniki PLC.