duminică, 12 ianuarie 2014

PIC - Folosirea Butoanelor (TouchButton) in aplicatii cu microcontroller PIC

In articolul "Aplicatii cu led-uri folosind PIC16F877 partea I" v-am explicat cum putem sa ne jucam cu led-urile implicit si cu porturile microcontroller-ului. In articolul de azi vom vedea cum ne "jucam" cu butoane si anume vom conecta 3 butoane la microcontoler si cate 8 led-uri la porturile B, C, D. Butoanele vor fi conectate la portul A pinii RA1, RA2, RA3.
La apasarea butonului conecat la pinul RA1 se vor aplrinde led-urile de la portul B, la apasarea butonului conectat la pinul RA2 se vor aprinde led-urile de la portul C si la apasarea butonului conectat la pinul RA3 se vor aprinde led-urile de la portul C.

Mai jos va prezint schema electronica realizata in proteus, unde am facut si simularea:


Pe schema: butonul B1 este conectat la pinul RA1 ---- la apasarea lui se vor aprinde ledurile de la portul B
butornul B2 este conectat la pinul RA2 ---- la apasarea lui se vor aprinde led-urile de la portul C;
butonul B3 este conecat la pinul RA3 ---- la apasarea lui se vor aprinde led-urile de la portul D.
 In continuare va afisez codul sursa a programului:

bit stareB,stareC,stareD;

void main() {

  ANSEL  = 0;                                    // Configureaza pinii AN ca fiind digitali
  ANSELH = 0;
  C1ON_bit = 0;                                  // Dezactiveaza comparatoarele
  C2ON_bit = 0;


  TRISA1_bit=1;
  TRISA2_bit=1;               // seteaza pinii RA1,RA2,RA3 ca fiind de intrare
  TRISA3_bit=1;
  TRISB = 0;
  TRISC = 0;
  TRISD = 0;                                 // Configurare PORTC ca iesire
  PORTB = 0;
  PORTC = 0;
  PORTD = 0;                                  // valoarea Initiala a PORTx
  stareB = 0;
  stareC = 0;
  stareD=0;
  
  while(1) {
    if (Button(&PORTA,1,0,1)) {   PORTB=0xFF;
                                                    stareB = 1;
                                                 }
    if (stareB&&Button(&PORTA, 1, 0, 0)) {
                                                                       PORTB=0x00;
                                                                       stareB=0;
                                                                   }
   if (Button(&PORTA,2,0,1)) {
                                                 PORTC=0xFF;
                                                 stareC=1;
                                              }
    if (stareC&&Button(&PORTA, 2, 0, 0)) {
                                                                       PORTC =0x00;
                                                                       stareC=0;
                                                                   }
    if (Button(&PORTA,3,1,1)) {
                                                 PORTD=0xFF;
                                                 stareD=1;
                                                }
    if (stareD&&Button(&PORTA,3,1,0)) {
                                                                      PORTD=0x00;
                                                                      stareD=0;  
                                                                }
  }
}

In program a aparut functia Button() care are urmatoarea structura:

unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);
             unde: unsigned short *port : portul la care este conectat butonul;
                      unsigned short pin : pinul la care este conectat butonul;
                      unsigned short time : intarzierea la apasarea butonului in milisecunde;
                      unsigned shortactive_state : starea butonului apasat/neapasat  ( 1/0 );

if(Button(&PORTA,1,0,1))  : daca butonul conecat la portul a ( PORTA ) pinul 1 (RA1) cu intarzierea 0 este apsat (1) executa ceva.

Niciun comentariu:

Trimiteți un comentariu