0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 3
1

Дисплей с 5 кнопками

24.02.2024, 12:17. Показов 513. Ответов 15

Author24 — интернет-сервис помощи студентам
Помогите написать код для 7-сегментного дисплея с 4 выводами и 5 кнопками.
1 кнопка увеличение числа
2 кнопка уменьшение числа
3 кнопка запоминает выведенное на данный момент число на дисплей и прерывает работу 1 и 2 кнопки
4 кнопка запускает отсчет от запомненного числа до 9, а потом в обратном порядке до запомненного числа, и так бесконечно
5 кнопка сброс.

Думала сделать 1 и 2 кнопку через флаг, а при нажатии 3 кнопки он бы сбрасывался, соответственно тогда кнопки 1 и 2 переставали работать
Есть только простенький таймер, который при нажатии на кнопку запускает отсчет, но его надо как-то переделать


Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 #include "m8def.inc"
 
 .def TMP     = R16     //Временная переменная
 .def CNT     = R17     //Счетчик
 .def NUM     = R18     //Значение выводимое на дисплей
 
//Определение констант   (директива .equ)
.equ MAX_V    = 0xFF    //Максимально возможное значение регистра
.equ MAX_NUM  = 10      //Значение для того чтобы вовремя обнулить значение на дисплее
    
//Сегмент ОЗУ (RAM)
.DSEG
 
 //Сегмент кода (Flash)
.CSEG
.ORG 0x0000
    RJMP RESET
 
.ORG    OVF0addr     ; Timer/Counter0 Overflow
RJMP TIM0OVF
 
//Сегмент обработчиков прерываний
TIM0OVF:
    DEC CNT             //Уменьшаем счетчик
    BREQ DELAY1S        //Счетчик равен 0? (переполнение произошло 256 раз)
    RETI                //Нет, ждем
 
    DELAY1S:            
    LDI CNT,MAX_V       //Запишем в регистр-счетчик новое значение для задержки в 1 сек
    INC NUM             //Увеличим число которое собираемся выводить
 
    CPI NUM,MAX_NUM     //Дошли до предельного значения?
    BREQ ZERO           //Да, обнуляем
 
    OUT PORTC,NUM       //Нет, выводим на дисплей
RETI
ZERO:
    CLR NUM             //Обнуляем значение
    OUT PORTC,NUM       //Выводим на дисплей
RETI
//Конец сегмента обработчиков прерываний
 
 
RESET:
//Инициализация стека: (обязательно во всех МК с программным стеком AtMega)
    LDI R16, LOW(RAMEND)    //Загрузка указателя стека в конец SRAM
    OUT SPL, R16
    LDI R16, HIGH(RAMEND)   //Загрузка указателя стека в конец SRAM
    OUT SPH, R16
 
//Настройка портов ввода/вывода
//DDRx  - направление работы линии порта x (1-выход, 0-вход)
//PORTx - Значение уровня на линии порта x (1-высокий, 0-низкий)
//        если порт x настроен как вход    (1-PullUp) 
//PINx  - Уровень сигнала на линии порта x (Только для чтения)     
 
 
//Подключение линейки дисплея (PORTC) - линии (0-4) на выход
    LDI TMP, 0b00001111
    OUT DDRC, TMP
//Подключение кнопок (PORTD)-линии 0,1 - вход с подтяжкой
    LDI TMP, 0b00001111
    OUT PORTD, TMP
 
//Настройка таймера TIM0
    LDI TMP, (1<<TOIE0) //Разрешим прерывания по перепполнению таймера (по умолчанию запрещены)
    OUT TIMSK, TMP
    
    LDI CNT,MAX_V       //Запишем в регистр-счетчик значение для задержки в 1 сек
 
    SEI                 //Разрешим прерывания
 
MAIN:
//Проверяем нажата ли кнопка "Старт"?
SBIS PIND,0
RJMP SB_START
 
RJMP MAIN
 
//Нажата кнопка "Старт"
SB_START:   
SBIS PIND,0     //Кнопка опущена?
RJMP SB_START   //Нет, ждем отпускания, иначе продолжаем выполнять программу
 
//Таймеры запускаются выставлением значения в предделителе (биты CSxx регистра TCCR0)
LDI TMP, (1<<CS00)|(1<<CS01)    // Предделитель (/64)
OUT TCCR0,TMP                   // Записываем значение в регистр
 
RJMP MAIN
 
//Сегмент энергонезависимой памяти (EEPROM)
.ESEG
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2024, 12:17
Ответы с готовыми решениями:

GridBagLayout и GridLayout - промежутки между кнопками, и между кнопками и окном программы
Новичок, ногами не бейте. Иду по учебнику - сделал калькулятор с помощью GridLayout. Работает вроде...

После установки Ubuntu дисплей не определяется: "Неизвестный дисплей"
Доброго времени суток! Ноутбук: Asus K53SM. Видеоадаптеры: Intel HD Graphics 3000 (встроенный)...

Работа с кнопками
Есть простенькое и незамысловатое окошко: #!/usr/bin/env python3 # -*- coding: utf-8 -*- ...

Select с кнопками
Привет, форумчане. У меня есть 2 кнопки выбора языка, они стоят рядом, но мне хотелось бы сделать...

Непонятки с кнопками
На форме две кнопки... (сторонние контролы - пульсирующие кнопки). Вот.. и при запуске, по...

15
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,015
24.02.2024, 14:31 2
Схему приложи.
0
0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 3
25.02.2024, 04:00  [ТС] 3
вот схема
Миниатюры
Дисплей с 5 кнопками  
0
Эксперт по компьютерным сетямЭксперт NIX
13016 / 7407 / 801
Регистрация: 09.09.2009
Сообщений: 28,982
25.02.2024, 10:55 4
а как цифры показывать будем?
0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,015
25.02.2024, 11:56 5
Правый вывод - младший разряд.
0
Эксперт по компьютерным сетямЭксперт NIX
13016 / 7407 / 801
Регистрация: 09.09.2009
Сообщений: 28,982
25.02.2024, 13:42 6
Цитата Сообщение от pyzhman Посмотреть сообщение
Правый вывод - младший разряд.
модели со встроенным декодером не подскажите?
0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,015
25.02.2024, 14:18 7
7-seg
0
Эксперт по компьютерным сетямЭксперт NIX
13016 / 7407 / 801
Регистрация: 09.09.2009
Сообщений: 28,982
25.02.2024, 15:32 8
сильный ответ, а главное - содержательный
у ТС-а тоже нарисован семисегментный индикатор, только вот к нему подключено всего 4 провода. и как он (а может и вы тоже) планирует зажигать на нем, например "8", лично я не понимаю.
0
0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 3
27.02.2024, 03:13  [ТС] 9
В коде который я предоставил реализовано после нажатия на 1 кнопку запуск автоматической смены чисел от 0 до 9, код был проверен и все цифры корректно отображались от 0 до 9
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
27.02.2024, 21:26 10
Цитата Сообщение от asasin383 Посмотреть сообщение
OUT PORTC,NUM       //Выводим на дисплей
значение в порт C, а на схеме половина порта C висит в воздухе
Цитата Сообщение от asasin383 Посмотреть сообщение
смены чисел от 0 до 9, код был проверен и все цифры корректно отображались от 0 до 9
позвольте не поверить, или на схеме не семисементный индикатор?
0
Эксперт по компьютерным сетямЭксперт NIX
13016 / 7407 / 801
Регистрация: 09.09.2009
Сообщений: 28,982
27.02.2024, 21:45 11
Цитата Сообщение от ValeryS Посмотреть сообщение
позвольте не поверить
+1.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.02.2024, 06:10 12
Но на схеме у элемента "индикатор" всего 4 вывода - может у него внутри ещё и дешифратор встроен?
0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,015
28.02.2024, 08:35 13
В протеусе именно так. Подаёшь нибл - видишь цифру.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
28.02.2024, 09:35 14
Цитата Сообщение от pyzhman Посмотреть сообщение
В протеусе именно так.
конкретнее
Наименование типа сего индикатора
0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,015
28.02.2024, 09:55 15
Сейчас не скажу, не под рукой. Ищем по 7-seg.
0
Dmitry
28.02.2024, 15:01     Дисплей с 5 кнопками
  #16

Не по теме:

Цитата Сообщение от pyzhman Посмотреть сообщение
В протеусе именно так
а потом в реальной жизни студент открывает для себя факт, что четырьмя проводами семисегментный индикатор не зажечь....

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2024, 15:01

Работа с кнопками
разместите на форме две кнопки (button). Сделайте на кнопках следующие надписи: привет, до...

Управление кнопками
Помогите чайнику. Вот смотрите есть код: // include the library code: #include...

Окно с кнопками
Окно выглядит так. Подскажите как расположить кнопки по местам и как вообще добавить кнопку. И...

Scrollbar кнопками
Идея такая, нужно чтобы при нажатий кнопки, скроллбар DBGrid опускался вниз. Причина не...

Разделы с кнопками
Как сделать разделы с кнопками? Пишу я команду Razdel, вылезает раздел с кнопками, нажимаю на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru