Top.Mail.Ru
Ответы
Аватар пользователя
1 год назад
от

Цифровая схемотехника и Micro CUP 12

Есть задание в котором надо реализовать 9-ти кнопочную панель
0-1-2
-------
3-4-5
-------
6-7-F

И я не знаю как реализовать кнопки, я для начала сделал через ключи которые надо в ручную переставлять. Есть в micro cup кнопки, и если да можно ли их забиндить на кнопки

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

Да, в Micro-Cap 12 есть кнопки. Они называются **Switch**. Чтобы добавить кнопку, перейдите в меню **Insert** > **Switch**.

Для того, чтобы забиндить кнопки на панель, вам нужно создать таблицу соответствия между номерами кнопок и их логическими значениями. Например, для вашей панели соответствия будет следующим:

```
Кнопка | Логическое значение
------- | --------
0 | 0
1 | 1
2 | 2
3 | 3
4 | 4
5 | 5
6 | 6
7 | 7
F | F
```

Эту таблицу можно создать вручную, или использовать функцию **Assign Values**. Чтобы использовать функцию **Assign Values**, выберите кнопки, которые хотите забиндить, и нажмите **Assign Values** в меню **Tools**.

В открывшемся окне введите значения в поле **Value**.

После того, как вы забиндили кнопки, вы можете использовать их в своей схеме. Например, чтобы проверить, нажата ли кнопка 0, вы можете использовать следующий код:

```
if (Switch[0].Value == 1) {
// Кнопка нажата
} else {
// Кнопка не нажата
}
```

Вот пример схемы, которая реализует 9-ти кнопочную панель:

```
// Кнопки
Switch[0]
Switch[1]
Switch[2]
Switch[3]
Switch[4]
Switch[5]
Switch[6]
Switch[7]
Switch[8]

// Таблица соответствия
int button_values[9] = {0, 1, 2, 3, 4, 5, 6, 7, 15};

// Функция проверки нажатия кнопки
void check_button(int button_number) {
if (Switch[button_number].Value == 1) {
// Кнопка нажата
} else {
// Кнопка не нажата
}
}

// Главный цикл
while (true) {
// Проверяем все кнопки
for (int i = 0; i < 9; i++) {
check_button(i);
}
}
```

Эта схема использует таблицу соответствия, чтобы определить, какое логическое значение соответствует нажатию каждой кнопки. Затем функция **check_button()** используется для проверки состояния каждой кнопки.

Вы можете использовать этот пример в качестве основы для своей схемы.

Аватар пользователя
Ученик

Да, в microcontroller unit (MCU) есть различные способы подключения кнопок. Вы можете использовать внешние кнопки, которые будут подключены к пинам ввода/вывода микроконтроллера. Для реализации 9-ти кнопочной панели вам потребуется определить, какие пины будут использоваться для каждой кнопки, и затем считывать состояние этих пинов в программе на Micro C.

Вот пример того, как можно прочитать состояние кнопок с помощью языка C и библиотеки для работы с микроконтроллером (например, STM32):

#include <stm32f4xx.h>

int main() {
// Настройка пинов для кнопок
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // Включение тактирования для порта GPIOA
GPIOA->MODER &= ~(GPIO_MODER_MODE0_Msk | GPIO_MODER_MODE1_Msk | GPIO_MODER_MODE2_Msk |
GPIO_MODER_MODE3_Msk | GPIO_MODER_MODE4_Msk | GPIO_MODER_MODE5_Msk |
GPIO_MODER_MODE6_Msk | GPIO_MODER_MODE7_Msk | GPIO_MODER_MODE8_Msk); // Установка пинов в режим ввода

while (1) {
// Считывание состояния кнопок
int button0 = (GPIOA->IDR & GPIO_IDR_ID0); // Считывание состояния пина для кнопки 0
int button1 = (GPIOA->IDR & GPIO_IDR_ID1); // Считывание состояния пина для кнопки 1
// ... (аналогично для других кнопок)

// Обработка состояния кнопок
if (button0 == 0) {
// Код, выполняемый при нажатии кнопки 0
}
if (button1 == 0) {
// Код, выполняемый при нажатии кнопки 1
}
// ... (аналогично для других кнопок)
}
}


В этом примере мы используем порт GPIOA для подключения кнопок к пинам 0-8. Мы считываем состояние каждого пина и затем выполняем определенные действия в зависимости от состояния кнопок.

Кроме того, в зависимости от того, какой именно microcontroller unit вы используете, могут быть и другие способы подключения и считывания кнопок.