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

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

24.02.2024, 12:17. Показов 842. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.02.2024, 12:17
Ответы с готовыми решениями:

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

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

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

15
1183 / 658 / 113
Регистрация: 15.05.2012
Сообщений: 4,067
24.02.2024, 14:31
Схему приложи.
0
0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 3
25.02.2024, 04:00  [ТС]
вот схема
Миниатюры
Дисплей с 5 кнопками  
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13384 / 7512 / 825
Регистрация: 09.09.2009
Сообщений: 29,386
25.02.2024, 10:55
а как цифры показывать будем?
0
1183 / 658 / 113
Регистрация: 15.05.2012
Сообщений: 4,067
25.02.2024, 11:56
Правый вывод - младший разряд.
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13384 / 7512 / 825
Регистрация: 09.09.2009
Сообщений: 29,386
25.02.2024, 13:42
Цитата Сообщение от pyzhman Посмотреть сообщение
Правый вывод - младший разряд.
модели со встроенным декодером не подскажите?
0
1183 / 658 / 113
Регистрация: 15.05.2012
Сообщений: 4,067
25.02.2024, 14:18
7-seg
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13384 / 7512 / 825
Регистрация: 09.09.2009
Сообщений: 29,386
25.02.2024, 15:32
сильный ответ, а главное - содержательный
у ТС-а тоже нарисован семисегментный индикатор, только вот к нему подключено всего 4 провода. и как он (а может и вы тоже) планирует зажигать на нем, например "8", лично я не понимаю.
0
0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 3
27.02.2024, 03:13  [ТС]
В коде который я предоставил реализовано после нажатия на 1 кнопку запуск автоматической смены чисел от 0 до 9, код был проверен и все цифры корректно отображались от 0 до 9
0
Модератор
Эксперт по электронике
8962 / 6728 / 921
Регистрация: 14.02.2011
Сообщений: 23,754
27.02.2024, 21:26
Цитата Сообщение от asasin383 Посмотреть сообщение
OUT PORTC,NUM       //Выводим на дисплей
значение в порт C, а на схеме половина порта C висит в воздухе
Цитата Сообщение от asasin383 Посмотреть сообщение
смены чисел от 0 до 9, код был проверен и все цифры корректно отображались от 0 до 9
позвольте не поверить, или на схеме не семисементный индикатор?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13384 / 7512 / 825
Регистрация: 09.09.2009
Сообщений: 29,386
27.02.2024, 21:45
Цитата Сообщение от ValeryS Посмотреть сообщение
позвольте не поверить
+1.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8606 / 4447 / 1663
Регистрация: 01.02.2015
Сообщений: 13,810
Записей в блоге: 9
28.02.2024, 06:10
Но на схеме у элемента "индикатор" всего 4 вывода - может у него внутри ещё и дешифратор встроен?
0
1183 / 658 / 113
Регистрация: 15.05.2012
Сообщений: 4,067
28.02.2024, 08:35
В протеусе именно так. Подаёшь нибл - видишь цифру.
0
Модератор
Эксперт по электронике
8962 / 6728 / 921
Регистрация: 14.02.2011
Сообщений: 23,754
28.02.2024, 09:35
Цитата Сообщение от pyzhman Посмотреть сообщение
В протеусе именно так.
конкретнее
Наименование типа сего индикатора
0
1183 / 658 / 113
Регистрация: 15.05.2012
Сообщений: 4,067
28.02.2024, 09:55
Сейчас не скажу, не под рукой. Ищем по 7-seg.
0
28.02.2024, 15:01

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2024, 15:01
Помогаю со студенческими работами здесь

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

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

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

Управление кнопками
Помогите чайнику. Вот смотрите есть код: // include the library code: #include &lt;LiquidCrystal.h&gt; // initialize the library by...

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


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

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

Новые блоги и статьи
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
Настройка гиперпараметров с помощью Grid Search и Random Search в Python
AI_Generated 15.05.2025
В машинном обучении существует фундаментальное разделение между параметрами и гиперпараметрами моделей. Если параметры – это те величины, которые алгоритм "изучает" непосредственно из данных (веса. . .
Сериализация и десериализация данных на Python
py-thonny 15.05.2025
Сериализация — это своего рода "замораживание" объектов. Вы берёте живой, динамический объект из памяти и превращаете его в статичную строку или поток байтов. А десериализация выполняет обратный. . .
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru