Sunteți pe pagina 1din 13

Trabajo Final:

Deber llevar el circuito funcionando con todos sus componentes para probarlo
cmodamente en el saln.

Deber entregar un reporte del trabajo que contenga al menos: Texto del
problema, Diagrama de Flujo, Diagrama del Circuito, Cdigo con comentarios,
Simulacin en Proteus, y Conclusiones.

El juego a implementar debe tener 5 botones pulsadores, cuatro leds de


distintos colores y una bocina pequea. Al presionar el botn 1 se produce un
sonido DO en la bocina y enciende el primer LED, al presionar el botn 2 ser
un RE y enciende el segundo LED, el botn 3 ser MI y enciende el tercer
LED y el botn 4 corresponde a un FA y enciende el cuarto LED. El quinto
botn es para que inicie el juego.

El juego consiste en lo siguiente:

Se presiona el botn de inicio, los leds se encienden uno a uno por un segundo
indicando el inicio del juego. La persona elige un botn y lo presiona
produciendo el sonido y la luz correspondiente, un segundo despus el PIC
repite el sonido y elige aleatoriamente un segundo sonido, la persona tiene que
repetir la secuencia y elegir un tercer sonido, ahora el PIC repite la secuencia y
elige un cuarto sonido y as sucesivamente hasta que la persona logra una
secuencia de 8 sonidos correctos donde por consiguiente se gana, al ganar el
PIC enciende uno a uno los LEDS y sonidos, como si se presionara el botn de
inicio. Si al estar la persona alimentando los sonidos toca algn error el PIC es
el que gana indicando esto con 4 sonidos del DO y terminando el juego. Para
volver a comenzar se presiona el botn de inicio de juego.
Cdigo en lenguaje C
Examen y Proyecto Final

int secuencia[8]; //arreglo

int compara[8];

int tonos[4];

int random=0;

short ini=0;

int ciclos=0;

int ready=0;

int usuario=0;

short i = 0;

short numero;

int ag=0;

void sonido(int random){

switch (random)

case 261: PORTA.F0=1;break;

case 293: PORTA.F1=1;break;

case 329: PORTA.F2=1;break;

case 350: PORTA.F3=1;break;

Sound_Play(random, 500);

PORTA.F0=0;
PORTA.F1=0;

PORTA.F2=0;

PORTA.F3=0;

void botones(){

if (Button(&PORTB,4,1,1)) // geneta tono Do

sonido(tonos[0]);

while (PORTB & 0x10) ; //

if (Button(&PORTB,5,1,1)) // generador de tono Re

sonido(tonos[1]);

while (PORTB & 0x20) ; //

if (Button(&PORTB,6,1,1)) // genera tono Mi

sonido(tonos[2]);

while (PORTB & 0x40) ; //

if (Button(&PORTB,7,1,1)) // genera tono Fa

sonido(tonos[3]);

while (PORTB & 0x80) ;

void perder()

ciclos=0;

usuario=0;

sonido(261);

sonido(261);

sonido(261);
sonido(261);

usuario=999; //se forza la salida del while

ini=0; //salida de loop de juego

void ganar()

ciclos=0;

usuario=0;

sonido(261);

sonido(293);

sonido(329);

sonido(350);

usuario=999; //usuario >> ciclos

ini=0; //salida de loop de juego

void agregar()

ag=0;

//usuario++;

ciclos++;

while(ag==0)

if (Button(&PORTB,4,1,1))

secuencia[usuario]=261;

//comprobar[usuario]=
sonido(secuencia[usuario]);

ag=1;

if (Button(&PORTB,5,1,1))

secuencia[usuario]=293;

sonido(secuencia[usuario]);

ag=1;

if (Button(&PORTB,6,1,1))

secuencia[usuario]=329;

sonido(secuencia[usuario]);

ag=1;

if (Button(&PORTB,7,1,1))

secuencia[usuario]=350;

sonido(secuencia[usuario]);

ag=1;

}
void turnopc()

for(i=0;i<=ciclos;i++)

sonido(secuencia[i]); // se crea la matriz para que guarde en


memoria los sonidos

delay_ms(500);

ciclos++;

numero = rand() % 4;

secuencia[ciclos]=tonos[numero];

sonido(secuencia[ciclos]);

delay_ms(500);

void turnouser() // secuencia de usuario

usuario=0;

ready=0;

while(usuario<=ciclos)

if (Button(&PORTB,4,1,1))

compara[usuario]=261;

ready=1;

if (Button(&PORTB,5,1,1))
{

compara[usuario]=293;

ready=1;

if (Button(&PORTB,6,1,1))

compara[usuario]=329;

ready=1;

if (Button(&PORTB,7,1,1))

compara[usuario]=350;

ready=1;

if((compara[usuario]==secuencia[usuario])&&(ready==1))

sonido(compara[usuario]);

usuario++;

ready=0;

if(usuario==8)

ganar();

ready=0;

}
}

if((ready==1)&&(compara[usuario]!=secuencia[usuario] ))

perder(); // llama funcin perder porque no coincide el valor dela matriz

ready=0;

void juego() {

PORTA.F0=1;

delay_ms(250);

PORTA.F1=1;

delay_ms(250);

PORTA.F2=1;

delay_ms(250);

PORTA.F3=1;

delay_ms(250);

PORTA.F0=0;

PORTA.F1=0;

PORTA.F2=0;

PORTA.F3=0;

usuario=0;

ini=0;

ciclos=0;
for (i = 0; i < 8; i++)

secuencia[i] = 0;

for (i = 0; i < 8; i++)

compara[i] = 0;

while(ini==0)

if (Button(&PORTB,4,1,1))

secuencia[0]=261;

sonido(secuencia[0]);

if (Button(&PORTB,5,1,1))

secuencia[0]=293;

sonido(secuencia[0]);

if (Button(&PORTB,6,1,1))

secuencia[0]=329;

sonido(secuencia[0]);

if (Button(&PORTB,7,1,1))

secuencia[0]=350;

sonido(secuencia[0]);

}
if(secuencia[0]>0)

ini=1;

while(ini==1)

delay_ms(1000);

turnopc();

turnouser();

agregar();

void main() { //function principal del juego

ANSEL = 0; // All I/O pins are digital

ANSELH = 0;

TRISB = 0xF0;

TRISB.F2=1;

TRISA=0;

PORTA=0;

tonos[0]=261;

tonos[1]=293;

tonos[2]=329;

tonos[3]=350;
Sound_Init(&PORTB, 3);

while (1) {

inicio:

PORTA.F0=0;

PORTA.F1=0;

PORTA.F2=0;

PORTA.F3=0;

botones();

if (Button(&PORTB,2,1,1))

juego();

}
Diagrama elctrico del circuito de pruebas del
pic16f887
Conclusin

Se realiz el juego utilizando matrices para almacenar los


valores y para luego ser comparados con la secuencia
establecida para saber si se gana o se pierde, tambin se
utiliz la funcin de random para generar un valor de 0 a 3
para la eleccin de la computadora dndole un valor del 0-3 a
una frecuencia de sonido que corresponde al Do-Re-Mi-Fa para
despus ser enviada a la bocina.

Cdigo de honor:
Yo, Leonardo Anaya, declaro que he realizado esta prctica con estricto apego
al cdigo UDEM.

S-ar putea să vă placă și