На основе предыдущей записи:
“микроник.рус/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 файлы) можно – здесь.











