Documentos de Académico
Documentos de Profesional
Documentos de Cultura
LABORATORIO DE MICROPROCESADORES
Trabajo Final
Carrera: IMT
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
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) ;
//
//
//
sonido(261);
sonido(261);
usuario=999; //se forza la salida del while
ini=0;
}
void ganar()
{
ciclos=0;
usuario=0;
sonido(261);
sonido(293);
sonido(329);
sonido(350);
usuario=999;
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
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;
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();
}
}
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.