Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 19

Счетчик с прерыванием по нажатию кнопки

14.06.2017, 11:42. Показов 2107. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите, пожалуйста, сделать код правильным. МК соединен с индикатором и кнопкой, порядок работы такой:

1. При нажатии начинается отсчет.
2. Повторное нажатие - останавливается.
3. Кнопку отпускаю, отсчет продолжается с той цифры, на которой был прерван.

А вот сам код:

C
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
#include <avr/io.h>
#define F_CPU 8000000L
#include <avr/io.h>
#include <util/delay.h>
// unsigned int i; переменная не используется
 
int main(void)
{
    unsigned char butcount=0;
    
    DDRD = 0xFF;
    DDRB = 0x00;
    PORTD = 0b00000000; // Весь регистр на выход
    PORTB = 0b00000001; // Младший бит, нулевая нога на вход
    
    const char dig [10]=  // Константный массив чисел,
    //объявлен в основной  функции
    {
        0b00000110,
        0b01011011,
        0b01001111,
        0b01100110,
        0b01101101,
        0b01111101,
        0b00000111,
        0b01111111,
        0b01101111,
        0b00111111
    };
    //---------------------------------
    
    if ((PINB&0b00000001)==1)) //Без дополнительной проверки
    while ((PINB&0b00000001)==1)) // Пустой цикл: кнопка не нажата
    {
        
    }
    
    //---------------------------------
    if ((PINB&0b00000001)==0))
    
    while (1) // Бесконечный цикл
    {
        
    
    for (i=0; i<10; i++)
    {
        _delay_ms(1500);
        
    }
    }
 
 
 
    //---------------------------------
    if ((PINB&0b00000001)==0))
    
    while ((PINB&0b00000001)==0)) // Пустой цикл: кнопка нажата
    {
        
        
    }
    PORTD=const char dig[i]; // Вывод значений в порт D
}
Переделываю уже много раз, но отладчик все равно находит ошибки. Заранее огромное спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2017, 11:42
Ответы с готовыми решениями:

Проблема с прерыванием по нажатию кнопки.
Помогите пожалуйста! У меня есть две функции с непрерывным циклом внутри. Мне нужно по прерыванию от нажатия кнопки перейти от одной...

Счётчик по нажатию кнопки
Есть рабочий код который срабатывает только когда нажимаю кнопку сам, а когда по таймеру идёт клик счётчик не работает. // Счётчик для...

Добавление текстбоксов по нажатию клавиши и удаление по нажатию другой кнопки
Всем доброго времени суток. Хотел попросить помощи в написании следующего кода. Кое что набросал, но не работает при удалении...

9
1184 / 670 / 113
Регистрация: 15.05.2012
Сообщений: 4,082
14.06.2017, 17:19
Цитата Сообщение от mnirti Посмотреть сообщение
находит ошибки
Какие?
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
15.06.2017, 04:20
mnirti, с таким подходом к делу (через delay) программа окажется совершенно бесполезной - в течение 1,5 секунд она никак не будет реагировать на кнопку, и её придётся долго зажимать. Тут надо использовать таймер и прерывания.
0
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 19
15.06.2017, 11:38  [ТС]
Ошибки прикрепляю во вложении в виде принтскрина. Подскажите, пожалуйста, как поменять код с использованием таймера и прерываний. Цикл for придется выбросить?
Миниатюры
Счетчик с прерыванием по нажатию кнопки  
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
15.06.2017, 12:59
Цитата Сообщение от mnirti Посмотреть сообщение
C
1
const char dig [10]=
зачем в main запихал?
Цитата Сообщение от mnirti Посмотреть сообщение
C
1
// unsigned int i; переменная не используется
как так? а это
Цитата Сообщение от mnirti Посмотреть сообщение
C
1
for (i=0; i<10; i++)
Добавлено через 1 минуту
Цитата Сообщение от mnirti Посмотреть сообщение
C
1
PORTD=const char dig[i]; // Вывод значений в порт D
Это новое слово в программировании
0
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 19
15.06.2017, 13:20  [ТС]
Точно, новое слово Сначала код был немного другим, переменная использовалась, потом ее пришлось закомментировать по совету форумчан с ресурса радиокот. Там же посоветовали сделать массив чисел, потом решили сделать его константным. Каждый предлагает свое решение вопроса, вот только у меня никак не проясняется, что делать с кодом очередного упражнения.
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
17.06.2017, 01:38
Цитата Сообщение от mnirti Посмотреть сообщение
Подскажите, пожалуйста, как поменять код с использованием таймера и прерываний.
Есть такая IDE называется CodeVision AVR, она в разы проще студии и позволяет в буквальном смысле слова программировать мышкой, т.к. все таймеры, прерывания и много другое настраиваются прямо в окошечке мастером. К тому же в ней есть библиотека интуитивно понятных функций для работы с большим кол-вом устройств на все случаи жизни. Там разработка вашей программы даже вами займёт максимум полчаса - нужно создать 2 прерывания, по нажатию (и ни в коем случае не добавлять по отпусканию) кнопки и по таймеру. В прерывании кнопки просто чередовать включение и выключение таймера, в прерывании таймера - смену цифр.
0
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 19
19.06.2017, 08:49  [ТС]
Kukuxumushu, спасибо большое. Скачаю такую программу, мне точно пригодится. А из нее можно выгружать проект в виде обычного кода С и зашивать в МК или даже сразу осуществлять запись программы в микросхему после отладки?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
19.06.2017, 09:06
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
CodeVision AVR,
Цитата Сообщение от mnirti Посмотреть сообщение
Скачаю такую программу,
не забываем о правилах п 5.3
Запрещено размещать любые материалы, нарушающие авторские права (без разрешения правообладателя), а также ссылки на них.
и 5.7
Запрещено создание и распространение вредоносного ПО, вирусов, кряков и взлома лицензионного софта, а также публикация ссылок для их скачивания.
ибо, кара будет
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
19.06.2017, 16:00
Цитата Сообщение от mnirti Посмотреть сообщение
или даже сразу осуществлять запись программы в микросхему после отладки?
можно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.06.2017, 16:00
Помогаю со студенческими работами здесь

Разбить строку на слова по нажатию первой кнопки, отсортировать список слов по нажатию второй
Разбить строку, введённую в первую ячейку первого столбца активного листа, на слова, и вывести их в ячейки первого столбца, начиная со...

Нарисовать домик по нажатию кнопки, и звезду по нажатию на форме
Нарисовать домик по нажатию кнопки и звезду по нажатию на форме

Прорисовка в окне по нажатию кнопки(обработчик кнопки) MFC
Сообсвтенно вот какая пробелма. Создал кнопку, в ее обработчике написал, что по 2-ому нажатию левой кнопки, переменной bool drawing...

Изменить цвет кнопки (button) по нажатию кнопки
Здравствуйте, подскажите, пожалуйста, как сделать что когда нажимаешь на копку меняется цвет другой кнопки button5.Click += new...

По нажатию кнопки нужно, чтобы появлялось 3-4 кнопки
,и по нажатию на одну из них создавалось новое окно в котором будет информация указанная на кнопке. Вроде всё понимаю но когда по нажатию...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru