Урок 1. Экран и кабина A: лифт едет по кнопкам
В картинкахПосле этого урока в доме есть одна кабина: жмёшь кнопки на её пульте — она едет, открывает двери на нужных этажах, звенит гонгом и сама решает, куда дальше: сначала все этажи в одну сторону, потом разворот. На экране видно, где кабина, открыты ли двери, какие кнопки нажаты и куда она едет.
1.1. Идея: кабина — автомат с памятью
Кабина помнит четыре вещи:
- где она — положение, 5 бит: этаж (3 бита) и шаг между этажами (2 бита);
- куда едет — направление, 1 бит;
- открыты ли двери — таймер, 3 бита;
- какие кнопки нажаты — 8 защёлок.
Раз в такт (Clock 2Hz, полсекунды) автомат смотрит на всё это и решает: стоять, открыть двери, ехать вверх или вниз. Этаж кабина проезжает за 4 такта — 2 секунды, двери держит открытыми тоже 2 секунды.
1.2. Идея: в одну сторону, пока есть куда
Правило настоящих лифтов: едем в одну сторону и останавливаемся на каждом нажатом этаже по пути; развернуться можно, только когда впереди нажатых кнопок не осталось. Для этого кабине надо знать два факта:
UPR— есть нажатая кнопка выше кабины;DNR— есть нажатая кнопка ниже.
«Выше» и «ниже» дают цепочки ИЛИ — термометр: у кабины на 4-м этаже «выше» — это 5, 6, 7, 8, «ниже» — 1, 2, 3. Решение на этаже:
- вверх:
UPR И (едем вверх ИЛИ НЕ DNR); - вниз:
DNR И (едем вниз ИЛИ НЕ UPR).
1.3. Идея: кнопка — защёлка, а не триггер
Кнопку жмут на долю секунды, а такт — полсекунды: триггер, который пишет только на фронте, нажатие пропустил бы. Поэтому кнопка ставит защёлку сразу. Гасят её три вещи: двери открылись на этом этаже, кнопка «Отмена» (гасит все кнопки кабины разом) и сброс. Нажал не тот этаж — «Отмена», потом нужный.
1.4. Сборка
Новый проект. Нужны вентили NOT, NAND, NOR, AND, OR, XOR: уже есть в библиотеке из другого набора серии — бери; хочешь собрать с нуля — урок 0; сразу к делу — вставь урок 0 (Cmd+I).
Шаг 1. Чип SRLatch — защёлка: S — запомнить 1, R — запомнить 0
Если SRLatch уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | R |
| Порт входа | выход | S |
| Порт выхода | вход | Q |
| Порт выхода | вход | nQ |
| NOR | I0 I1 O0 | R nQ Q |
| NOR | I0 I1 O0 | S Q nQ |
Ctrl+G → имя SRLatch. Ноги: входы R, S; выходы Q, nQ.
Шаг 2. Чип DLatch — защёлка данных
Если DLatch уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | D |
| Порт входа | выход | EN |
| Порт выхода | вход | Q |
| Порт выхода | вход | nQ |
| NOT | I0 O0 | D nD |
| AND | I0 I1 O0 | D EN setD |
| AND | I0 I1 O0 | nD EN rstD |
| SRLatch | S R Q nQ | setD rstD Q nQ |
Ctrl+G → имя DLatch. Ноги: входы D, EN; выходы Q, nQ.
Шаг 3. Чип DFF — триггер: запоминает D на фронте CLK
Если DFF уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | D |
| Порт входа | выход | CLK |
| Порт выхода | вход | Q |
| Порт выхода | вход | nQ |
| NOT | I0 O0 | CLK nCLK |
| DLatch | D EN Q | D nCLK mid |
| DLatch | D EN Q nQ | mid CLK Q nQ |
Ctrl+G → имя DFF. Ноги: входы D, CLK; выходы Q, nQ.
Шаг 4. Чип FA — полный сумматор
Если FA уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | A |
| Порт входа | выход | B |
| Порт входа | выход | CI |
| Порт выхода | вход | S |
| Порт выхода | вход | CO |
| XOR | I0 I1 O0 | A B p |
| XOR | I0 I1 O0 | p CI S |
| AND | I0 I1 O0 | A B g |
| AND | I0 I1 O0 | p CI pc |
| OR | I0 I1 O0 | g pc CO |
Ctrl+G → имя FA. Ноги: входы A, B, CI; выходы S, CO.
Шаг 5. Чип MUX2 — выбор из двух
Если MUX2 уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | A |
| Порт входа | выход | B |
| Порт входа | выход | S |
| Порт выхода | вход | Y |
| NOT | I0 O0 | S nS |
| NAND | I0 I1 O0 | A nS na |
| NAND | I0 I1 O0 | B S nb |
| NAND | I0 I1 O0 | na nb Y |
Ctrl+G → имя MUX2. Ноги: входы A, B, S; выходы Y.
Шаг 6. Чип AND3 — И на 3 входа
Если AND3 уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | A |
| Порт входа | выход | B |
| Порт входа | выход | C |
| Порт выхода | вход | Y |
| AND | I0 I1 O0 | A B ab |
| AND | I0 I1 O0 | ab C Y |
Ctrl+G → имя AND3. Ноги: входы A, B, C; выходы Y.
Шаг 7. Чип OR3 — ИЛИ на 3 входа
Если OR3 уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | A |
| Порт входа | выход | B |
| Порт входа | выход | C |
| Порт выхода | вход | Y |
| OR | I0 I1 O0 | A B ab |
| OR | I0 I1 O0 | ab C Y |
Ctrl+G → имя OR3. Ноги: входы A, B, C; выходы Y.
Шаг 8. Чип OR4 — ИЛИ на 4 входа
Если OR4 уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | A |
| Порт входа | выход | B |
| Порт входа | выход | C |
| Порт входа | выход | D |
| Порт выхода | вход | Y |
| OR | I0 I1 O0 | A B ab |
| OR | I0 I1 O0 | C D cd |
| OR | I0 I1 O0 | ab cd Y |
Ctrl+G → имя OR4. Ноги: входы A, B, C, D; выходы Y.
Шаг 9. Чип OR8 — ИЛИ на 8 входов
Если OR8 уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | A |
| Порт входа | выход | B |
| Порт входа | выход | C |
| Порт входа | выход | D |
| Порт входа | выход | E |
| Порт входа | выход | F |
| Порт входа | выход | G |
| Порт входа | выход | H |
| Порт выхода | вход | Y |
| OR4 | A B C D Y | A B C D lo |
| OR4 | A B C D Y | E F G H hi |
| OR | I0 I1 O0 | lo hi Y |
Ctrl+G → имя OR8. Ноги: входы A, B, C, D, E, F, G, H; выходы Y.
Шаг 10. Чип DEC8 — дешифратор 3 → 8: горит один провод из восьми
Если DEC8 уже есть в библиотеке (из другого набора серии) — шаг пропусти.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | I0 |
| Порт входа | выход | I1 |
| Порт входа | выход | I2 |
| Порт выхода | вход | Y0 |
| Порт выхода | вход | Y1 |
| Порт выхода | вход | Y2 |
| Порт выхода | вход | Y3 |
| Порт выхода | вход | Y4 |
| Порт выхода | вход | Y5 |
| Порт выхода | вход | Y6 |
| Порт выхода | вход | Y7 |
| NOT | I0 O0 | I0 n0 |
| NOT | I0 O0 | I1 n1 |
| NOT | I0 O0 | I2 n2 |
| AND3 | A B C Y | n2 n1 n0 Y0 |
| AND3 | A B C Y | n2 n1 I0 Y1 |
| AND3 | A B C Y | n2 I1 n0 Y2 |
| AND3 | A B C Y | n2 I1 I0 Y3 |
| AND3 | A B C Y | I2 n1 n0 Y4 |
| AND3 | A B C Y | I2 n1 I0 Y5 |
| AND3 | A B C Y | I2 I1 n0 Y6 |
| AND3 | A B C Y | I2 I1 I0 Y7 |
Ctrl+G → имя DEC8. Ноги: входы I0, I1, I2; выходы Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7.
Шаг 11. Экран: картинка и 152 ноги
Segment LCD из палитры, ⚙ → ⬆ → project/lift/screen/lift-screen.png (88 × 130 точек). Включи Ghost. Разметка: S, клик по пятну (палочка), Enter, имя, Enter — нога появится на корпусе, метка с её именем — рядом. Каждый сегмент — одно пятно, один клик. Буквы шахт, номера этажей и стенки — фон, их не размечать.
Размечаем весь экран сразу, все три шахты: ноги шахт B и C, ▶ и квадратов вызова пока ни к чему не подключены и не горят — их провода появятся в уроках 2–4. Сегменты цифры: a — верх, дальше по часовой, g — середина.
| Что на экране | Имя ноги |
|---|---|
| шахта A, этаж 1 — рамка кабины | AC0 |
| шахта A, этаж 2 — рамка кабины | AC1 |
| шахта A, этаж 3 — рамка кабины | AC2 |
| шахта A, этаж 4 — рамка кабины | AC3 |
| шахта A, этаж 5 — рамка кабины | AC4 |
| шахта A, этаж 6 — рамка кабины | AC5 |
| шахта A, этаж 7 — рамка кабины | AC6 |
| шахта A, этаж 8 — рамка кабины | AC7 |
| шахта A, этаж 1 — створки (внутри рамки) | AD0 |
| шахта A, этаж 2 — створки (внутри рамки) | AD1 |
| шахта A, этаж 3 — створки (внутри рамки) | AD2 |
| шахта A, этаж 4 — створки (внутри рамки) | AD3 |
| шахта A, этаж 5 — створки (внутри рамки) | AD4 |
| шахта A, этаж 6 — створки (внутри рамки) | AD5 |
| шахта A, этаж 7 — створки (внутри рамки) | AD6 |
| шахта A, этаж 8 — створки (внутри рамки) | AD7 |
| шахта A, полоска между этажами 1 и 2 | AM0 |
| шахта A, полоска между этажами 2 и 3 | AM1 |
| шахта A, полоска между этажами 3 и 4 | AM2 |
| шахта A, полоска между этажами 4 и 5 | AM3 |
| шахта A, полоска между этажами 5 и 6 | AM4 |
| шахта A, полоска между этажами 6 и 7 | AM5 |
| шахта A, полоска между этажами 7 и 8 | AM6 |
| шахта A, этаж 1 — точка справа (кнопка в кабине) | AK0 |
| шахта A, этаж 2 — точка справа (кнопка в кабине) | AK1 |
| шахта A, этаж 3 — точка справа (кнопка в кабине) | AK2 |
| шахта A, этаж 4 — точка справа (кнопка в кабине) | AK3 |
| шахта A, этаж 5 — точка справа (кнопка в кабине) | AK4 |
| шахта A, этаж 6 — точка справа (кнопка в кабине) | AK5 |
| шахта A, этаж 7 — точка справа (кнопка в кабине) | AK6 |
| шахта A, этаж 8 — точка справа (кнопка в кабине) | AK7 |
| шахта A, этаж 1 — ▶ слева (назначен вызов) | AG0 |
| шахта A, этаж 2 — ▶ слева (назначен вызов) | AG1 |
| шахта A, этаж 3 — ▶ слева (назначен вызов) | AG2 |
| шахта A, этаж 4 — ▶ слева (назначен вызов) | AG3 |
| шахта A, этаж 5 — ▶ слева (назначен вызов) | AG4 |
| шахта A, этаж 6 — ▶ слева (назначен вызов) | AG5 |
| шахта A, этаж 7 — ▶ слева (назначен вызов) | AG6 |
| шахта A, этаж 8 — ▶ слева (назначен вызов) | AG7 |
| шахта A, цифра над шахтой — сегмент a | AFa |
| шахта A, цифра над шахтой — сегмент b | AFb |
| шахта A, цифра над шахтой — сегмент c | AFc |
| шахта A, цифра над шахтой — сегмент d | AFd |
| шахта A, цифра над шахтой — сегмент e | AFe |
| шахта A, цифра над шахтой — сегмент f | AFf |
| шахта A, цифра над шахтой — сегмент g | AFg |
| шахта A, стрелка ▲ | AUP |
| шахта A, стрелка ▼ | ADN |
| шахта B, этаж 1 — рамка кабины | BC0 |
| шахта B, этаж 2 — рамка кабины | BC1 |
| шахта B, этаж 3 — рамка кабины | BC2 |
| шахта B, этаж 4 — рамка кабины | BC3 |
| шахта B, этаж 5 — рамка кабины | BC4 |
| шахта B, этаж 6 — рамка кабины | BC5 |
| шахта B, этаж 7 — рамка кабины | BC6 |
| шахта B, этаж 8 — рамка кабины | BC7 |
| шахта B, этаж 1 — створки (внутри рамки) | BD0 |
| шахта B, этаж 2 — створки (внутри рамки) | BD1 |
| шахта B, этаж 3 — створки (внутри рамки) | BD2 |
| шахта B, этаж 4 — створки (внутри рамки) | BD3 |
| шахта B, этаж 5 — створки (внутри рамки) | BD4 |
| шахта B, этаж 6 — створки (внутри рамки) | BD5 |
| шахта B, этаж 7 — створки (внутри рамки) | BD6 |
| шахта B, этаж 8 — створки (внутри рамки) | BD7 |
| шахта B, полоска между этажами 1 и 2 | BM0 |
| шахта B, полоска между этажами 2 и 3 | BM1 |
| шахта B, полоска между этажами 3 и 4 | BM2 |
| шахта B, полоска между этажами 4 и 5 | BM3 |
| шахта B, полоска между этажами 5 и 6 | BM4 |
| шахта B, полоска между этажами 6 и 7 | BM5 |
| шахта B, полоска между этажами 7 и 8 | BM6 |
| шахта B, этаж 1 — точка справа (кнопка в кабине) | BK0 |
| шахта B, этаж 2 — точка справа (кнопка в кабине) | BK1 |
| шахта B, этаж 3 — точка справа (кнопка в кабине) | BK2 |
| шахта B, этаж 4 — точка справа (кнопка в кабине) | BK3 |
| шахта B, этаж 5 — точка справа (кнопка в кабине) | BK4 |
| шахта B, этаж 6 — точка справа (кнопка в кабине) | BK5 |
| шахта B, этаж 7 — точка справа (кнопка в кабине) | BK6 |
| шахта B, этаж 8 — точка справа (кнопка в кабине) | BK7 |
| шахта B, этаж 1 — ▶ слева (назначен вызов) | BG0 |
| шахта B, этаж 2 — ▶ слева (назначен вызов) | BG1 |
| шахта B, этаж 3 — ▶ слева (назначен вызов) | BG2 |
| шахта B, этаж 4 — ▶ слева (назначен вызов) | BG3 |
| шахта B, этаж 5 — ▶ слева (назначен вызов) | BG4 |
| шахта B, этаж 6 — ▶ слева (назначен вызов) | BG5 |
| шахта B, этаж 7 — ▶ слева (назначен вызов) | BG6 |
| шахта B, этаж 8 — ▶ слева (назначен вызов) | BG7 |
| шахта B, цифра над шахтой — сегмент a | BFa |
| шахта B, цифра над шахтой — сегмент b | BFb |
| шахта B, цифра над шахтой — сегмент c | BFc |
| шахта B, цифра над шахтой — сегмент d | BFd |
| шахта B, цифра над шахтой — сегмент e | BFe |
| шахта B, цифра над шахтой — сегмент f | BFf |
| шахта B, цифра над шахтой — сегмент g | BFg |
| шахта B, стрелка ▲ | BUP |
| шахта B, стрелка ▼ | BDN |
| шахта C, этаж 1 — рамка кабины | CC0 |
| шахта C, этаж 2 — рамка кабины | CC1 |
| шахта C, этаж 3 — рамка кабины | CC2 |
| шахта C, этаж 4 — рамка кабины | CC3 |
| шахта C, этаж 5 — рамка кабины | CC4 |
| шахта C, этаж 6 — рамка кабины | CC5 |
| шахта C, этаж 7 — рамка кабины | CC6 |
| шахта C, этаж 8 — рамка кабины | CC7 |
| шахта C, этаж 1 — створки (внутри рамки) | CD0 |
| шахта C, этаж 2 — створки (внутри рамки) | CD1 |
| шахта C, этаж 3 — створки (внутри рамки) | CD2 |
| шахта C, этаж 4 — створки (внутри рамки) | CD3 |
| шахта C, этаж 5 — створки (внутри рамки) | CD4 |
| шахта C, этаж 6 — створки (внутри рамки) | CD5 |
| шахта C, этаж 7 — створки (внутри рамки) | CD6 |
| шахта C, этаж 8 — створки (внутри рамки) | CD7 |
| шахта C, полоска между этажами 1 и 2 | CM0 |
| шахта C, полоска между этажами 2 и 3 | CM1 |
| шахта C, полоска между этажами 3 и 4 | CM2 |
| шахта C, полоска между этажами 4 и 5 | CM3 |
| шахта C, полоска между этажами 5 и 6 | CM4 |
| шахта C, полоска между этажами 6 и 7 | CM5 |
| шахта C, полоска между этажами 7 и 8 | CM6 |
| шахта C, этаж 1 — точка справа (кнопка в кабине) | CK0 |
| шахта C, этаж 2 — точка справа (кнопка в кабине) | CK1 |
| шахта C, этаж 3 — точка справа (кнопка в кабине) | CK2 |
| шахта C, этаж 4 — точка справа (кнопка в кабине) | CK3 |
| шахта C, этаж 5 — точка справа (кнопка в кабине) | CK4 |
| шахта C, этаж 6 — точка справа (кнопка в кабине) | CK5 |
| шахта C, этаж 7 — точка справа (кнопка в кабине) | CK6 |
| шахта C, этаж 8 — точка справа (кнопка в кабине) | CK7 |
| шахта C, этаж 1 — ▶ слева (назначен вызов) | CG0 |
| шахта C, этаж 2 — ▶ слева (назначен вызов) | CG1 |
| шахта C, этаж 3 — ▶ слева (назначен вызов) | CG2 |
| шахта C, этаж 4 — ▶ слева (назначен вызов) | CG3 |
| шахта C, этаж 5 — ▶ слева (назначен вызов) | CG4 |
| шахта C, этаж 6 — ▶ слева (назначен вызов) | CG5 |
| шахта C, этаж 7 — ▶ слева (назначен вызов) | CG6 |
| шахта C, этаж 8 — ▶ слева (назначен вызов) | CG7 |
| шахта C, цифра над шахтой — сегмент a | CFa |
| шахта C, цифра над шахтой — сегмент b | CFb |
| шахта C, цифра над шахтой — сегмент c | CFc |
| шахта C, цифра над шахтой — сегмент d | CFd |
| шахта C, цифра над шахтой — сегмент e | CFe |
| шахта C, цифра над шахтой — сегмент f | CFf |
| шахта C, цифра над шахтой — сегмент g | CFg |
| шахта C, стрелка ▲ | CUP |
| шахта C, стрелка ▼ | CDN |
| этаж 1 — квадрат у номера (вызов на этаже) | H0 |
| этаж 2 — квадрат у номера (вызов на этаже) | H1 |
| этаж 3 — квадрат у номера (вызов на этаже) | H2 |
| этаж 4 — квадрат у номера (вызов на этаже) | H3 |
| этаж 5 — квадрат у номера (вызов на этаже) | H4 |
| этаж 6 — квадрат у номера (вызов на этаже) | H5 |
| этаж 7 — квадрат у номера (вызов на этаже) | H6 |
| этаж 8 — квадрат у номера (вызов на этаже) | H7 |
Шаг 12. Питание, такт, сброс
Clock — клик по корпусу до 2Hz: такт — полсекунды, этаж кабина проезжает за 4 такта (2 секунды), двери держит открытыми 4 такта. RST — тумблер сброса; nR — его переворот, он стоит перед каждым триггером.
| Деталь | Нога | Метка |
|---|---|---|
| Power | выход | VCC |
| Ground | выход | GND |
| Clock | выход | CLK |
| Input (тумблер) | выход | RST |
| NOT | I0 O0 | RST nR |
Шаг 13. Пульт кабины A
Восемь кнопок этажей и «Отмена». Поставь их столбиком справа от экрана, «8» сверху: это пульт в кабине A. Жмём мышью.
| Деталь | Нога | Метка |
|---|---|---|
| Button «1» | выход | AB0 |
| Button «2» | выход | AB1 |
| Button «3» | выход | AB2 |
| Button «4» | выход | AB3 |
| Button «5» | выход | AB4 |
| Button «6» | выход | AB5 |
| Button «7» | выход | AB6 |
| Button «8» | выход | AB7 |
| Button «Отмена» | выход | ACAN |
Шаг 14. Где кабина
Положение — 5 бит: p4 p3 p2 — этаж (0–7, на экране 1–8), p1 p0 — шаг между этажами. atF = 1, когда шаг 0: кабина стоит ровно на этаже. DEC8 зажигает один провод y0–y7 — этаж кабины.
| Деталь | Нога | Метка |
|---|---|---|
| NOR | I0 I1 O0 | p0 p1 atF |
| NOT | I0 O0 | atF natF |
| DEC8 | I0 I1 I2 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 | p2 p3 p4 y0 y1 y2 y3 y4 y5 y6 y7 |
Шаг 15. Двери открыты
Таймер дверей t2 t1 t0 (шаг «Таймер дверей»): пока он не 0, двери открыты (OPEN).
| Деталь | Нога | Метка |
|---|---|---|
| OR3 | A B C Y | t0 t1 t2 OPEN |
| NOT | I0 O0 | OPEN ndoor |
Шаг 16. Кабина на этаже
AC<f> — кабина стоит на этаже f: это и рамка на экране. O<f> — на этаже f открыты двери: он гасит кнопку этого этажа.
| Деталь | Нога | Метка |
|---|---|---|
| AND | I0 I1 O0 | y0 atF AC0 |
| AND | I0 I1 O0 | AC0 OPEN O0 |
| AND | I0 I1 O0 | y1 atF AC1 |
| AND | I0 I1 O0 | AC1 OPEN O1 |
| AND | I0 I1 O0 | y2 atF AC2 |
| AND | I0 I1 O0 | AC2 OPEN O2 |
| AND | I0 I1 O0 | y3 atF AC3 |
| AND | I0 I1 O0 | AC3 OPEN O3 |
| AND | I0 I1 O0 | y4 atF AC4 |
| AND | I0 I1 O0 | AC4 OPEN O4 |
| AND | I0 I1 O0 | y5 atF AC5 |
| AND | I0 I1 O0 | AC5 OPEN O5 |
| AND | I0 I1 O0 | y6 atF AC6 |
| AND | I0 I1 O0 | AC6 OPEN O6 |
| AND | I0 I1 O0 | y7 atF AC7 |
| AND | I0 I1 O0 | AC7 OPEN O7 |
Шаг 17. Кнопки в кабине — защёлки
Кнопку жмут на долю секунды, а такт — полсекунды: триггер нажатие пропустил бы. Поэтому кнопка ставит защёлку SRLatch сразу. Гасит защёлку kr<f>: двери открыты на этом этаже, или «Отмена» (kc — она гасит все восемь), или сброс. Пока гасится, нажатие не проходит: S и R вместе защёлке давать нельзя. Выход AK<f> — точка справа от шахты.
| Деталь | Нога | Метка |
|---|---|---|
| OR | I0 I1 O0 | ACAN RST kc |
| OR | I0 I1 O0 | O0 kc kr0 |
| NOT | I0 O0 | kr0 nkr0 |
| AND | I0 I1 O0 | AB0 nkr0 ks0 |
| SRLatch | S R Q | ks0 kr0 AK0 |
| OR | I0 I1 O0 | O1 kc kr1 |
| NOT | I0 O0 | kr1 nkr1 |
| AND | I0 I1 O0 | AB1 nkr1 ks1 |
| SRLatch | S R Q | ks1 kr1 AK1 |
| OR | I0 I1 O0 | O2 kc kr2 |
| NOT | I0 O0 | kr2 nkr2 |
| AND | I0 I1 O0 | AB2 nkr2 ks2 |
| SRLatch | S R Q | ks2 kr2 AK2 |
| OR | I0 I1 O0 | O3 kc kr3 |
| NOT | I0 O0 | kr3 nkr3 |
| AND | I0 I1 O0 | AB3 nkr3 ks3 |
| SRLatch | S R Q | ks3 kr3 AK3 |
| OR | I0 I1 O0 | O4 kc kr4 |
| NOT | I0 O0 | kr4 nkr4 |
| AND | I0 I1 O0 | AB4 nkr4 ks4 |
| SRLatch | S R Q | ks4 kr4 AK4 |
| OR | I0 I1 O0 | O5 kc kr5 |
| NOT | I0 O0 | kr5 nkr5 |
| AND | I0 I1 O0 | AB5 nkr5 ks5 |
| SRLatch | S R Q | ks5 kr5 AK5 |
| OR | I0 I1 O0 | O6 kc kr6 |
| NOT | I0 O0 | kr6 nkr6 |
| AND | I0 I1 O0 | AB6 nkr6 ks6 |
| SRLatch | S R Q | ks6 kr6 AK6 |
| OR | I0 I1 O0 | O7 kc kr7 |
| NOT | I0 O0 | kr7 nkr7 |
| AND | I0 I1 O0 | AB7 nkr7 ks7 |
| SRLatch | S R Q | ks7 kr7 AK7 |
Шаг 18. Термометр: что ниже, что выше
a<f> = 1, если кабина ниже этажа f; b<f> = 1, если выше. Это цепочки ИЛИ от горящего y: у кабины на 4-м этаже горят a5, a6, a7 и b0…b2. Для 1-го и 8-го этажа хватает самих y0 и y7.
| Деталь | Нога | Метка |
|---|---|---|
| OR | I0 I1 O0 | y0 y1 a2 |
| OR | I0 I1 O0 | a2 y2 a3 |
| OR | I0 I1 O0 | a3 y3 a4 |
| OR | I0 I1 O0 | a4 y4 a5 |
| OR | I0 I1 O0 | a5 y5 a6 |
| OR | I0 I1 O0 | a6 y6 a7 |
| OR | I0 I1 O0 | y7 y6 b5 |
| OR | I0 I1 O0 | b5 y5 b4 |
| OR | I0 I1 O0 | b4 y4 b3 |
| OR | I0 I1 O0 | b3 y3 b2 |
| OR | I0 I1 O0 | b2 y2 b1 |
| OR | I0 I1 O0 | b1 y1 b0 |
Шаг 19. Есть заявка выше? ниже?
UPR — есть нажатая кнопка выше кабины: ИЛИ от «кнопка f И кабина ниже f». DNR — то же вниз.
| Деталь | Нога | Метка |
|---|---|---|
| AND | I0 I1 O0 | AK1 y0 ru1 |
| AND | I0 I1 O0 | AK2 a2 ru2 |
| AND | I0 I1 O0 | AK3 a3 ru3 |
| AND | I0 I1 O0 | AK4 a4 ru4 |
| AND | I0 I1 O0 | AK5 a5 ru5 |
| AND | I0 I1 O0 | AK6 a6 ru6 |
| AND | I0 I1 O0 | AK7 a7 ru7 |
| OR8 | A B C D E F G H Y | ru1 ru2 ru3 ru4 ru5 ru6 ru7 GND UPR |
| AND | I0 I1 O0 | AK0 b0 rd0 |
| AND | I0 I1 O0 | AK1 b1 rd1 |
| AND | I0 I1 O0 | AK2 b2 rd2 |
| AND | I0 I1 O0 | AK3 b3 rd3 |
| AND | I0 I1 O0 | AK4 b4 rd4 |
| AND | I0 I1 O0 | AK5 b5 rd5 |
| AND | I0 I1 O0 | AK6 y7 rd6 |
| OR8 | A B C D E F G H Y | rd0 rd1 rd2 rd3 rd4 rd5 rd6 GND DNR |
Шаг 20. Кнопка этого этажа
hK — нажата кнопка того этажа, где кабина. gOK — «едем вниз или выше пусто»: пригодится в решении и в уроке 2.
| Деталь | Нога | Метка |
|---|---|---|
| AND | I0 I1 O0 | AK0 y0 hk0 |
| AND | I0 I1 O0 | AK1 y1 hk1 |
| AND | I0 I1 O0 | AK2 y2 hk2 |
| AND | I0 I1 O0 | AK3 y3 hk3 |
| AND | I0 I1 O0 | AK4 y4 hk4 |
| AND | I0 I1 O0 | AK5 y5 hk5 |
| AND | I0 I1 O0 | AK6 y6 hk6 |
| AND | I0 I1 O0 | AK7 y7 hk7 |
| OR8 | A B C D E F G H Y | hk0 hk1 hk2 hk3 hk4 hk5 hk6 hk7 hK |
| NOT | I0 O0 | dir ndir |
| NOT | I0 O0 | UPR nUPR |
| OR | I0 I1 O0 | ndir nUPR gOK |
Шаг 21. Здесь: остановиться
here — стоим на этаже, двери закрыты, нажата кнопка этого этажа: открыть двери. Он же звенит гонгом (последний шаг).
| Деталь | Нога | Метка |
|---|---|---|
| AND3 | A B C Y | atF ndoor hK here |
Шаг 22. Решение: вверх или вниз
На этаже (двери закрыты, здесь не стоим) кабина решает: вверх, если есть заявки выше и (едем вверх или ниже пусто); вниз — наоборот. Едем в одну сторону, пока там есть заявки, — и только потом разворачиваемся.
| Деталь | Нога | Метка |
|---|---|---|
| NOT | I0 O0 | DNR nDNR |
| OR | I0 I1 O0 | dir nDNR uOK |
| AND | I0 I1 O0 | UPR uOK mvUp |
| AND | I0 I1 O0 | DNR gOK mvDn |
| NOT | I0 O0 | here nhere |
| AND3 | A B C Y | atF ndoor nhere decide |
Шаг 23. Направление
На этаже направление решается заново (mvUp; нет заявок — «вниз»), в пути и у открытых дверей держится. Триггер dir: 1 — вверх.
| Деталь | Нога | Метка |
|---|---|---|
| MUX2 | A B S Y | dir mvUp decide dirN |
| AND | I0 I1 O0 | dirN nR dirD |
| DFF | D CLK Q | dirD CLK dir |
Шаг 24. Ход
go — двигаться на этом такте: между этажами — всегда (посреди шахты лифт не стоит), на этаже — если решили ехать.
| Деталь | Нога | Метка |
|---|---|---|
| OR | I0 I1 O0 | mvUp mvDn mv |
| AND | I0 I1 O0 | decide mv go1 |
| OR | I0 I1 O0 | natF go1 go |
Шаг 25. Счётчик положения
Пять FA прибавляют к положению +1 (вверх) или 11111 (это −1: вниз) — или 0, если стоим. AND с nR — сброс на 1-й этаж.
| Деталь | Нога | Метка |
|---|---|---|
| NOT | I0 O0 | dirN ndirN |
| AND | I0 I1 O0 | go ndirN dn |
| FA | A B CI S CO | p0 go GND q0 c0 |
| FA | A B CI S CO | p1 dn c0 q1 c1 |
| FA | A B CI S CO | p2 dn c1 q2 c2 |
| FA | A B CI S CO | p3 dn c2 q3 c3 |
| FA | A B CI S CO | p4 dn c3 q4 c4 |
| AND | I0 I1 O0 | q0 nR pd0 |
| DFF | D CLK Q | pd0 CLK p0 |
| AND | I0 I1 O0 | q1 nR pd1 |
| DFF | D CLK Q | pd1 CLK p1 |
| AND | I0 I1 O0 | q2 nR pd2 |
| DFF | D CLK Q | pd2 CLK p2 |
| AND | I0 I1 O0 | q3 nR pd3 |
| DFF | D CLK Q | pd3 CLK p3 |
| AND | I0 I1 O0 | q4 nR pd4 |
| DFF | D CLK Q | pd4 CLK p4 |
Шаг 26. Таймер дверей
Открылись (here) — 4 (100), открыты — минус 1 (три FA прибавляют 111), закрыты — 0. Двери открыты 4 такта — 2 секунды.
| Деталь | Нога | Метка |
|---|---|---|
| FA | A B CI S CO | t0 VCC GND u0 e0 |
| FA | A B CI S CO | t1 VCC e0 u1 e1 |
| FA | A B CI S CO | t2 VCC e1 u2 e2 |
| AND | I0 I1 O0 | u0 OPEN v0 |
| AND | I0 I1 O0 | u1 OPEN v1 |
| AND | I0 I1 O0 | u2 OPEN v2a |
| OR | I0 I1 O0 | v2a here v2 |
| AND | I0 I1 O0 | v0 nR td0 |
| DFF | D CLK Q | td0 CLK t0 |
| AND | I0 I1 O0 | v1 nR td1 |
| DFF | D CLK Q | td1 CLK t1 |
| AND | I0 I1 O0 | v2 nR td2 |
| DFF | D CLK Q | td2 CLK t2 |
Шаг 27. Стрелки
Стрелка горит, пока есть заявки или кабина в пути: ▲ — направление вверх, ▼ — вниз.
| Деталь | Нога | Метка |
|---|---|---|
| OR8 | A B C D E F G H Y | AK0 AK1 AK2 AK3 AK4 AK5 AK6 AK7 rAny |
| OR | I0 I1 O0 | rAny natF busy |
| AND | I0 I1 O0 | dir busy AUP |
| AND | I0 I1 O0 | ndir busy ADN |
Шаг 28. Экран: створки, полоска, цифра
AD<f> — створки: кабина на этаже f и двери закрыты. AM<f> — кабина в пути между этажами f и f+1. Цифра этажа — из одного горящего y: сегмент горит на тех этажах, где он нужен (a — на 2, 3, 5, 6, 7, 8 …), поэтому каждый сегмент — одно ИЛИ.
| Деталь | Нога | Метка |
|---|---|---|
| AND | I0 I1 O0 | AC0 ndoor AD0 |
| AND | I0 I1 O0 | AC1 ndoor AD1 |
| AND | I0 I1 O0 | AC2 ndoor AD2 |
| AND | I0 I1 O0 | AC3 ndoor AD3 |
| AND | I0 I1 O0 | AC4 ndoor AD4 |
| AND | I0 I1 O0 | AC5 ndoor AD5 |
| AND | I0 I1 O0 | AC6 ndoor AD6 |
| AND | I0 I1 O0 | AC7 ndoor AD7 |
| AND | I0 I1 O0 | y0 natF AM0 |
| AND | I0 I1 O0 | y1 natF AM1 |
| AND | I0 I1 O0 | y2 natF AM2 |
| AND | I0 I1 O0 | y3 natF AM3 |
| AND | I0 I1 O0 | y4 natF AM4 |
| AND | I0 I1 O0 | y5 natF AM5 |
| AND | I0 I1 O0 | y6 natF AM6 |
| OR8 | A B C D E F G H Y | y1 y2 y4 y5 y6 y7 GND GND AFa |
| OR8 | A B C D E F G H Y | y0 y1 y2 y3 y6 y7 GND GND AFb |
| OR8 | A B C D E F G H Y | y0 y2 y3 y4 y5 y6 y7 GND AFc |
| OR8 | A B C D E F G H Y | y1 y2 y4 y5 y7 GND GND GND AFd |
| OR3 | A B C Y | y1 y5 y7 AFe |
| OR4 | A B C D Y | y3 y4 y5 y7 AFf |
| OR8 | A B C D E F G H Y | y1 y2 y3 y4 y5 y7 GND GND AFg |
Шаг 29. Гонг
Speaker из палитры: клик по значку слева — режим «зуммер», по решётке — тон 880. Звенит, пока открываются двери (here).
| Деталь | Нога | Метка |
|---|---|---|
| Speaker (зуммер, 880) | SPKR | here |
1.5. Проверка
Плату не сворачивать — в уроке 2 к ней добавятся кнопки вызова на этажах.
RSTвключить и выключить. На экране в шахтеA: кабина на 1-м этаже — рамка со створками (двери закрыты), над шахтой цифра 1, стрелок нет.- Нажми 5. Справа от шахты у 5-го этажа загорается точка, над шахтой — ▲. Кабина едет: рамка гаснет, между этажами горит полоска, цифра растёт 1 → 2 → 3 → 4. Через 8 секунд кабина на 5-м: звенит гонг, рамка пустая (двери открыты), точка гаснет, ▲ гаснет. Через 2 секунды появляются створки — двери закрылись.
- Нажми 7, 8 и 3. Кабина едет вверх: открывает двери на 7-м, потом на 8-м, потом ▼ — и едет вниз на 3-й. Мимо 3-го вверх не поехала бы: сначала все заявки в одну сторону, потом разворот.
- Нажми 6, потом Отмена, потом 5. Точка у 6 гаснет, кабина едет на 5-й.
- Нажми 1 и, пока кабина едет, — Отмена. Кабина доезжает до ближайшего этажа и встаёт, двери не открывает: посреди шахты лифт не останавливается.
- Кабина стоит с закрытыми дверями — нажми кнопку её этажа: двери открываются сразу. Пока двери открыты, кнопка этого этажа не загорается.
| Что видно | Что это |
|---|---|
| рамка со створками | кабина стоит на этаже, двери закрыты |
| пустая рамка | кабина стоит на этаже, двери открыты |
| полоска между этажами | кабина в пути |
| точка справа от шахты | нажата кнопка этого этажа в кабине |
| цифра над шахтой | этаж кабины (в пути — тот, что ниже) |
| ▲ / ▼ | куда едет, пока есть заявки |
| шахты B, C, ▶, квадраты | не горят — их подключим в уроках 2–4 |
Вставка урока 1 (Cmd+I)
Нужны вентили NOT, NAND, NOR, AND, OR, XOR (урок 0 или его вставка) и детали шагов 1–10 (SRLatch … DEC8) — они в начале вставки; если уже есть в библиотеке, удали их блоки chip. Экран (Segment LCD) и тон гонга — вручную, шаги 11 и 29.
# Урок 1 — экран и кабина A: положение, кнопки в кабине и «Отмена», двери, вверх / вниз / здесь.# Вставка: Cmd+I в проект, где есть детали урока (вентили, защёлки, FA, MUX2, DEC8 …). Segment LCD и Clock 2Hz — руками. # ---------- детали (если уже есть в библиотеке — удали их блоки) ----------chip SRLatch { portIn(R) portIn(S) portOut(Q) portOut(nQ) NOR(R, nQ, Q) NOR(S, Q, nQ)}chip DLatch { portIn(D) portIn(EN) portOut(Q) portOut(nQ) NOT(D, nD) AND(D, EN, setD) AND(nD, EN, rstD) SRLatch(S=setD, R=rstD, Q=Q, nQ=nQ)}chip DFF { portIn(D) portIn(CLK) portOut(Q) portOut(nQ) NOT(CLK, nCLK) DLatch(D=D, EN=nCLK, Q=mid) DLatch(D=mid, EN=CLK, Q=Q, nQ=nQ)}chip FA { portIn(A) portIn(B) portIn(CI) portOut(S) portOut(CO) XOR(A, B, p) XOR(p, CI, S) AND(A, B, g) AND(p, CI, pc) OR(g, pc, CO)}chip MUX2 { portIn(A) portIn(B) portIn(S) portOut(Y) NOT(S, nS) NAND(A, nS, na) NAND(B, S, nb) NAND(na, nb, Y)}chip AND3 { portIn(A) portIn(B) portIn(C) portOut(Y) AND(A, B, ab) AND(ab, C, Y)}chip OR3 { portIn(A) portIn(B) portIn(C) portOut(Y) OR(A, B, ab) OR(ab, C, Y)}chip OR4 { portIn(A) portIn(B) portIn(C) portIn(D) portOut(Y) OR(A, B, ab) OR(C, D, cd) OR(ab, cd, Y)}chip OR8 { portIn(A) portIn(B) portIn(C) portIn(D) portIn(E) portIn(F) portIn(G) portIn(H) portOut(Y) OR4(A=A, B=B, C=C, D=D, Y=lo) OR4(A=E, B=F, C=G, D=H, Y=hi) OR(lo, hi, Y)}chip DEC8 { portIn(I0) portIn(I1) portIn(I2) portOut(Y0) portOut(Y1) portOut(Y2) portOut(Y3) portOut(Y4) portOut(Y5) portOut(Y6) portOut(Y7) NOT(I0, n0) NOT(I1, n1) NOT(I2, n2) AND3(A=n2, B=n1, C=n0, Y=Y0) AND3(A=n2, B=n1, C=I0, Y=Y1) AND3(A=n2, B=I1, C=n0, Y=Y2) AND3(A=n2, B=I1, C=I0, Y=Y3) AND3(A=I2, B=n1, C=n0, Y=Y4) AND3(A=I2, B=n1, C=I0, Y=Y5) AND3(A=I2, B=I1, C=n0, Y=Y6) AND3(A=I2, B=I1, C=I0, Y=Y7)} # ---------- питание, такт, сброс ----------power(VCC)ground(GND)clock(CLK)input(RST)NOT(RST, nR)# ---------- пульт кабины A ----------button{label="1"}(AB0)button{label="2"}(AB1)button{label="3"}(AB2)button{label="4"}(AB3)button{label="5"}(AB4)button{label="6"}(AB5)button{label="7"}(AB6)button{label="8"}(AB7)button{label="Отмена"}(ACAN)# ---------- кабина A ----------# где кабина: положение p4 p3 p2 = этаж, p1 p0 = шаг между этажами (0 — стоит ровно на этаже)NOR(p0, p1, atF)NOT(atF, natF)DEC8(I0=p2, I1=p3, I2=p4, Y0=y0, Y1=y1, Y2=y2, Y3=y3, Y4=y4, Y5=y5, Y6=y6, Y7=y7)# двери открыты, пока таймер t ≠ 0OR3(A=t0, B=t1, C=t2, Y=OPEN)NOT(OPEN, ndoor)# кабина на этаже f (рамка на экране) и «двери открыты на этаже f»AND(y0, atF, AC0)AND(AC0, OPEN, O0)AND(y1, atF, AC1)AND(AC1, OPEN, O1)AND(y2, atF, AC2)AND(AC2, OPEN, O2)AND(y3, atF, AC3)AND(AC3, OPEN, O3)AND(y4, atF, AC4)AND(AC4, OPEN, O4)AND(y5, atF, AC5)AND(AC5, OPEN, O5)AND(y6, atF, AC6)AND(AC6, OPEN, O6)AND(y7, atF, AC7)AND(AC7, OPEN, O7)# кнопки в кабине: защёлка K ставится нажатием, гаснет, пока на этом этаже открыты двери, кнопкой «Отмена» и сбросом;# пока гасится — нажатие не проходит (S и R вместе защёлке нельзя)OR(ACAN, RST, kc)OR(O0, kc, kr0)NOT(kr0, nkr0)AND(AB0, nkr0, ks0)SRLatch(S=ks0, R=kr0, Q=AK0)OR(O1, kc, kr1)NOT(kr1, nkr1)AND(AB1, nkr1, ks1)SRLatch(S=ks1, R=kr1, Q=AK1)OR(O2, kc, kr2)NOT(kr2, nkr2)AND(AB2, nkr2, ks2)SRLatch(S=ks2, R=kr2, Q=AK2)OR(O3, kc, kr3)NOT(kr3, nkr3)AND(AB3, nkr3, ks3)SRLatch(S=ks3, R=kr3, Q=AK3)OR(O4, kc, kr4)NOT(kr4, nkr4)AND(AB4, nkr4, ks4)SRLatch(S=ks4, R=kr4, Q=AK4)OR(O5, kc, kr5)NOT(kr5, nkr5)AND(AB5, nkr5, ks5)SRLatch(S=ks5, R=kr5, Q=AK5)OR(O6, kc, kr6)NOT(kr6, nkr6)AND(AB6, nkr6, ks6)SRLatch(S=ks6, R=kr6, Q=AK6)OR(O7, kc, kr7)NOT(kr7, nkr7)AND(AB7, nkr7, ks7)SRLatch(S=ks7, R=kr7, Q=AK7)# термометр: a_f = кабина ниже этажа f (a1 — это y0), b_f = кабина выше этажа f (b6 — это y7)OR(y0, y1, a2)OR(a2, y2, a3)OR(a3, y3, a4)OR(a4, y4, a5)OR(a5, y5, a6)OR(a6, y6, a7)OR(y7, y6, b5)OR(b5, y5, b4)OR(b4, y4, b3)OR(b3, y3, b2)OR(b2, y2, b1)OR(b1, y1, b0)# ВЫШЕ: есть заявка выше кабины; НИЖЕ: есть заявка нижеAND(AK1, y0, ru1)AND(AK2, a2, ru2)AND(AK3, a3, ru3)AND(AK4, a4, ru4)AND(AK5, a5, ru5)AND(AK6, a6, ru6)AND(AK7, a7, ru7)OR8(A=ru1, B=ru2, C=ru3, D=ru4, E=ru5, F=ru6, G=ru7, H=GND, Y=UPR)AND(AK0, b0, rd0)AND(AK1, b1, rd1)AND(AK2, b2, rd2)AND(AK3, b3, rd3)AND(AK4, b4, rd4)AND(AK5, b5, rd5)AND(AK6, y7, rd6)OR8(A=rd0, B=rd1, C=rd2, D=rd3, E=rd4, F=rd5, G=rd6, H=GND, Y=DNR)# кнопка в кабине на этом этажеAND(AK0, y0, hk0)AND(AK1, y1, hk1)AND(AK2, y2, hk2)AND(AK3, y3, hk3)AND(AK4, y4, hk4)AND(AK5, y5, hk5)AND(AK6, y6, hk6)AND(AK7, y7, hk7)OR8(A=hk0, B=hk1, C=hk2, D=hk3, E=hk4, F=hk5, G=hk6, H=hk7, Y=hK)NOT(dir, ndir)NOT(UPR, nUPR)OR(ndir, nUPR, gOK)# здесь: стоим на этаже, двери закрыты, есть заявка этого этажаAND3(A=atF, B=ndoor, C=hK, Y=here)# решение на этаже (двери закрыты, здесь не стоим): вверх — если есть выше и (едем вверх или ниже пусто), вниз — наоборотNOT(DNR, nDNR)OR(dir, nDNR, uOK)AND(UPR, uOK, mvUp)AND(DNR, gOK, mvDn)NOT(here, nhere)AND3(A=atF, B=ndoor, C=nhere, Y=decide)# направление: на этаже решаем заново (нет заявок — «вниз»), в пути и у дверей — держимMUX2(A=dir, B=mvUp, S=decide, Y=dirN)AND(dirN, nR, dirD)DFF(D=dirD, CLK=CLK, Q=dir)# ход: между этажами — всегда, на этаже — если решили ехатьOR(mvUp, mvDn, mv)AND(decide, mv, go1)OR(natF, go1, go)# счётчик положения: +1 вверх, −1 (= +11111) внизNOT(dirN, ndirN)AND(go, ndirN, dn)FA(A=p0, B=go, CI=GND, S=q0, CO=c0)FA(A=p1, B=dn, CI=c0, S=q1, CO=c1)FA(A=p2, B=dn, CI=c1, S=q2, CO=c2)FA(A=p3, B=dn, CI=c2, S=q3, CO=c3)FA(A=p4, B=dn, CI=c3, S=q4, CO=c4)AND(q0, nR, pd0)DFF(D=pd0, CLK=CLK, Q=p0)AND(q1, nR, pd1)DFF(D=pd1, CLK=CLK, Q=p1)AND(q2, nR, pd2)DFF(D=pd2, CLK=CLK, Q=p2)AND(q3, nR, pd3)DFF(D=pd3, CLK=CLK, Q=p3)AND(q4, nR, pd4)DFF(D=pd4, CLK=CLK, Q=p4)# таймер дверей: открылись — 4 (100), открыты — минус 1, закрыты — 0FA(A=t0, B=VCC, CI=GND, S=u0, CO=e0)FA(A=t1, B=VCC, CI=e0, S=u1, CO=e1)FA(A=t2, B=VCC, CI=e1, S=u2, CO=e2)AND(u0, OPEN, v0)AND(u1, OPEN, v1)AND(u2, OPEN, v2a)OR(v2a, here, v2)AND(v0, nR, td0)DFF(D=td0, CLK=CLK, Q=t0)AND(v1, nR, td1)DFF(D=td1, CLK=CLK, Q=t1)AND(v2, nR, td2)DFF(D=td2, CLK=CLK, Q=t2)# есть заявки; стрелки — направление, пока есть заявки или едемOR8(A=AK0, B=AK1, C=AK2, D=AK3, E=AK4, F=AK5, G=AK6, H=AK7, Y=rAny)OR(rAny, natF, busy)AND(dir, busy, AUP)AND(ndir, busy, ADN)# экран: створки (двери закрыты), в пути между f и f+1, цифра этажаAND(AC0, ndoor, AD0)AND(AC1, ndoor, AD1)AND(AC2, ndoor, AD2)AND(AC3, ndoor, AD3)AND(AC4, ndoor, AD4)AND(AC5, ndoor, AD5)AND(AC6, ndoor, AD6)AND(AC7, ndoor, AD7)AND(y0, natF, AM0)AND(y1, natF, AM1)AND(y2, natF, AM2)AND(y3, natF, AM3)AND(y4, natF, AM4)AND(y5, natF, AM5)AND(y6, natF, AM6)OR8(A=y1, B=y2, C=y4, D=y5, E=y6, F=y7, G=GND, H=GND, Y=AFa)OR8(A=y0, B=y1, C=y2, D=y3, E=y6, F=y7, G=GND, H=GND, Y=AFb)OR8(A=y0, B=y2, C=y3, D=y4, E=y5, F=y6, G=y7, H=GND, Y=AFc)OR8(A=y1, B=y2, C=y4, D=y5, E=y7, F=GND, G=GND, H=GND, Y=AFd)OR3(A=y1, B=y5, C=y7, Y=AFe)OR4(A=y3, B=y4, C=y5, D=y7, Y=AFf)OR8(A=y1, B=y2, C=y3, D=y4, E=y5, F=y7, G=GND, H=GND, Y=AFg)# ---------- гонг: двери открываются ----------speaker{mode="buzz", tone=880}(here)Не получается? Что-то не работает →