﻿#include <avr/io.h>
#define F_CPU 12000000UL
#include <util/delay.h>

#define Btn_Down 1
#define Btn_Up 2
#define Btn_Neytral 3
#define Btn_Rear 4
#define Off 0
#define On 1
// Декларация глобальных переменных
uint8_t tiks;
uint8_t Cur_btn;
uint8_t Pressed;
uint8_t _Gear;
uint8_t _Button;
unsigned char read_key (void);
const unsigned char Gears[7] ={0x00,//Нейтраль
							 0x15,//Первая
							 0x16,//Вторая
							 0x18,//Третья
							 0x27,//Четвёртая
							 0x15,/*Пятая*/
							 0x23/*Задняя*/};
// Timer 0 overflow interrupt service routine
int ISR(TIMER0_OVF_vect){
	//tiks++;
	//if ((tiks>255)&&(_Button = Off)){
//	 _Button=On;
//}
return 0;	
}	

int main(void){//Begin
// Timer(s)/Counter(s) Interrupt(s) initialization
	TIMSK=0x01;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
	TCCR0=0x05;
	TCNT0=0x0F; 
//Ports_______________________________________________
	DDRD = 0xff;
	DDRB = 0x00;
//Enable buttons__
	_Button=On;
//Global interrupts enable
	asm ("sei");
	
//Основной цикл****************************************	


	
	while(1){//Begin while
		if (_Button== On){ read_key();
			PORTD = Gears[_Gear];
		}				
	}//end while
}//END 

unsigned char read_key (void){
	Pressed=0;
	Cur_btn = 0;			
	Pressed =(PINB & 0b00011101);		
	if (~Pressed & 0b00010000)	Cur_btn=	Btn_Down;	
	if (~Pressed & 0b00001000)	Cur_btn =	Btn_Up;		
	if (~Pressed & 0b00000001)	Cur_btn =	Btn_Rear;	
	if (~Pressed & 0b00000100)	Cur_btn =	Btn_Neytral;				
//--------------------------------------------------------	
	if (Cur_btn>0)
	{
		_Button= Off;
		if ((Cur_btn == Btn_Down)&&((_Gear>0)&&(_Gear<6)))					_Gear--;
		if ((Cur_btn ==	Btn_Up) && (_Gear<5))						_Gear++;
		if (Cur_btn == Btn_Neytral && ( _Gear==2 || _Gear==1 || _Gear==6)) 			_Gear=0;
		if ((Cur_btn == Btn_Rear) && ( _Gear==0))						_Gear=6;
	}
	return 0;
}