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;