Easyelectronics.ru

Электроника для всех
Текущее время: 17 июл 2018, 22:38

Часовой пояс: 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
Сообщения: 3440
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
Сообщения: 2911
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
Сообщения: 291
вы сами как то можете описать как считаются нажатия ? хоть по русски хоть картинкой, а то выше в коде как раз "тупо if then else", куда еще то...

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


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

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 647
Откуда: Херсон
Схему для начала нужно изменить.
Иначе она работать не будет даже при правильной программе опроса.
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
Сообщения: 647
Откуда: Херсон
Если схема реальная, то я бы заменил индикатор на общий анод ибо MD, в реале гореть не будет, так ярко как ожидаешь.

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


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

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


Вложения:
Kbrd.png
Kbrd.png [ 10.74 Кб | Просмотров: 7539 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 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
Сообщения: 3680
Откуда: г. Липецк
Не разбирался с кодом, не с руки создавать тестовый проект и тестировать.
Отлаживайте проект по частям, в одном проекте код кнопок, в другом код индикатора. Не надо валить все в кучу. Потом соберете. Иногда это можно сделать просто подключив соответствующие файлы к проекту. Вот например из проекта отладки индикатора с минимальными переделками получился подключаемый файл для 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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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