embedded-systems-labs/prekol-display/README.md
2025-12-25 11:09:27 +03:00

90 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` → режим BIN
- `D` → режим DEC
- `H` → режим HEX
### 3.4 Тайминги (по коду)
- SysTick: 1 мс (`tickCount`)
- Скан DIP: ~каждые 10 мс
- Обновление дисплея: ~каждые 250 мс
- Скан клавиатуры: ~каждые 100 мс
## 4. Стейт-машина (режимы)
```mermaid
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
![BIN mode](../assets/state_bin.png)
### DEC
![DEC mode](../assets/state_dec.png)
### HEX
![HEX mode](../assets/state_hex.png)
## 6. Сборка и запуск
* открыть проект/схему и запустить симуляцию
## 7. Выводы
* Реализовано считывание 8 дискретных входов и вывод на TM1637 в 3 форматах.
* Переключение режимов сделано через матричную клавиатуру (B/D/H) + индикация светодиодами.
* Тайминги выполнены на SysTick без RTOS.
## 8. Ссылки
* [Wokwi-проект](https://wokwi.com/projects/448600013825717249)