Easyelectronics.ru

Электроника для всех
Текущее время: 15 дек 2017, 19:15

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
 Заголовок сообщения: Посчитать количество нажатий кнопки
СообщениеДобавлено: 03 мар 2015, 21:43 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
Приветствую, к пину P1^0 мк AT89s51 подключена кнопка, надо посчитать количестве нажатий и отобразить на 7SEG дисплеи если их меньше 9 и зажечь диод если больше (смотри схему).

Осталось только посчитать количество нажатий.
Посмотрите код выделенный жирным, так сработает?
Или надо ловить нажатие и затем отпускание кнопки?
Нужен ли delay?

Схема
Show


Код на С
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 03 мар 2015, 21:56 
Старожил

Зарегистрирован: 19 июн 2012, 14:17
Сообщения: 3437
Numerikon писал(а):
Или надо ловить нажатие и затем отпускание кнопки?

Надо, иначе одно нажатие будет посчитано несколько раз

Numerikon писал(а):
unsigned char contador; // счетчик нажатий
sbit botao=P1^0; // кнопка

Пишите код еще, я так испанский может выучу :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 03 мар 2015, 22:37 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
яверт писал(а):
Numerikon писал(а):
Или надо ловить нажатие и затем отпускание кнопки?

Надо, иначе одно нажатие будет посчитано несколько раз

Numerikon писал(а):
unsigned char contador; // счетчик нажатий
sbit botao=P1^0; // кнопка

Пишите код еще, я так испанский может выучу :)

А можете пример кода дать для нажатия и отпускания?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 03 мар 2015, 22:49 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 2765
static u8 prevState = PORT1;

if (((PORT1 ^ prevState) & ~prevState) & BUTTON_MASK) {положительный фронт}
if (((PORT1 ^ prevState) & prevState) & BUTTON_MASK) {отрицательный фронт}
prevState = PORT1;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 04 мар 2015, 00:05 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
_pv писал(а):
static u8 prevState = PORT1;

if (((PORT1 ^ prevState) & ~prevState) & BUTTON_MASK) {положительный фронт}
if (((PORT1 ^ prevState) & prevState) & BUTTON_MASK) {отрицательный фронт}
prevState = PORT1;

Спасибо, попробую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 04 мар 2015, 00:44 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
А никак нельзя сделать это тупо с использованием if then else?
Ваш код я скопировал (чтобы скомпилировался пришлось немного поменять) но похоже что не работает (симулировал в proteus) да и если честно я на 100% его не понял.
Может delay на пару секунд запилить чтоб стартовал при нажатии и через пару секунд смортеть не отпустили ли кнопку?

Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 04 мар 2015, 03:01 
Старожил

Зарегистрирован: 19 мар 2014, 19:33
Сообщения: 290
вы сами как то можете описать как считаются нажатия ? хоть по русски хоть картинкой, а то выше в коде как раз "тупо if then else", куда еще то...

1 кнопка была отпущена и ее нажали - нажатие +1
2 кнопка была нажата и ее отпустили - не считаем, но фиксируем что ее отпустили


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 04 мар 2015, 03:34 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 645
Откуда: Херсон
Схему для начала нужно изменить.
Иначе она работать не будет даже при правильной программе опроса.
1. Читаем доку:
Цитата:
Port 0 is an 8-bit open drain bidirectional I/O port. As an output port, each pin can sink eight TTL inputs. When 1s are written to port 0 pins, the pins can be used as high-impedance inputs.

2. Емкость берем по меньше 10нФ кнопку ставим параллельно ней.
3. Подтягивающий резистор можно оставить тот же.

А уж потом начинаем разбираться в коде.

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 04 мар 2015, 03:38 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 645
Откуда: Херсон
Если схема реальная, то я бы заменил индикатор на общий анод ибо MD, в реале гореть не будет, так ярко как ожидаешь.

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 04 мар 2015, 08:19 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 3499
Откуда: г. Липецк
У более продвинутых С51RD2/ED2 уже есть интерфейс клавиатуры с прерываниями:


Вложения:
Kbrd.png
Kbrd.png [ 10.74 Кб | Просмотров: 7161 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 04 мар 2015, 14:33 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
Morroc писал(а):
вы сами как то можете описать как считаются нажатия ? хоть по русски хоть картинкой, а то выше в коде как раз "тупо if then else", куда еще то...

1 кнопка была отпущена и ее нажали - нажатие +1
2 кнопка была нажата и ее отпустили - не считаем, но фиксируем что ее отпустили

Оба варианта считаем как нажатие +1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 04 мар 2015, 14:39 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
После пары часво поисков нашел что то похожее, только у меня не keypad а кнопка и не lcd а 7seg.

https://electrosome.com/interfacing-key ... er-keil-c/

Попробовал встроить его тест в мой код, но безтолку. Программа просто при нажатии считает несколько десятков а то и сотен раз. (загорается led, а загорается он только когда нажатий больше 10)

Show


PS: Уф ну собственно заработало, но теперь нужно сделать тоже самое на assembly.
Если сам не справлюсь отпишу тут.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 07 мар 2015, 23:36 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
Собственно снова затык, на этот раз с кодом на asm.
Сам не могу найти в чем дело, вроде все правильно а не работает, просто дисплей погасший и на нажатие кнопки не реагирует.
Схема та же, к пину 0 порта P1 подключена кнопка, после того как нажали и отпустили кнопку счетчик инкрементируется и его значение воспроизводится на дисплеи 7 сегментов.
Повторить до бесконечности (после 9 нажатий загорается LED подключенный к пину 7 порта P1, но это уже детали)
ЗЫ CPL A - для дисплея с общим анодом, не обращайте внимания
Код :

Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 08 мар 2015, 14:00 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 3499
Откуда: г. Липецк
Не разбирался с кодом, не с руки создавать тестовый проект и тестировать.
Отлаживайте проект по частям, в одном проекте код кнопок, в другом код индикатора. Не надо валить все в кучу. Потом соберете. Иногда это можно сделать просто подключив соответствующие файлы к проекту. Вот например из проекта отладки индикатора с минимальными переделками получился подключаемый файл для Keil А51:
Show TblSymbol.A51

Судя по вашим комментариям в коде обьявления сегментов индикатора вам больше подойдет такая запись:
Цитата:
Seg_A EQU 1 << 5 ; O segmento A esta ligado ao pino 3.5
Seg_B EQU 1 << 6 ; O segmento B esta ligado ao pino 3.6
Seg_C EQU 1 << 4 ; O segmento C esta ligado ao pino 3.4
Seg_D EQU 1 << 3 ; O segmento D esta ligado ao pino 3.3
Seg_E EQU 1 << 2 ; O segmento E esta ligado ao pino 3.2
Seg_F EQU 1 << 1 ; O segmento F esta ligado ao pino 3.1
Seg_G EQU 1 << 0 ; O segmento G esta ligado ao pino 3.0

Удачи...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 08 мар 2015, 15:41 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
Спасибо, буду разбираться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Посчитать количество нажатий кнопки
СообщениеДобавлено: 08 мар 2015, 16:30 
Заглядывает иногда

Зарегистрирован: 07 янв 2013, 16:28
Сообщения: 56
Разобрался, работает!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB