И да, мы подошли в плотную к усложнению нашей схемы кнопкой. Больших затруднений это не вызвало. Группой товарищей была принята идея заменить четыре сегмента на один из индикации 4 цифр, при правельной сборке такой схемы исправленная программа должна работать и здесь. Но вот введение кнопки требует небольшого пересмотра алгоритма управления секундомером. Так как с этим возникли определенные сложности я размещаю схему алгоритма управления секундомером ниже.
Ранее написанная программа разделена на два блока - пошаговый отсчет секунд и индикация текущего отсчета и показана на схеме ввиде вставок кода. Теперь дело за вами. Напишите программный код управления секундомером или создайте свой альтернативный алгоритм с записью его в виде схемы и программного кода.
И да, приведенная схема алгоритма показывает реализацию управления кнопкой, а схема по которой была написана действующая программа показано ниже. Соответственно приведена не вся а только фрагмент управления кнопкой.
// Z:\home\kovi\DRACON\др длкр-20201219T045303Z-001\др длкр\tablo1a.drt
// 1. Схема - процедура, Изменение 06.02.2021 16:26:24, Начало
int kn, sch1, sch2, sch3, sch4, sch5, sch6, sch0;
void setup()
{
DDRB = 0xff;
DDRD = 0xff;
sch1 = 0;
sch2 = 0;
sch3 = 0;
sch4 = 0;
sch5 = 0;
}
void loop()
{
// ==================== Шампур
// 4. Заголовок / TABLO
// 5. Ветка / СЧЕТЧИК
// 6. Вставка / секундомер
goto L1_25;
// 7. Адрес -> 8. Ветка / кнопка
// ==================== Шампур
// 8. Ветка / кнопка
// 9. Цикл Вставка / индикация
L10: ;
// 10. Вопрос / kn == 0 == Да
if (kn == 0) goto L15;
// 11. Вопрос / kn == 2 == Да
if (kn == 2) goto L15;
// 12. Вопрос / кнопка нажата? == Да
if ((PIND & (1 << PORTD1))) goto L14;
// 13. Конец / Конец
goto L_end1;
// ==================== Шампур
L14: ;
// 14. Цикл Вопрос / кнопка нажата? == Да
if ((PIND & (1 << PORTD1))) goto L14;
L15: ;
// 15. Действие / sch6 = 0
sch6 = 0;
// 16. Вопрос / kn == 1 == Да
if (kn == 1) goto L21;
// 17. Вопрос / кнопка нажата? == Нет
if (!((PIND & (1 << PORTD1)))) goto L2_42;
// 18. Вопрос / kn == 2 == Да
if (kn == 2) goto L22;
L19: ;
// 19. Действие / кн++
kn++;
L20: ;
// 20. Цикл Вопрос / кнопка нажата? == Да
if ((PIND & (1 << PORTD1))) goto L20;
goto L_end1;
// ==================== Шампур
L21: ;
// 21. Действие / kn = 2
kn = 2;
goto L2_42;
// ==================== Шампур
L22: ;
// 22. Действие / kn = 0
kn = 0;
// 23. Действие / sch1 = 0; sch2 = 0; sch3 = 0; sch4 = 0; sch5 = 0;
sch1 = 0;
sch2 = 0;
sch3 = 0;
sch4 = 0;
sch5 = 0;
goto L19;
// Z:\home\kovi\DRACON\др длкр-20201219T045303Z-001\др длкр\tablo1a.drt
// 2. Схема - вставка, Изменение 06.02.2021 15:50:44, Начало
// ==================== Шампур
// 24. Заголовок / секундомер
L1_25: ;
// 25. Действие / //sch1++
sch1++;
// 26. Вопрос / если счетчик sch1 == 100 == Да
if (sch1 == 100) goto L1_39;
L1_27: ;
// 27. Вопрос / sch2 == 10 == Да
if (sch2 == 10) goto L1_32;
L1_28: ;
// 28. Вопрос / sch3 == 6 == Да
if (sch3 == 6) goto L1_34;
L1_29: ;
// 29. Вопрос / sch4 == 10 == Да
if (sch4 == 10) goto L1_36;
L1_30: ;
// 30. Вопрос / sch5 == 6 == Да
if (sch5 == 6) goto L1_38;
// 31. Конец / Конец
goto L2_42;
// ==================== Шампур
L1_32: ;
// 32. Действие / sch2 = 0
sch2 = 0;
// 33. Действие / sch3++
sch3++;
goto L1_28;
// ==================== Шампур
L1_34: ;
// 34. Действие / sch3= 0
sch3= 0;
// 35. Действие / sch4++
sch4++;
goto L1_29;
// ==================== Шампур
L1_36: ;
// 36. Действие / sch4= 0
sch4= 0;
// 37. Действие / sch5++
sch5++;
goto L1_30;
// ==================== Шампур
L1_38: ;
// 38. Действие / sch5= 0
sch5= 0;
goto L2_42;
// ==================== Шампур
L1_39: ;
// 39. Действие / обнулить счетчик sch1
sch1 = 0;
// 40. Действие / sch2++
sch2++;
goto L1_27;
// Z:\home\kovi\DRACON\др длкр-20201219T045303Z-001\др длкр\tablo1a.drt
// 3. Схема - вставка, Изменение 06.02.2021 16:25:26, Начало
// ==================== Шампур
// 41. Заголовок / индикация
L2_42: ;
// 42. Цикл Выбор / выбор табло
if (sch6 == 0) goto L2_44; // 43. sch6 = 0
if (sch6 == 1) goto L2_54; // 53. sch6 = 1
if (sch6 == 2) goto L2_58; // 57. sch6 = 2
goto L2_62; // 61. 3
// 43. Вариант / sch6 = 0
L2_44: ;
// 44. Действие / включить табло 1 sch0 = sch2
PORTD = 0b00001000;
sch0 = sch2;
L2_45: ;
// 45. Выбор / выбрать цифру
if (sch0 == 0) goto L2_47; // 46. sch0 = 0
if (sch0 == 1) goto L2_56; // 55. sch0 = 1
if (sch0 == 2) goto L2_60; // 59. sch0 = 2
if (sch0 == 3) goto L2_64; // 63. sch0 = 3
if (sch0 == 4) goto L2_66; // 65. sch0 = 4
if (sch0 == 5) goto L2_68; // 67. sch0 = 5
if (sch0 == 6) goto L2_70; // 69. sch0 = 6
if (sch0 == 7) goto L2_72; // 71. sch0 = 7
if (sch0 == 8) goto L2_74; // 73. sch0 = 8
goto L2_76; // 75. 9
// 46. Вариант / sch0 = 0
L2_47: ;
// 47. Действие / индикация цифры 0
PORTD &= ~(1 << 7);
PORTB = 0b00000100;
L2_48: ;
// 48. Действие / sch6++
sch6++;
// 49. Действие / выключить табло 0,1,2.3
delay(2);
// 50. Вопрос / sch6 == 5 == Нет
if (!(sch6 == 4)) goto L2_42;
// 51. Действие / sch6 = 0
sch6 = 0;
// 52. Конец / Конец
goto L10;
// ==================== Шампур
// 53. Вариант / sch6 = 1
L2_54: ;
// 54. Действие / включить табло 2 sch0 = sch3
PORTD = 0b00010000;
sch0 = sch3;
goto L2_45;
// ==================== Шампур
// 55. Вариант / sch0 = 1
L2_56: ;
// 56. Действие / индикация цифры 1
PORTD &= ~(1 << 7);
PORTB = 0b11011111;
goto L2_48;
// ==================== Шампур
// 57. Вариант / sch6 = 2
L2_58: ;
// 58. Действие / включить табло 3 sch0 = sch4
PORTD = 0b00100000;
sch0 = sch4;
goto L2_45;
// ==================== Шампур
// 59. Вариант / sch0 = 2
L2_60: ;
// 60. Действие / индикация цифры 2
PORTD |= 1 << 7;
PORTB = 0b00001000;
goto L2_48;
// ==================== Шампур
// 61. Вариант / 3
L2_62: ;
// 62. Действие / включить табло 4 sch0 = sch5
PORTD = 0b01000000;
sch0 = sch5;
goto L2_45;
// ==================== Шампур
// 63. Вариант / sch0 = 3
L2_64: ;
// 64. Действие / индикация цифры 3
PORTD &= ~(1 << 7);
PORTB = 0b11001010;
goto L2_48;
// ==================== Шампур
// 65. Вариант / sch0 = 4
L2_66: ;
// 66. Действие / индикация цифры 4
PORTD &= ~(1 << 7);
PORTB = 0b00010011;
goto L2_48;
// ==================== Шампур
// 67. Вариант / sch0 = 5
L2_68: ;
// 68. Действие / индикация цифры 5
PORTD &= ~(1 << 7);
PORTB = 0b00100010;
goto L2_48;
// ==================== Шампур
// 69. Вариант / sch0 = 6
L2_70: ;
// 70. Действие / индикация цифры 6
PORTD &= ~(1 << 7);
PORTB = 0b00100000;
goto L2_48;
// ==================== Шампур
// 71. Вариант / sch0 = 7
L2_72: ;
// 72. Действие / индикация цифры 7
PORTD &= ~(1 << 7);
PORTB = 0b00001111;
goto L2_48;
// ==================== Шампур
// 73. Вариант / sch0 = 8
L2_74: ;
// 74. Действие / индикация цифры 8
PORTD &= ~(1 << 7);
PORTB = 0b00000000;
goto L2_48;
// ==================== Шампур
// 75. Вариант / 9
L2_76: ;
// 76. Действие / индикация цифры 9
PORTD &= ~(1 << 7);
PORTB = 0b00000010;
goto L2_48;
// 1. Схема, Конец
L_end1: ;
//
}