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