LedChaser com PIC16F84A

 

Bom, este esquema é simples, então estarei colocando apenas o esquemático e o código fonte do PIC e os links de download para os códigos compilados também. Usei o CCS C para compila-los.

Esquemático:

 

Esquemático do LedChaser com PIC16F84A

Downloads:

main.hex

main.c

main.h

ledchaser.mp4

Código Fonte:

#include <16F84A.h>

#FUSES NOWDT
#FUSES XT
#FUSES NOPUT
#FUSES NOPROTECT

#use delay(clock=4000000)

int timing = 50;

void check_timer() {
   if(!INPUT(PIN_A0)) {
      if(timing != 400)
         timing = timing+10;
   }
   if(!INPUT(PIN_A1)) {
      if(timing != 30)
         timing = timing-10;
   }
}
void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

   while(true) {
   OUTPUT_B(0x80);
   delay_ms(timing);check_timer();
   OUTPUT_B(0xC0);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x60);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x30);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x18);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x0C);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x06);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x03);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x01);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x01);   
   delay_ms(timing);check_timer();
   OUTPUT_B(0x03);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x06);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x0C);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x18);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x30);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x60);
   delay_ms(timing);check_timer();
   OUTPUT_B(0xC0);
   delay_ms(timing);check_timer();
   OUTPUT_B(0x80);
   delay_ms(timing*2);
   }
}