Está en la página 1de 14

UNIVERSIDAD DE MONTERREY

DIVISION DE INGENIERIA Y TECNOLOGIAS DIVISION DE


INGIENIERIA

LABORATORIO DE MICROPROCESADORES
Trabajo Final

Nombre: Jorge Alberto Jurez Gonzlez


Matricula:296173

Carrera: IMT

San Pedro Garza Garca. NL


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]);
sonidos

// se crea la matriz para que guarde en memoria los

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.

También podría gustarte