#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#use delay(crystal = 20 MHz, RESTART_WDT)
#define LCD_RS_PIN PIN_E0
#define LCD_RW_PIN PIN_E1
#define LCD_ENABLE_PIN PIN_E2
#define LCD_DATA4 PIN_D2
#define LCD_DATA5 PIN_D3
#define LCD_DATA6 PIN_D4
#define LCD_DATA7 PIN_D5
#include <lcd.c>
int andata1, andata2, tiempo = 250;
void rutina1 (void)
{
set_adc_channel(0);
if(andata1 <= 45) output_c(0b00000000);
if(andata1 > 45 && andata1 <= 50) output_c(0b00000001);
if(andata1 > 50 && andata1 <= 55) output_c(0b00000011);
if(andata1 > 55 && andata1 <= 60) output_c(0b00000111);
if(andata1 > 60 && andata1 <= 65) output_c(0b00001111);
if(andata1 > 65 && andata1 <= 70) output_c(0b00011111);
if(andata1 > 70 && andata1 <= 75) output_c(0b00111111);
if(andata1 > 75 && andata1 <= 80) output_c(0b01111111);
if(andata1 > 80 && andata1 <= 85) output_c(0b11111111);
if(andata1 > 85 && andata1 <= 90) output_d(0b00000010);
if(andata1 > 90) output_d(0b00000011);
set_adc_channel(3);
andata1 = read_adc();
output_c(0);
output_d(0);
}
void rutina2 (void)
{
set_adc_channel(0);
if(andata2 <= 45) output_b(0b00000000);
if(andata2 > 45 && andata1 <= 50) output_b(0b10000000);
if(andata2 > 50 && andata1 <= 55) output_b(0b11000000);
if(andata2 > 55 && andata1 <= 60) output_b(0b11100000);
if(andata2 > 60 && andata1 <= 65) output_b(0b11110000);
if(andata2 > 65 && andata1 <= 70) output_b(0b11111000);
if(andata2 > 70 && andata1 <= 75) output_b(0b11111100);
if(andata2 > 75 && andata1 <= 80) output_b(0b11111110);
if(andata2 > 75 && andata1 <= 85) output_b(0b11111111);
if(andata2 > 85 && andata1 <= 90) output_d(0b01000000);
if(andata2 > 90) output_d(0b11000000); //prenden leds del puerto D porterior al puerto C
set_adc_channel(1);
andata2 = read_adc();
output_b(0);
output_d(0);
}
void rutina3 (void)
{
set_adc_channel(0);
if(andata1 <= 45) output_c(0b00000000);
if(andata1 > 45 && andata1 <= 50) output_c(0b10000000);
if(andata1 > 50 && andata1 <= 55) output_c(0b11000000);
if(andata1 > 55 && andata1 <= 60) output_c(0b11100000);
if(andata1 > 60 && andata1 <= 65) output_c(0b11110000);
if(andata1 > 65 && andata1 <= 70) output_c(0b11111000);
if(andata1 > 70 && andata1 <= 75) output_c(0b11111100);
if(andata1 > 75 && andata1 <= 80) output_c(0b11111110);
if(andata1 > 80 && andata1 <= 85) output_c(0b11111111);
if(andata1 > 85 && andata1 <= 90) output_d(0b00000001);
if(andata1 > 90) output_d(0b00000011);
set_adc_channel(3);
andata1 = read_adc();
output_c(0);
output_d(0);
}
void rutina4 (void)
{ set_adc_channel(0);
if(andata2 <= 45) output_b(0b00000000);
if(andata2 > 45 && andata1 <= 50) output_b(0b00000001);
if(andata2 > 50 && andata1 <= 55) output_b(0b00000011);
if(andata2 > 55 && andata1 <= 60) output_b(0b00000111);
if(andata2 > 60 && andata1 <= 65) output_b(0b00001111);
if(andata2 > 65 && andata1 <= 70) output_b(0b00011111);
if(andata2 > 70 && andata1 <= 75) output_b(0b00111111);
if(andata2 > 75 && andata1 <= 80) output_b(0b01111111);
if(andata2 > 80 && andata1 <= 85) output_b(0b11111111);
if(andata2 > 85 && andata1 <= 90) output_d(0b01000000);
if(andata2 > 90) output_d(0b11000000); //prenden leds del puerto D posterior al puerto C
set_adc_channel(1);
andata2 = read_adc();
output_b(0);
output_d(0);
}
void rutina5 (void)
{
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000001) && output_c(0b00000001);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000010);
output_c(0b00000010);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000100);
output_c(0b00000100);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00001000);
output_c(0b00001000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00010000);
output_c(0b00010000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00100000);
output_c(0b00100000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b01000000);
output_c(0b01000000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b10000000);
output_c(0b10000000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000000) && output_c(0b00000000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b10000000);
;output_c(0b10000000); //vuelta
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b01000000) && output_c(0b01000000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00100000);
output_c(0b00100000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00010000);
output_c(0b00010000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00001000);
output_c(0b00001000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000100);
output_c(0b00000100);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000010);
output_c(0b00000010);
delay_ms(tiempo);
}
if (input(pin_A4)==1 && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000001);
output_c(0b00000001);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000001);
output_c(0b00000001);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000000);
output_c(0b00000000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b11111111);
output_c(0b11111111);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000000);
output_c(0b00000000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b11111111);
output_c(0b11111111);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000000);
output_c(0b00000000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b11111111);
output_c(0b11111111);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b00000000);
output_c(0b00000000);
delay_ms(tiempo);
}
if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
{
output_b(0b11111111);
output_c(0b11111111);
delay_ms(tiempo);
}
}
void main (void)
{
lcd_init();
int i;
int8 tiempo2 = 5;
int8 dato = 0;
set_tris_a(0b00111111);
set_tris_b(0);
set_tris_c(0);
set_tris_d(0);
set_tris_e(0);
setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_INTERNAL);
output_b(0);
output_c(0);
output_d(0);
for(;;){
if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
while(true)
{
if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
{
while(dato<1)
{
if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
{
lcd_gotoxy(1,1);
printf(LCD_PUTC, "\fCARGANDO ARCHIVO");
for (i=1;i<=16;++i)
{
lcd_gotoxy(i,2);
printf(LCD_PUTC, "*");
delay_ms( 5 );
}
}
dato ++;
printf(LCD_PUTC, "\f");
}
}
if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
{
printf(LCD_PUTC, "\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"SECCION 0");
lcd_gotoxy(1,2);
printf(lcd_putc,"MOVER PERILLA");
delay_ms(tiempo2);
}
if (input(pin_A2) && !input(pin_A5) && !input(pin_A4))
{
printf(LCD_PUTC, "\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"SECCION 1");
lcd_gotoxy(1,2);
printf(lcd_putc,"VUMETRO 1");
delay_ms(tiempo2);
}
if (input(pin_A2) && !input(pin_A5) && !input(pin_A4))
rutina1();
if (input(pin_A2) && !input(pin_A5) && !input(pin_A4))
rutina2();
if (input(pin_A5) && !input(pin_A4) && !input(pin_A2))
rutina3();
if (input(pin_A5) && !input(pin_A4) && !input(pin_A2))
rutina4();
if (!input(pin_A2) && !input(pin_A5) && input(pin_A4))
rutina5();
if (!input(pin_A2) && input(pin_A5) && !input(pin_A4))
{
printf(LCD_PUTC, "\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSECCION 2");
lcd_gotoxy(1,2);
printf(lcd_putc,"VUMETRO 2 ");
delay_ms(tiempo2);
}
if (!input(pin_A2) && !input(pin_A5) && input(pin_A4))
{
printf(LCD_PUTC, "\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSECCION 3");
lcd_gotoxy(1,2);
printf(lcd_putc,"JUEGO DE LUCES");
delay_ms(tiempo2);
}
}
}
}