| .. | ||
| diagram.json | ||
| keyboard.c | ||
| keyboard.h | ||
| main.c | ||
| main.h | ||
| README.md | ||
| tm1637.c | ||
| tm1637.h | ||
| wokwi-project.txt | ||
Lab 1 — Display (TM1637 + DIP + Keypad)
1. Цель работы
Считать состояние 8 дискретных входов (DIP-переключатель) и отображать его на 7-сегментном индикаторе TM1637 в трёх режимах:
- BIN — по битам (канал 0..7 и его состояние)
- DEC — число 0..255
- HEX — число 00..FF
Переключение режимов кнопками B / D / H на матричной клавиатуре.
2. Аппаратная часть и подключения
Платформа: STM32 Nucleo (симуляция Wokwi)
Устройства:
- TM1637 (PA6 = CLK, PA7 = DIO)
- DIP switch 8 (входы: PA12, PA11, PB1, PA4, PA1, PA0, PC14, PC13)
- Keypad (матрица; используются B/D/H)
- LED-индикаторы режима: BIN (PA15), DEC (PA9), HEX (PC7)
- UART (USART2) для
printf
3. Логика работы
3.1 Считывание входов (DIP)
- Входы сконфигурированы как input + pull-down, верхние выводы DIP сидят на 3V3.
- Формируется байт
value(bit0..bit7).
3.2 Режимы отображения
- BIN: каждые ~250 мс показывается канал
Nи его состояние (h/0), канал циклически 0..7. - DEC: отображается
value(0..255). - HEX: отображается
valueкак00..FF.
3.3 Обработка клавиатуры
Нажатия:
B→ режим BIND→ режим DECH→ режим HEX
3.4 Тайминги (по коду)
- SysTick: 1 мс (
tickCount) - Скан DIP: ~каждые 10 мс
- Обновление дисплея: ~каждые 250 мс
- Скан клавиатуры: ~каждые 100 мс
4. Стейт-машина (режимы)
stateDiagram-v2
[*] --> BIN
BIN --> DEC: key 'D'
BIN --> HEX: key 'H'
DEC --> BIN: key 'B'
DEC --> HEX: key 'H'
HEX --> BIN: key 'B'
HEX --> DEC: key 'D'
5. Скриншоты состояний (ОБЯЗАТЕЛЬНО для Lab1)
BIN
DEC
HEX
6. Сборка и запуск
- открыть проект/схему и запустить симуляцию
7. Выводы
- Реализовано считывание 8 дискретных входов и вывод на TM1637 в 3 форматах.
- Переключение режимов сделано через матричную клавиатуру (B/D/H) + индикация светодиодами.
- Тайминги выполнены на SysTick без RTOS.


