BonTens86

Members
  • Публикации

    2
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

О BonTens86

  • Звание
    Новенький

Информация

  • Город
    Екатеринбург

Электроника

  • Стаж в электронике
    6-10 лет
  1. Подключение тактовой кнопки к PIC

    Да как раз это и помогло, попробовал сделать инверсию, тут же все заработало) И да решил все таки через 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-выкл) }
  2. Доброго времени суток господа!) Вопрос к знатокам, начал изучать С++, писать начал на 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; } }