Autor Tema: Problemilla con un menú  (Leído 2692 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ElRival

  • PIC10
  • *
  • Mensajes: 16
Problemilla con un menú
« en: 27 de Febrero de 2006, 12:18:00 »
Hola a todos , otra vez estoy aquí.....

Ahora tengo un problemilla con un menú que quiero hacer para interactuar con el usuario desde la pantalla LCD 16x2  y 4 pusadores....

El problema lo tengo al intentar retroceder al menu anterior, me explico....

 tengo un menú con opciones 0,1,2,3 ... si pulso el boton 3 puedo elegir entre la 3.0 ó 3.1 .si pulso el 1, entonces voy al 1.0 ,1.1 ó 1.2 etc....

Entonces el problema es que cuando voy a retroceder, pues no retrocede. La manera de hacerlo ha sido la siguiente , os resumo un poco las opciones(esta sería la opcion 3)......

Ahh cuando intento simularlo con el ISE simulator , me da problemas en la sentencia "total<=n0+n1+n2+n3-anterior;" pero sin embargo si que me deja cargarlo en la placa, ¿sabeis porque puede ser? he utiliizado las librerías....library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
 
Y el trozo de codigo que me da problemas es este....




process(sw1,btn0,btn1,btn2,btn3,total)
variable anterior:std_logic_vector(3 downto 0);
variable n0:std_logic_vector(3 downto 0);
variable n1:std_logic_vector(3 downto 0);
variable n2:std_logic_vector(3 downto 0);
variable n3:std_logic_vector(3 downto 0);
begin


   if(btn0="1"and btn0"event) then
   n0:=n0+1;
   end if;
   if(btn1="1"and btn1"event) then
   n1:=n1+2;
   end if;
   if(btn2="1"and btn2"event) then
   n2:=n2+3;
   end if;
   if(btn3="1"and btn3"event) then
   n3:=n3+4;
   end if;
   if(sw1="1"and sw1"event) then
   anterior:="0100";
   end if;
total<=n0+n1+n2+n3-anterior;
anterior:="0000";
end process;
   
process (letra,total)


begin
 
if(total=0) then

case letra is
  when "10000" => salida<="00110000"; -- 0
  when "10001" => salida<="00101101"; -- -
  when "10010" => salida<="01010010"; -- R
  when "10011" => salida<="01000101"; -- E
  when "10100" => salida<="01010011"; -- S
  when "10101" => salida<="01000101"; -- E
  when "10110" => salida<="01010100"; -- T
  when "10111" => salida<="00100000"; -- espacio
  when "11000" => salida<="00100000"; -- espacio
  when "11001" => salida<="00110001"; -- 1
  when "11010" => salida<="00101101"; -- -
  when "11011" => salida<="01000101"; -- E
  when "11100" => salida<="01011000"; -- X
  when "11101" => salida<="01010000"; -- P
  when "11110" => salida<="01001100"; -- L
  when "11111" => salida<="01001111"; -- O
------------------------------------------------------line1 del display
  when "00000" => salida<="00110010"; -- 2
  when "00001" => salida<="00101101"; -- -
  when "00010" => salida<="01010100"; -- T
  when "00011" => salida<="01010010"; -- R
  when "00100" => salida<="01000001"; -- A
  when "00101" => salida<="01001110"; -- N
  when "00110" => salida<="01010011"; -- S
  when "00111" => salida<="01000110"; -- F
  when "01000" => salida<="00100000"; -- espacio
  when "01001" => salida<="00110011"; -- 3
  when "01010" => salida<="00101101"; -- -
  when "01011" => salida<="01001110"; -- N
  when "01100" => salida<="01010101"; -- U
  when "01101" => salida<="01000101"; -- E
  when "01110" => salida<="01010110"; -- V
  when "01111" => salida<="01001111"; -- O
  when others => salida <=(others=>"0");
 END  CASE;
  end if;

if total=4 then

   case letra is
  when "10000" => salida<="01001001"; -- I
  when "10001" => salida<="01001110"; -- N
  when "10010" => salida<="01001001"; -- I
  when "10011" => salida<="01000011"; -- C
  when "10100" => salida<="01001001"; -- I
  when "10101" => salida<="01000001"; -- A
  when "10110" => salida<="01010010"; -- R
  when "10111" => salida<="00100000"; -- espacio
  when "11000" => salida<="01001101"; -- M
  when "11001" => salida<="01001111"; -- O
  when "11010" => salida<="01000100"; -- D
  when "11011" => salida<="01001111"; -- O
  when "11100" => salida<="00100000"; -- espacio
  when "11101" => salida<="00100000"; -- espacio
  when "11110" => salida<="00100000"; -- espacio
  when "11111" => salida<="00100000"; -- espacio
-----------------------------------------------------line1 del display
  when "00000" => salida<="00110000"; -- 0
  when "00001" => salida<="00101101"; -- -
  when "00010" => salida<="01001110"; -- N
  when "00011" => salida<="01001111"; -- O
  when "00100" => salida<="01010010"; -- R
  when "00101" => salida<="01001101"; -- M
  when "00110" => salida<="01000001"; -- A
  when "00111" => salida<="01001100"; -- L
  when "01000" => salida<="00100000"; -- espacio
  when "01001" => salida<="00110001"; -- 1
  when "01010" => salida<="00101101"; -- -
  when "01011" => salida<="01000001"; -- A
  when "01100" => salida<="01001000"; -- H
  when "01101" => salida<="01001111"; -- O
  when "01110" => salida<="01010010"; -- R
  when "01111" => salida<="01010010"; -- R
  when others => salida <=(others=>"0");
end case;
end if;

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Problemilla con un menú
« Respuesta #1 en: 27 de Febrero de 2006, 17:45:00 »
Creo que el fallo esta aqui:

if(sw1="1"and sw1"event) then
anterior:="0100";
else
anterior:="0000";
end if;
total<=n0+n1+n2+n3-anterior;


Si no lo haces asi, anterior siempre valdrá 0 y nunca retrocederá

Desconectado ElRival

  • PIC10
  • *
  • Mensajes: 16
RE: Problemilla con un menú
« Respuesta #2 en: 01 de Marzo de 2006, 12:33:00 »
Eso no me lo sintetiza... lo que he pensado es en crear una entidad que me genere un pulso de duracion de un ciclo de reloj una vez que haya soltado el boton
lo que no se es como hacerlos ya que he probado cosas como esta....


process(btn,clk)

begin
if(btn"event and btn="0")then
 aux<="1";
else
 salida<="0";
end if;
end process;
salida<=aux;
salida<=not aux;

y así tampoco me lo sintetiza....

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Problemilla con un menú
« Respuesta #3 en: 02 de Marzo de 2006, 06:52:00 »
Que error te da en ambos casos?