#ifndef _DEF_INCLUDED_
#define _DEF_INCLUDED_

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <string.h> 
#include <avr/interrupt.h>
#define F_CPU 16000000UL  // 16 MHz
#include <util/delay.h>

typedef unsigned char byte;
typedef unsigned int word;
typedef unsigned long lng;
typedef unsigned long int dbl;

// Pins for managing indicator shift registers

#define SET_SCK DDRB|=(1<<5)
#define SCK_1  PORTB|=(1<<5)
#define SCK_0  PORTB&=~(1<<5)

#define SET_SER DDRB|=(1<<3)
#define SER_1  PORTB|=(1<<3)
#define SER_0  PORTB&=~(1<<3)

#define SET_RCK DDRB|=(1<<2)
#define RCK_1  PORTB|=(1<<2)
#define RCK_0  PORTB&=~(1<<2)
//*******************************************

// Pins for reading the status of the encoder
#define DEF_ENC {DDRD&=(1<<2);DDRD&=(1<<3);DDRD&=(1<<4);PORTD|=(1<<2);PORTD|=(1<<3);PORTD|=(1<<4);}

// Pin for reading the status of the button of the encoder
#define SET_BUTT {DDRD&=~(1<<4);PORTD|=(1<<4);}
#define BUTT (PIND&(1<<4))
#define BUTT_CNT 1000

// 
#define SET_REL2 (DDRB|=(1<<1))
#define REL2_ON PORTB&=~(1<<1)
#define REL2_OFF  PORTB|=(1<<1)

#define SET_REL1 (DDRB|=(1<<0)) 
#define REL1_ON PORTB&=~(1<<0)
#define REL1_OFF  PORTB|=(1<<0)


#define TIMER1_ON   TCCR1B=0x0c
#define TIMER1_OFF  TCCR1B=0x00

#define TIMER0_ON   TCCR0B=0x04
#define TIMER0_OFF  TCCR0B=0x00


#define LED0_ON  led_0=0
#define LED0_OFF led_0=1
#define LED1_ON  led_1=0
#define LED1_OFF led_1=1
#define LED2_ON  led_2=0
#define LED2_OFF led_2=1
#define LED3_ON  led_3=0
#define LED3_OFF led_3=1

#define ADR_HR  1    // часы

#define MAX_HR 17
#define MAX 59
#define MAX_MIN 59
#define MAX_SEC 59
#define MAX_CNT 0xafff
#define MIN_CNT 0x3fff

#endif

#ifdef  MAIN_GLOBALS
#define MAIN_EXT
#else
#define MAIN_EXT extern
#endif

MAIN_EXT byte mode;            // режим работы
MAIN_EXT byte flg_off;
MAIN_EXT word cnt_time;       // счетчик
MAIN_EXT word cnt_time_up;   // счетчик в инкремент
MAIN_EXT word cnt_time_down; // счетчик в декримент
MAIN_EXT byte mem[6];
MAIN_EXT byte led_0;
MAIN_EXT byte led_1;
MAIN_EXT byte led_2;
MAIN_EXT byte led_3;
//MAIN_EXT byte rl_2;
MAIN_EXT byte point[4];
MAIN_EXT byte seg[4];
//MAIN_EXT byte led_ind;
MAIN_EXT byte cnt_ind;
MAIN_EXT byte flg_int;
MAIN_EXT byte cnt_sec;
MAIN_EXT byte flg_button;
MAIN_EXT word cnt_but;
MAIN_EXT byte flg_start;
MAIN_EXT byte flg_h_m;
MAIN_EXT byte flg_pause;
MAIN_EXT byte flg_dir;
MAIN_EXT byte flg_loop;
MAIN_EXT byte step;
MAIN_EXT byte state;
MAIN_EXT byte m_state;

void MainButt_n(void);
void MainButUp(void);
void MainIni(void);
void MainButDown(void);
void MainSwi(void);
void MainWritePar(void);
void MainReadParam(void);
void MainCheckParam(void);
void MainWriteEeprom(word adr,byte dan);
unsigned char MainReadEeprom(word adr);
void MainEndCnt(void);
void MainDis(void);
void MainOffSeg(void);
void MainSetTotal(void);
void MainEncStep(void);
void MainEncSwi(byte f1);
void MainEncIncDcr(byte mx,byte flg);


