Atmega8515 делаем игровые автоматы (казино) на языке С в MPLab X

На основе предыдущей записи:

“микроник.рус/7491/”

Ниже Вы сможете скачать hex, с файлы для прошивки Atmega8515.

—————————————————–
Примечание:
Запись DDRB |= (1 << 2) означает:

1 << 2 — с помощью этой части команды осуществляется сдвиг единицы влево на 2 бита, то есть справа добавляются два нулевых бита и получается число 100 (в двоичном виде). Знак «|», стоящий перед знаком присваивания «=» выполняет операцию побитного логического сложения (также называется операцией ИЛИ). В результате выполнения команды к битам регистра DDRB прибавится число 100, представленное в 8-битном регистре микроконтроллера как 00000100, и результат будет записан обратно в регистр DDRB.

——————————————————————

Программу писал в MPLab X 5.35 и компилятор MPlab XC8 версии 2.10, как установить её на Linux смотрите здесь:

Скачать MPLAB X v5.35 + MPLAB XC8 можно здесь:
“https://web.archive.org/web/20200724202813/https://www.microchip.com/development-tools/pic-and-dspic-downloads-archive”

“rutube.ru/video/eb28c94503b777a0a6ffc61dc9a5b3ed/”

1. Учимся мигать светодиодом:

Теперь давайте создадим игровой автомат из казино на Atmega8515 – сделаем пока простое устройство из 6 светодиодов (два ряда по 3 светодиода) и кнопки – нужно зажечь светодиоды так, чтобы они были в одном ряду – как на автомате “однорукий бандит”.

Вот схема устройства:

То есть 3 зелёных светодиода подключены к ножкам PC0 PC1 PC2, остальные 3 жёлтых светодиода к ножкам PA0 PA2 PA3, кнопка подключена к ножке PD2.

Вот код устройства на языке С:



#include <xc.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define F_CPU 1000000UL // 1 MHz clock speed
 
int main(void)
{
PORTC=0xFF;
DDRC=0xFF; 

PORTA=0xFF;
DDRA=0xFF; 

DDRD = 0b0000110;  // ????????????? ????? ????? PA1 2 - ??? ????
PORTD |= ( 1 << 1 ); // ?????????? ? PA1 ????????????? ???????? ?? ???? ???????
PORTD |= ( 1 << 2 ); // ?????????? ? PA2 ????????????? ???????? ?? ???? ???????
char in = 1;  // ????????? ?????????? in ? ?????????? ? ??? ????? 1
char ip = 0; // ????????? ?????????? in ? ?????????? ? ??? ????? 0 - ????? ?????????? ????? ?????? ????????
 
while (ip==0)
      {
      PORTC = 0b0000001; 
      _delay_ms(100);
      
            if (!(PIND & (1<<PIND2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 1;    // ?????? ?????? ??????
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PIND & (1 << PIND2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100); 
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}
      
   
      
      PORTC = 0b0000010; 
      _delay_ms(100);
      
        if (!(PIND & (1<<PIND2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 1;    // ?????? ?????? ??????
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PIND & (1 << PIND2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100); 
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}
      
      
      
      
      PORTC = 0b0000100; 
      _delay_ms(100);
      
        if (!(PIND & (1<<PIND2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 1;    // ?????? ?????? ??????
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PIND & (1 << PIND2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100); 
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}
      
}

while (ip==1)
{      
      PORTA = 0b0000001; 
      _delay_ms(100);
      
        if (!(PIND & (1<<PIND2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 2;    // ?????? ?????? ??????
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PIND & (1 << PIND2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100); 
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}
      
      
      
      PORTA = 0b0000100; 
      _delay_ms(100);
      
      
        if (!(PIND & (1<<PIND2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 2;    // ?????? ?????? ??????
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PIND & (1 << PIND2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);  
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}
      
      
      
      PORTA = 0b0001000;  
      _delay_ms(100);
      
  if (!(PIND & (1<<PIND2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 2;    // ?????? ?????? ??????
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PIND & (1 << PIND2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100); 
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}
      
      }

}

Скачать hex файл и файл с можно ниже:
– скачать в tar.gz архиве
– скачать в zip архиве

Видео, работы устройства:

“rutube.ru/video/1585e9eeb53b12e11a952c474569898b/”

Теперь увеличим количество светодиодов, первое, что сделаю – перекину кнопку на ножку PB2:

DDRB |= ( 1 << 2 );
PORTB |= ( 1 << 2 ); 

И нужно заменить проверку нажатия кнопки соответственно на PB2:

if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 1;    // ?????? ?????? ??????
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100); 
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}

Вот код – скачать си файл:
Скачать си файл в tar.gz архиве.
Скачать си файл в zip архиве.

Подключил 12 светодиодов (3 ряда по 4 светодиода).

Видео:

“rutube.ru/video/bf95adf6879527e6e31e735f22672313/”

Скачать hex файл и файл с для 12 светодиодов можно ниже:
– скачать в tar.gz архиве
– скачать в zip архиве

————————————–

Добавил световой эффект “змейки” по кругу при зажигании трёх светодиодов в одном ряду, как в казино!!!

Скачать hex файл и файл с для 12 светодиодов можно ниже:
– скачать в tar.gz архиве
– скачать в zip архиве

Добавил переменные, при их равенстве срабатывает выигрышная подсветка!

—————————————

Немного замедлил мигание светодиодов (для тестирования устройства – самое то), добавив код задержки перед зажиганием светодиодов – результат мне понравился – стабильная работа устройства:

Скачать hex файл и файл с для 12 светодиодов можно ниже:
– скачать в tar.gz архиве
– скачать в zip архиве

————————————-

Сделал прототип устройства – упаковал в коробку из под конфет:

Сделал выходы под + и -, а также под перепрограммирование: reset, sck, miso и mosi, а также перемычку – отключающую светодиоды при перепрограммировании.

———————————————-

Чтобы перезапустить игру – нужно выключить и включить его заново. Можно поставить перезапуск на кнопку, а также добавить музыку…

—————————————-
Добавил победоносную змейку после окончания игры ( нажимаете на кнопку и змейка из мигающих светодиодов – зажигается вновь), вот код:

//кнопка змейки
_delay_ms(100);

while (ip==3)
{
      PORTC = 0b0000000;
      PORTA = 0b0001100;
      PORTD = 0b0000000;
      
      _delay_ms(100);

        if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????





_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);


PORTC = 0b0000000;
PORTA = 0b0000000;
PORTD = 0b0000000;
_delay_ms(100);
PORTC = 0b0000001;
_delay_ms(100);
PORTC = 0b0000010;
_delay_ms(100);
PORTC = 0b0000100;
_delay_ms(100);
PORTC = 0b0001000;
_delay_ms(100);
PORTC = 0b0000000;
PORTA = 0b0010000;
_delay_ms(100);
PORTA = 0b0000000;
PORTD = 0b10000000;
_delay_ms(100);
PORTD = 0b0100000;
_delay_ms(100);
PORTD = 0b0010000;
_delay_ms(100);
PORTD = 0b0000100;
_delay_ms(100);
PORTD = 0b0000000;
PORTA = 0b0000001;
_delay_ms(100);
//--------------
PORTC = 0b0000000;
PORTA = 0b0000000;
PORTD = 0b0000000;
_delay_ms(100);
PORTC = 0b0000001;
_delay_ms(100);
PORTC = 0b0000010;
_delay_ms(100);
PORTC = 0b0000100;
_delay_ms(100);
PORTC = 0b0001000;
_delay_ms(100);
PORTC = 0b0000000;
PORTA = 0b0010000;
_delay_ms(100);
PORTA = 0b0000000;
PORTD = 0b10000000;
_delay_ms(100);
PORTD = 0b0100000;
_delay_ms(100);
PORTD = 0b0010000;
_delay_ms(100);
PORTD = 0b0000100;
_delay_ms(100);
PORTD = 0b0000000;
PORTA = 0b0000001;
_delay_ms(100);
//----------------
PORTC = 0b0000000;
PORTA = 0b0000000;
PORTD = 0b0000000;
_delay_ms(100);
PORTC = 0b0000001;
_delay_ms(100);
PORTC = 0b0000010;
_delay_ms(100);
PORTC = 0b0000100;
_delay_ms(100);
PORTC = 0b0001000;
_delay_ms(100);
PORTC = 0b0000000;
PORTA = 0b0010000;
_delay_ms(100);
PORTA = 0b0000000;
PORTD = 0b10000000;
_delay_ms(100);
PORTD = 0b0100000;
_delay_ms(100);
PORTD = 0b0010000;
_delay_ms(100);
PORTD = 0b0000100;
_delay_ms(100);
PORTD = 0b0000000;
PORTA = 0b0000001;
_delay_ms(100);
//
PORTC = 0b0000000;
PORTA = 0b0000000;
PORTD = 0b0000000;
_delay_ms(100);
PORTC = 0b0001111;
PORTA = 0b0010001;
PORTD = 0b10110100;




/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}

}

Скачать полный код в tar.gz архиве можно – здесь.

Видео:

———————————-Рулетка готовый вариант—————————

Код:

#include <xc.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define F_CPU 1000000UL // 1 MHz clock speed g

int main(void)
{

DDRB |= ( 1 << 2 ); // кнопка будет находится на PB2
PORTB |= ( 1 << 2 );

PORTC=0xFF;
DDRC=0xFF;

PORTA=0xFF;
DDRA=0xFF;


PORTD=0xFF;
DDRD=0xFF;


char in = 1;  // следит нажата ли кнопка
char ip = 0; // отвечает за ряд светодиодов 1,2,3 которые будут активны
char ia = 0; // запоминает какой светодиод загорелся в 1-ом ряду
char ib = 0; // запоминает какой светодиод загорелся в 2-ом ряду
char ic = 0; // запоминает какой светодиод загорелся в 3-ом ряду
char ir = 0; // запоминает какой светодиод загорелся в при игре в рулетку


while (ip==0)
      {
      PORTC = 0b0000001;
      _delay_ms(100);

            if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // ???
ip = 1;    // ???
ia = 1;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}

// 1 ряд светодиодов на порте C

      _delay_ms(100);
      PORTC = 0b0000010;
      _delay_ms(100);

        if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 1;    // ?????? ?????? ??????
ia = 2;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}



      _delay_ms(100);
      PORTC = 0b0000100;
      _delay_ms(100);

        if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 1;    // ?????? ?????? ??????
ia = 3;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}
      _delay_ms(100);
      PORTC = 0b0001000;
      _delay_ms(100);

        if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 1;    // ?????? ?????? ??????
ia = 4;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}


}

_delay_ms(100);

// 2 ряд светодиодов на порте A

while (ip==1)
{
      PORTA = 0b0000001;
      _delay_ms(100);

        if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 2; // ?????? ?????? ??????
ib = 1;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}


      _delay_ms(100);
      PORTA = 0b0000100;
      _delay_ms(100);


        if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 2;    // ?????? ?????? ??????
ib = 2;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}


      _delay_ms(100);
      PORTA = 0b0001000;
      _delay_ms(100);

  if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 2;    // ?????? ?????? ??????
ib = 3;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}
      _delay_ms(100);
      PORTA = 0b0010000;
      _delay_ms(100);

  if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 2;    // ?????? ?????? ??????
ib = 4;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}

      }

_delay_ms(100);



// 3 ряд светодиодов на порте D

while (ip==2)
{
      PORTD = 0b0000100;
      _delay_ms(100);

        if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 3;    // ?????? ?????? ??????
ic = 1;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}


      _delay_ms(100);
      PORTD = 0b0010000;
      _delay_ms(100);


        if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 3;    // ?????? ?????? ??????
ic = 2;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}


      _delay_ms(100);
      PORTD = 0b0100000;
      _delay_ms(100);

  if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 3;    // ?????? ?????? ??????
ic = 3;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}
      _delay_ms(100);
      PORTD = 0b10000000;
      _delay_ms(100);

  if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 3;    // ?????? ?????? ??????
ic = 4;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
break;
/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}

      }


//Выйгрыш - ia=ib=ic - светится змейка - светодиоды зажигаются по кругу

if (ia == ib && ib == ic)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
PORTC = 0b0000000;
PORTA = 0b0000000;
PORTD = 0b0000000;
_delay_ms(100);
PORTC = 0b0000001;
_delay_ms(100);
PORTC = 0b0000010;
_delay_ms(100);
PORTC = 0b0000100;
_delay_ms(100);
PORTC = 0b0001000;
_delay_ms(100);
PORTC = 0b0000000;
PORTA = 0b0010000;
_delay_ms(100);
PORTA = 0b0000000;
PORTD = 0b10000000;
_delay_ms(100);
PORTD = 0b0100000;
_delay_ms(100);
PORTD = 0b0010000;
_delay_ms(100);
PORTD = 0b0000100;
_delay_ms(100);
PORTD = 0b0000000;
PORTA = 0b0000001;
_delay_ms(100);
//--------------
PORTC = 0b0000000;
PORTA = 0b0000000;
PORTD = 0b0000000;
_delay_ms(100);
PORTC = 0b0000001;
_delay_ms(100);
PORTC = 0b0000010;
_delay_ms(100);
PORTC = 0b0000100;
_delay_ms(100);
PORTC = 0b0001000;
_delay_ms(100);
PORTC = 0b0000000;
PORTA = 0b0010000;
_delay_ms(100);
PORTA = 0b0000000;
PORTD = 0b10000000;
_delay_ms(100);
PORTD = 0b0100000;
_delay_ms(100);
PORTD = 0b0010000;
_delay_ms(100);
PORTD = 0b0000100;
_delay_ms(100);
PORTD = 0b0000000;
PORTA = 0b0000001;
_delay_ms(100);
//----------------
PORTC = 0b0000000;
PORTA = 0b0000000;
PORTD = 0b0000000;
_delay_ms(100);
PORTC = 0b0000001;
_delay_ms(100);
PORTC = 0b0000010;
_delay_ms(100);
PORTC = 0b0000100;
_delay_ms(100);
PORTC = 0b0001000;
_delay_ms(100);
PORTC = 0b0000000;
PORTA = 0b0010000;
_delay_ms(100);
PORTA = 0b0000000;
PORTD = 0b10000000;
_delay_ms(100);
PORTD = 0b0100000;
_delay_ms(100);
PORTD = 0b0010000;
_delay_ms(100);
PORTD = 0b0000100;
_delay_ms(100);
PORTD = 0b0000000;
PORTA = 0b0000001;
_delay_ms(100);
//
PORTC = 0b0000000;
PORTA = 0b0000000;
PORTD = 0b0000000;
_delay_ms(100);
PORTC = 0b0001111;
PORTA = 0b0010001;
PORTD = 0b10110100;

}

//кнопка змейки
_delay_ms(100);

while (ip==3)
{
      PORTC = 0b0000000;
      PORTA = 0b0001100;
      PORTD = 0b0000000;

      _delay_ms(0);

        if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????





_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);

 while (ip==3)
 {
PORTC = 0b0000000;
PORTA = 0b0000000;
PORTD = 0b0000000;
_delay_ms(30);
PORTC = 0b0000001;

if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 4;    // ?????? ?????? ??????
ir = 1;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
 break;
}

_delay_ms(30);
PORTC = 0b0000010;



if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 4;    // ?????? ?????? ??????
ir = 2;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
 break;
}


PORTC = 0b0000100;
_delay_ms(30);


if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 4;    // ?????? ?????? ??????
ir = 3;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
 break;
}

PORTC = 0b0001000;
_delay_ms(30);

if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
ip = 4;    // ?????? ?????? ??????
ir = 4;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
   // ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
{
in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
_delay_ms(100);
 break;
}

PORTC = 0b0000000;



PORTA = 0b0010000;
_delay_ms(30);

if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 4;    // ?????? ?????? ??????
      ir = 5;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }

PORTA = 0b0000000;
PORTD = 0b10000000;
_delay_ms(30);

if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 4;    // ?????? ?????? ??????
      ir = 6;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }

PORTD = 0b0100000;
_delay_ms(30);

if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 4;    // ?????? ?????? ??????
      ir = 7;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }
PORTD = 0b0010000;
_delay_ms(30);

if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 4;    // ?????? ?????? ??????
      ir = 8;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }

PORTD = 0b0000100;
_delay_ms(30);

if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 4;    // ?????? ?????? ??????
      ir = 9;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }

PORTD = 0b0000000;
PORTA = 0b0000001;
_delay_ms(30);

if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 4;    // ?????? ?????? ??????
      ir = 10;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }


}

if (ir == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
_delay_ms(100);
PORTC = 0b0000001;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
if (ir == 2 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
_delay_ms(100);
PORTC = 0b0000010;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
          if (ir == 3 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
_delay_ms(100);
PORTC = 0b0000100;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
if (ir == 4 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
_delay_ms(100);
PORTC = 0b0001000;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }

          if (ir == 5 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                _delay_ms(100);
                PORTA = 0b0010000;
                _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }

          if (ir == 6 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                _delay_ms(100);
                PORTD = 0b10000000;
                _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
          if (ir == 7 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                _delay_ms(100);
                PORTD = 0b0100000;
                _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
          if (ir == 8 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                _delay_ms(100);
                PORTD = 0b0010000;
                _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
          if (ir == 9 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                _delay_ms(100);
                PORTD = 0b0000100;
                _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
          if (ir == 10 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                _delay_ms(100);
                PORTA = 0b0000001;
                _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }


/* ???????? 100?? - ????? ???? ????????? ????????,
?????? ?????? ? ?????? ?????????? ?????? ?????? ?? ????? */
}

}


}

Скачать hex файл в tar.gz архиве.

Видео:

—————————————Добавил рандом————————————–

На первый ряд светодиодов – запускается цикл мигания, но высокой частоте – не видимой глазу, и только кратные 10 показываются посетителю – тем самым создан полный рандом.

Рандом будет третьей игрой в коде и на устройстве – в самом конце кода – вот видео, что получилось:

Вот фрагмент код для рандома:


_delay_ms(4000);
while (ip==4)
 {
   // for (int m = 1; m <= 4; ++m) {
        
    m = m +1;
    
    PORTC = 0b0000001;
    PORTC = 0b0000000;
    PORTC = 0b0000000;
    PORTC = 0b0000000;

if ((m == 10) || (m == 50) || (m == 90) || (m == 130))    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                PORTC = 0b0000001;
                _delay_ms(30);
          }
    
    PORTC = 0b0000010;
    PORTC = 0b0000000;
    PORTC = 0b0000000;
    PORTC = 0b0000000;
    
     if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 5;    // ?????? ?????? ??????
      ir = 31;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            m=0;
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }
    
    
    
if ((m == 20) || (m == 60) || (m == 100) || (m == 140))    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                PORTC = 0b0000010;
                _delay_ms(30);
          }
    
    
    if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 5;    // ?????? ?????? ??????
      ir = 32;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            m=0;
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }
    
    
    
    PORTC = 0b0000100;
    PORTC = 0b0000000;
    PORTC = 0b0000000;
    PORTC = 0b0000000;
    
    
if ((m == 30) || (m == 70) || (m == 110) || (m == 150))     /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                PORTC = 0b0000100;
                _delay_ms(30);
          }
    
    if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 5;    // ?????? ?????? ??????
      ir = 33;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            m=0;
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }
    
    PORTC = 0b0001000;
    PORTC = 0b0000000;
    PORTC = 0b0000000;
    PORTC = 0b0000000;
    
    
    
if ((m == 40) || (m == 80) || (m == 120) || (m == 160))     /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
          {
                PORTC = 0b0001000;
                _delay_ms(30);
          }
    
    if (!(PINB & (1<<PINB2)) && in == 1 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
{
      in = 0;    // 1. ????? ???? ??????? ???????? ??????? ???? ????? ????
      ip = 5;    // ?????? ?????? ??????
      ir = 34;
      _delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
}
// ?????? ???? ???????, ????? ????? ????? ????????:
if (PINB & (1 << PINB2) && in == 0)    /* ???? PB1 ???? ????? ??????? ? in = 0,
      ?? ?? ??????? ?? ????? ?????????? ??????, ?. ?. ??????? ?? 0 ? 1 */
      {
            m=0;
            in = 1;    // ? ???? ?????? ??????? ???????? ??????? ???? ????? ????
            _delay_ms(100);
            break;
      }
//}
}
PORTC = 0b0000000;
if (ir == 31 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
_delay_ms(100);
PORTC = 0b0000001;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
if (ir == 32 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
_delay_ms(100);
PORTC = 0b0000010;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
          if (ir == 33 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
_delay_ms(100);
PORTC = 0b0000100;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }
if (ir == 34 )    /* ???? PB1 ???? ????? ???? ? ???????? in ??? ???? = 1, ?? ?? ??????? ????????? ?????? ?? ?????, ?. ?. ??????? ?? 1 ? 0 */
         {
_delay_ms(100);
PORTC = 0b0001000;
_delay_ms(100);    // 2. ???????? 100??. ???????? ????????? ???????? ?????????
          }

Скачать полный код в формате tar.gz (hex и c файлы) можно – здесь.

Добавить комментарий