Saludos soy nuevo aquí me permito solicitar ayuda en un tema de suma importancia se trata de el código en el juego simón dice lo he logrado hasta cierto modo pero necesito que la secuencia este bien os adjunto la simulación en proteus y el código en microcode..... basicamente el el juego "SIMON DICE" o "simon says" pero con 8 leds y 8 pulsantes
La pregunta aqui es de como realizar la secuencia randomica de encendido de leds y captar dicha secuencia con los pulsantes
http://www.mediafire.com/?8o1kj5mrxndz5en'****************************************************************
'* Name : Tesis Juego de Memoria V1.0 *
'* Author : Marco Pelaez *
'* Notice : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 07/Abril/2012 *
'* Version : 1.0 *
'* Notes : XTAL: 8 Mhz PIC16F877A *
'* : *
'****************************************************************
ADCON1=7 ;Pines del Puerto A como DIGITALES.
;Declaro los pines de Ingreso y los de salida
TRISA=%11000001 ;b7.b6.b5....b0
TRISB=%00000000
TRISC=%11111111
TRISD=%00000000
'---------------Configuro el Teclas opcion y mando del Juego---------------
p_Start var porta.0 'Pulsante de Inicio de Juego
Led_Status VAR porta.1
led_Ganador var porta.2
led_Perdedor var porta.3
p_L1 var portc.7 'Pulsante de Opcion de led pulsado
p_L2 var portc.6
p_L3 var portc.5
p_L4 var portc.4
p_L5 var portc.3
p_L6 var portc.2
p_L7 var portc.1
p_L8 var portc.0
'--------------- Configuro salida de los LEDS ------------------------
l_L1 VAR portb.0
l_L2 VAR portb.1
l_L3 VAR portb.2
l_L4 VAR portb.3
l_L5 VAR portb.4
l_L6 VAR portb.5
l_L7 VAR portb.6
l_L8 VAR portb.7
'---------Variables declaradas usados en el programa
X var byte
Y VAR BYTE
Zrespaldo var byte
Z VAR BYTE
captura var byte
Resultado var byte
flag var bit
repe var byte
aleatorio var byte
repe1 var bit[16]
'-----------Limpio Registros y variables para poder iniciar en condiciones cero
Clear_all:
portb=0
Z=0
x=0
Y=0
Zrespaldo=0
flag=0
captura=0
Resultado=0
'---------------------------PROGRAMA-------------------------------------------
'--Animacion con leds -----
Inicio:
gosub TEST
high l_L1
high l_L8
GOSUB TEST
high l_L2
HIGH l_L7
GOSUB TEST
high l_L3
HIGH l_L6
GOSUB TEST
high l_L4
HIGH l_L5
GOSUB TEST
LOW l_L5
LOW l_L4
GOSUB TEST
LOW l_L6
LOW l_L3
GOSUB TEST
LOW l_L7
LOW l_L2
GOSUB TEST
LOW l_L8
LOW l_L1
GOSUB TEST
portb=%11111111
gosub TEST
portb=0
gosub TEST
'...................Animacion
' LOW l_L8
' GOSUB TEST
' LOW l_L7
' GOSUB TEST
' LOW l_L6
' GOSUB TEST
' LOW l_L5
' GOSUB TEST
' LOW l_L4
' GOSUB TEST
' LOW l_L3
' GOSUB TEST
' LOW l_L2
' GOSUB TEST
' LOW l_L1
' GOSUB TEST
goto Inicio
TEST:
for x=0 to 100
if p_Start=0 then
HIGH Led_Status
goto Inicio1
ELSE
aleatorio=aleatorio-1
endif
pause 15
IF aleatorio=0 then
aleatorio=7
endif
NEXT
RETURN
'########################### INICIO DE SECUENCIAS #################
Inicio1: 'Ingresa a la subrutina de aleatorios
HIGH Led_Status
random repe1
for repe=0 to repe1
aleatorio=aleatorio-1
IF aleatorio=0 then
aleatorio=7
endif
next
LOW Led_Status
GOTO Inicio12
Inicio12:
portb=%00000000 ; Limpiamos el puerto para que empiece el juego
LOoKUP aleatorio,[70,14,28,7,134,73,176,56],Z ;Y es el puntero y lo deposita
'....Secuencia #1 de Juego
IF Z=70 then 'Dec 70 = 01000110 ..b7...b0
pause 1500 'Presenta la secuencia a Jugar
high l_L7
pause 1500
low l_L7
HIGH l_L3
pause 1500
low l_L3
HIGH l_L2
pause 1500
low l_L2
PAUSE 1500
goto TEST1
endif
'....Secuencia #2 de Juego
IF Z=14 then 'Dec 14 = 00001110 ..b7...b0
pause 2500 'Presenta la secuencia a Jugar
high l_L4
pause 2500
low l_L4
HIGH l_L3
pause 2500
low l_L3
HIGH l_L2
pause 2500
low l_L2
PAUSE 2500
goto TEST1
endif
'....Secuencia #3 de Juego tiempo medio
IF Z=28 then 'Dec 28 = 00011100 ..b7...b0
pause 2000 'Presenta la secuencia a Jugar
high l_L2
pause 2000
low l_L2
HIGH l_L3
pause 2000
low l_L3
HIGH l_L4
pause 2000
low l_L4
PAUSE 2000
goto TEST1
endif
'....Secuencia #4 de Juego tiempo lento
IF Z=7 then 'Dec 7 = 00000111 ..b7...b0
pause 2500 'Presenta la secuencia a Jugar
high l_L3
pause 2500
low l_L3
HIGH l_L2
pause 2500
low l_L2
HIGH l_L1
pause 2500
low l_L1
PAUSE 2500
goto TEST1
endif
'....Secuencia #5 de Juego tiempo lento
IF Z=134 then 'Dec 134 = 10000110 ..b7...b0
pause 2500 'Presenta la secuencia a Jugar
high l_L7
pause 2500
low l_L7
HIGH l_L3
pause 2500
low l_L3
HIGH l_L2
pause 2500
low l_L2
PAUSE 2500
goto TEST1
endif
'....Secuencia #6 de Juego tiempo lento
IF Z=73 then 'Dec 73 = 01001001 ..b7...b0
pause 2500 'Presenta la secuencia a Jugar
high l_L1
pause 2500
low l_L1
HIGH l_L4
pause 2500
low l_L4
HIGH l_L7
pause 2500
low l_L7
PAUSE 2500
goto TEST1
endif
'....Secuencia #7 de Juego tiempo rapido
IF Z=176 then 'Dec 176 = 10110000 ..b7...b0
pause 1500 'Presenta la secuencia a Jugar
high l_L8
pause 1500
low l_L8
HIGH l_L6
pause 1500
low l_L6
HIGH l_L5
pause 1500
low l_L5
PAUSE 1500
goto TEST1
endif
'....Secuencia #8 de Juego tiempo medio
IF Z=56 then 'Dec 56 = 00111000 ..b7...b0
pause 2000 'Presenta la secuencia a Jugar
high l_L4
pause 2000
low l_L4
HIGH l_L5
pause 2000
low l_L5
HIGH l_L6
pause 2000
low l_L7
PAUSE 2000
goto TEST1
endif
goto Inicio12
'----Captura y deteccion de la Secuencia aleatoria detectada-------------------
TEST1:
captura=0
X=0
high Led_Status
Ini:
FOR X=0 to 5
for Y=0 to 90
pause 10
IF p_L1=0 then
pause 10
high l_L1
captura=captura+1
pause 10
goto Ini
endif
IF p_L2=0 THEN
pause 10
high l_L2
captura=captura+2
pause 10
goto Ini
endif
IF p_L3=0 THEN
pause 10
high l_L3
captura=captura+4
pause 10
goto Ini
endif
IF p_L4=0 THEN
pause 10
high l_L4
captura=captura+8
pause 10
goto Ini
endif
IF p_L5=0 THEN
pause 10
high l_L5
captura=captura+16
pause 10
goto Ini
endif
IF p_L6=0 THEN
pause 10
high l_L6
captura=captura+32
pause 10
goto Ini
endif
IF p_L7=0 THEN
pause 10
high l_L7
captura=captura+64
pause 10
goto Ini
endif
IF p_L8=0 THEN
pause 10
high l_L8
captura=captura+128
pause 10
goto Ini
endif
pause 10
next
next
Respuesta:
portb=0
LOW Led_Status
captura=porta
IF captura=Z then
high led_Ganador
else
high led_Perdedor
endif
goto Respuesta
end
'Inicio2:
' pause 1500
' low Led_Status
' Resultado=captura-Z
' if Resultado=0 then
' pause 200
' portb=%111111111
' ELSE
' portb.3=1
' endif