Sei sulla pagina 1di 16

WWW.CLOCKSIZE.BLOGSPOT.

COM

CODIGOS FONTE PARA MICROCONTROLADOR PIC16F628A, EXEMPLOS PRATICOS:

10 EXEMPLOS FUNCIONAIS EM LINGUAGEM C

1- Acendendo um led: 2 - Acionando led por chave: 3 - Pisca-pisca: 4 - Corredor de leds: 5 - Boto de trava: 6 - Acionando led por boto: 7 - Vai e volta de leds: 8 - Contador de 0 9 com display: 9 - Contador de 0 9 com display ll: 10 - Pisca-pisca acionado por boto:

WWW.CLOCKSIZE.BLOGSPOT.COM

1- Acendendo um led:
Neste exemplo o objetivo acender um led sem o auxilio de chaves ou botes, para isso utiliza-se uma nica sada do pic16f628a , esta sada por sua vez esta ligada atravs de um resistor a um led que indica o funcionalidade do exemplo.

U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13

R1
360R

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

D1
LED-BIGY

Cdigo Fonte

#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP #use delay (clock=4000000) void main(){ output_high(pin_b0);

2 - Acionando led por chave:


Como o prprio titulo diz o exemplo a seguir tem como funo ligar e desligar um led. O que diferencia do exemplo anterior que agora alem da sada referente ao led tem tambm uma entrada acomoda a chave liga e desliga.

R2 U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13 360R

R1
360R

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

D1
LED-BIGY

Cdigo Fonte

#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP #use delay (clock=4000000) void main(){ while(1){ if((input(pin_a0))==1){ output_high(pin_b0); } else output_low(pin_b0); } }

3 - Pisca-pisca:
A seguir temos o exemplo de um pisca pisca feito com leds, como poder ser visto no cdigo fonte este ira piscar a cada 350 ms(milisegundos), e colocara a sada do pic em nvel lgico alto ou baixo.

U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13

R1
100

D1
LED-BIRY

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

Cdigo Fonte

#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP #use delay (clock=4000000) void main(){ while(true){ output_b(0b00000001); delay_ms(350); output_b(0); delay_ms(350); } }

4 - Corredor de leds:
O circuito referente ao exemplo usa todas as sadas do port_b totalizando 8 pinos (sadas), o exemplo tem como finalidade reproduzir uma corrida de leds continua que sempre volta onde comeou o ciclo.

D1 U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13

D2 D3 R1 R2 R3 100R R4 100R R5 100R R6 100R R7 100R R8 100R


100R 100R

LED-GREEN

LED-GREEN

D4 D5 D6 D7 D8

LED-GREEN

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

LED-GREEN

LED-GREEN

LED-GREEN

LED-GREEN

LED-GREEN

Cdigo Fonte

#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP #use delay (clock=4000000) void main(){ int d=0; while(true){ output_b(d); delay_ms(100); output_b(0); d=d<<1; if (d == 256) d=0;

} }

5 - Boto de trava:
Este exemplo usa duas chaves, ligadas a duas entradas do microcontrolador e consequentemente um led ligado numa sada do port_b, sua funcionalidade a seguinte, o led s ira acender se for ligado e desligado a primeira chave, mais desde que no seja apertado o boto 2, assim exemplificando um sistema de trava, pois se o boto 2 permanecer apertado o led no acende.

R2
100R

U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13

R1
100R

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

D1
LED-GREEN

Cdigo Fonte

#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP #use delay (clock=4000000) void main(){ while(true){ if((input(pin_a0)) == 1){ delay_ms(10); if(input(pin_a0) == 0){ output_high(pin_b0); } if(input(pin_a1) == 1){ output_low(pin_b0); } } } }

6 - Acionando led por boto:


Semelhante ao exemplo 2 este tem a funo de acionar um led por boto no chave, semelhante tambm ao exemplo anterior o led somente ira acender quando for solto o boto e ira apagar quando for apertado e solto novamente.

R1
100R

U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13

R2
100R

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

D1
LED-GREEN

Cdigo Fonte

#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP #use delay (clock=4000000) void main(){ int chave=0; while(true){ if(input(pin_a0)==1 && chave ==0){ while(chave==0){ if(input(pin_a0)==0){ output_high(pin_b0); chave=1; } } } if(input(pin_a0)== 1 && chave ==1){

while(chave ==1){ if(input(pin_a0)== 0){ output_low(pin_b0); chave==0; } } } } }

7 - Vai e volta de leds:


Assim como o exemplo 4 este utiliza o port_b inteiro, no utiliza nenhum boto ou chave. Seu funcionamento simples ao clicar em play no simulador Proteus disponvel no site, o led b0 acende, depois de um delay de alguns milisegundos o led a seguir acende e no apaga o anterior, isso ocorre at todos acenderem,at que o led do pino b7 apaga e depois de um delay o led b6 apaga e isso ocorre gradativamente em seqncia at que o ciclo se inicie novamente e infinitamente.
D1 R1 U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13

D2 D3 D4 D5 D6 D7 D8

LED-YELLOW

R2 100R R3 100R R4 100R R5 100R R6 100R R7 100R R8 100R


100R

LED-YELLOW

LED-YELLOW

LED-YELLOW

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

LED-YELLOW

LED-YELLOW

LED-YELLOW

LED-YELLOW

Cdigo Fonte

#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP #use delay (clock=4000000) void main(){ int i =1; while(true){ while(i <=255){ output_b(i); i= (i<<1)+ 1; delay_ms(100); if(i == 255){ output_b(i); delay_ms(100); while(i <= 255){ i = (i>>1) ; output_b(i); delay_ms(100);

if(i == 1) break; } } } } }

8 - Contador de 0 9 com display:


Este exemplo no utiliza nenhum boto ou chave e usa todo o port_b do microcontrolador. Ao port_b ligado um display de 7 segmentos de catodo comum que por conseqncia ira reproduzir um contador de 0 9 que ser repetido infinitamente.

U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

R1 R2 R3 330R R4 330R R5 330R R6 330R R7 330R


330R 330R

Cdigo Fonte

#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP #use delay (clock=4000000) void main(){ int tabela [ ]= {0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111100, 0b0000111, 0b1111111, 0b1100111}; int i = 0; while(true){

output_b(tabela[i]); delay_ms(350); i++; if(i == 10) i = 0; } }

9 - Contador de 0 9 com display ll:


Este exemplo executa a mesma funo do exemplo anterior, porventura utiliza somente 4 saidas do port_b assim viabilizando o uso das outra sadas para outra funes. Para tanto a modificao do circuito necessria, por se dizer utiliza-se um outro componente, se trata do 4511 usado como driver de display, as modificaes do circuito podem ser vista no circuito abaixo. Outra caracterstica para essa mudana se nota no cdigo onde a declarao dos pinos do display so representados por cdigo hexadecimal, (decimal no funciona neste caso).
U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13 7 1 2 6 3 4 5

U2
A B C D LT BI LE/STB 4511 QA QB QC QD QE QF QG 13 12 11 10 9 15 14

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

Cdigo fonte

#include <16f628a.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP #use delay (clock=4000000) void main(){ int tabela[]= {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9}; int i = 0; while(true){ output_b(tabela[i]); delay_ms(350); i++; if(i == 10) i = 0; } }

10 - Pisca-pisca acionado por boto:


Semelhante ao exemplo do pisca-pisca este tem a mesma funo s que o acionamento do processo controlado pelo uso de uma chave.

R1
330R

U1
16 15 4 RA7/OSC1/CLKIN RA6/OSC2/CLKOUT RA5/MCLR RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/T0CKI/CMP2 17 18 1 2 3 6 7 8 9 10 11 12 13

R2
330R

RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4 RB5 RB6/T1OSO/T1CKI RB7/T1OSI PIC16F628A

D1
LED-GREEN

Cdigo Fonte

#include <16f628a.h> #use delay(clock=4000000) #fuses INTRC,NOWDT,NOPROTECT,NOMCLR,NOLVP void main(){ while(1){ if (input(pin_a1) == 1){ output_high(pin_b0); delay_ms(200); output_low(pin_b0); delay_ms(200); } else { output_low(pin_b0); } } }

WWW.CLOCKSIZE.BLOGSPOT.COM

CODIGOS FONTE PARA MICROCONTROLADOR PIC16F628A, EXEMPLOS EXEMPLOS PRATICOS:

10 EXEMPLOS FUNCIONAIS EM LINGUAGEM C

1- Acendendo um led: 2 - Acionando led por chave: 3 - Pisca-pisca: 4 - Corredor de leds: 5 - Boto de trava: 6 - Acionando led por boto: 7 - Vai e volta de leds: 8 - Contador de 0 9 com display: 9 - Contador de 0 9 com display ll: 10 - Pisca-pisca acionado por boto:

WWW.CLOCKSIZE.BLOGSPOT.COM

Potrebbero piacerti anche