Перейти к содержанию

Подключение тактовой кнопки к PIC


BonTens86

Рекомендуемые сообщения

Доброго времени суток господа!) Вопрос к знатокам, начал изучать С++, писать начал на PIC16F628A, по мере изучения столкнулся с несколькими проблемами, первая это нужна помощь с подключением тактовой кнопки к PIC, суть проблемы в том, что при нажатии кнопки светодиод загорается, если нажать еще раз, то ничего не происходит.... Вопрос в том, как сделать выключение на эту же кнопку???? 



unsigned char CheckButton(void)
{
unsigned char result=0;
unsigned int butcount=0;
while(!RB2)
{
if(butcount < 10000)
{
butcount++;
}
else
{
result = 1;
break;
}
}
return result;
}


void kkk2 (void)
{
if(CheckButton ())
{
RB3 = 1;
{
//__delay_ms(100);
}
return;
}
}

 

Ссылка на комментарий
Поделиться на другие сайты

8 минут назад, Grig96 сказал:

a) кидайте полный код

б) навскидку (код особо не смотрел) - сделайте инверсию вывода 

в) изучайте лучше мк авр

Да как раз это и помогло, попробовал сделать инверсию, тут же все заработало) И да решил все таки через if else делать
Щас другая проблема возникла, почему то работает только одна кнопка и все.... Остальные просто загораться не хотят, что ни так, ума не приложу

Как то С больше понравился))

 

#include <pic.h>
__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS );

#define uph1 RB0 // Вверх щуп
#define pump RA0 // Помпа
#define auto1 RA1 // Клапан автоподкачки
#define downh2 RB1 // Низ щуп
#define head RA2 // Тен
#define kk1 RB2 // Кнопка 1 - Эспрессо мал
#define kk2 RB3 // Кнопка 2 - Эспрессо большой
#define kk3 RB4 // Кнопка 3 - Американо мал
#define kk4 RB5 // Кнопка 4 - Американо большой 
#define kk5 RB6 // Кнопка 5 - Горячая вода
#define kk6 RB7 // Кнопка 6 - Программирование времени работы кнопок - ???
#define exitkk1 RA3 // Выход кнопки 1 
#define exitkk2 RA4 // Выход кнопки 2
#define exitkk3 RA5 // Выход кнопки 3
#define exitkk4 RA6 // Выход кнопки 4
#define exitkk5 RA7 // Выход кнопки 5
#define _XTAL_FREQ 4000000

void podgot (void); // Подготовка МК
void down (void); // Щуп низ 
void up (void); // Щуп вверх
void kkk1 (void); // Программа кнопки 1 - Эспрессо мал
void kkk2 (void); // Программа кнопки 2 - Эспрессо большой 
//void kkk3 (void); // Программа кнопки 3 - Американо мал
// void kkk4 (void); // Программа кнопки 4 - Американо большой
// void kkk5 (void); // Программа кнопки 5 - Горячая вода
// void kkk6 (void); // Программирование времени работы кнопок - ???

bit NAG;
int counter;

void main (void)
{
podgot();
while(1)
{
up (); //Функция Вверх щупа
down (); //Функция Низ щупа
kkk1 (); //Функция Кнопки 1
kkk2 (); //Функция Кнопки 2 
}
} 

void kkk1 (void) // Программа кнопки 1
{
if (kk1==0)	// тестируем состояние порта
{
__delay_ms(100); // ожидаем 10 мс, пропускаем дребезг
if (kk1==0&&NAG==0) // снова тестируем состояние порта и флага "кнопка была нажата"
{  // если уровень низкий и клавиша, до этого не была нажата" выполняем код в скобках
NAG=1; // устанавливаем флаг кнопка нажата
exitkk1=!exitkk1; // переключаем свечение светодиода
counter++;
}
}	
else if (kk1==0)	// тестируем состояние порта
{
__delay_ms(100); // ожидаем 10 мс, пропускаем дребезг
if (kk1==0&&NAG==0) // снова тестируем состояние порта и флага "кнопка была нажата"
{  // если уровень низкий и клавиша, до этого не была нажата" выполняем код в скобках
NAG=1; // устанавливаем флаг кнопка нажата
exitkk1=!exitkk1; // переключаем свечение светодиода
counter--;
}
}
else
{
NAG=0; // сбросить флаг "кнопка нажата" - исходя из логики
}
}

void kkk2 (void) // Программа кнопки 2
{
if (kk2==0)	// тестируем состояние порта
{
__delay_ms(100); // ожидаем 10 мс, пропускаем дребезг
if (kk2==0&&NAG==0) // снова тестируем состояние порта и флага "кнопка была нажата"
{  // если уровень низкий и клавиша, до этого не была нажата" выполняем код в скобках
NAG=1; // устанавливаем флаг кнопка нажата
exitkk2=!exitkk2; // переключаем свечение светодиода
counter++;
}
}	
else if (kk2==0)	// тестируем состояние порта
{
__delay_ms(100); // ожидаем 10 мс, пропускаем дребезг
if (kk2==0&&NAG==0) // снова тестируем состояние порта и флага "кнопка была нажата"
{  // если уровень низкий и клавиша, до этого не была нажата" выполняем код в скобках
NAG=1; // устанавливаем флаг кнопка нажата
exitkk2=!exitkk2; // переключаем свечение светодиода
counter--;
}
}
else
{
NAG=0; // сбросить флаг "кнопка нажата" - исходя из логики
}
}

void up (void) //Программа вверх щупа
{
if (uph1 = 0) //Если, щуп не замкнут на землю, то
{
pump = 1; //Включение помпы
auto1 = 1; //Включение клапана автоподкачки
}
else //Если, уровень воды достиг до щупа и замкнул цепь на землю, то
{
pump = 0; //Выключение помпы
auto1 = 0; //Выключение клапана автоподкачки
}
}

void down (void)//Программа низ щупа
{
if (downh2 = 1) //Если, щуп замкнут на землю
{
head = 0; //Выключение тена
}
else //Если, вода наже уровня, то
{
head = 1; //Включение тена
}
}

void podgot (void) //Подготовка МК
{
TRISA = 0b00000000; // направление работы ножек порта А
TRISB = 0b11111111; // направление работы ножек порта В
CMCON = 0x07; // отключение компараторов
PORTA = 0b00000000; // очищаем порт А
PORTB = 0b00000000; // очищаем порт Б
RBPU = 0;  // подтягивающие R (0-вкл, 1-выкл)
}

 

Ссылка на комментарий
Поделиться на другие сайты

  • 11 месяцев спустя...

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Я конечно не спец, но не понятно, что это "кнопка" и "выход  кнопки"

 и это

В 04.06.2018 в 14:49, BonTens86 сказал:

PORTA = 0b00000000; // очищаем порт А

PORTB = 0b00000000; // очищаем порт Б

насколько я знаю, вы все выхода, куда вы подключили кнопки, устанавливаете в "0".

И что получится?

И что у вас в реале на схеме?

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

ТС появлялся последний раз 10 июля 2018 года, т.е. сдал и забыл. Итого: ничего не получится и ничего в реале.

Изменено пользователем солар

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...