90 lines
2.9 KiB
Markdown
90 lines
2.9 KiB
Markdown
# 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
|
||
|
||

|
||
|
||
### DEC
|
||
|
||

|
||
|
||
### HEX
|
||
|
||

|
||
|
||
## 6. Сборка и запуск
|
||
|
||
* открыть проект/схему и запустить симуляцию
|
||
|
||
## 7. Выводы
|
||
|
||
* Реализовано считывание 8 дискретных входов и вывод на TM1637 в 3 форматах.
|
||
* Переключение режимов сделано через матричную клавиатуру (B/D/H) + индикация светодиодами.
|
||
* Тайминги выполнены на SysTick без RTOS.
|
||
|
||
## 8. Ссылки
|
||
|
||
* [Wokwi-проект](https://wokwi.com/projects/448600013825717249) |