Sunteți pe pagina 1din 3

--------------------------------------------------------

-- auteur : Valentin BERNARD


-- créé le : 06/02/2010
-- statut : fonctionne le 01/02/2010
--------------------------------------------------------
-- description :
-- on veut detecter un deplacement du doigt sur l'écran
-- Traduction des informations de l'ecran tactile pour récupérer 6 ordres en sortie
:
-- la direction : N, NE, E, SE, S, SW, W, NW ( avec les sorties S, N, E, O)
-- la vitesse du mouvement ( rapide ou lent ) et Un ReadEnable.
--------------------------------------------------------

A verifier : Mise en forme de TOUCH

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.STD_LOGIC_UNSIGNED.all;

ENTITY MOUVEMENT IS -- définition entrées/sorties


PORT( touch : IN std_logic; -- detection appui tactile
YC: IN std_logic_vector (11 downto 0); -- coordonnée y écran
XC: IN std_logic_vector (11 downto 0); -- coordonnée x écran
CLK: IN bit;-- clock
N: OUT bit;-- direction du mvt, 1 si vers le haut
S: OUT bit;-- idem, 1 si vers le bas
E: OUT bit;
W: OUT bit;
VITESSE : OUT bit; -- vitesse du mouvement, 1 si rapide
RE: out bit); --read enable
END ENTITY MOUVEMENT;

ARCHITECTURE ARCHI_MOUVEMENT OF MOUVEMENT IS


SIGNAL mouv : std_logic; -- variable pour detection tactile
SIGNAL CPT : std_logic_vector (15 downto 0); -- compteur pour durée
SIGNAL COOZD :std_logic_vector (11 downto 0);--sur 12 bits, coordonnées, s
ignal pour memorisation.
SIGNAL COOYD :std_logic_vector (11 downto 0);
SIGNAL COOZF :std_logic_vector (11 downto 0);
SIGNAL COOYF :std_logic_vector (11 downto 0);
SIGNAL DIFZ :std_logic_vector (11 downto 0);-- difference absolue entre
depart et arrivée
SIGNAL DIFY :std_logic_vector (11 downto 0);
SIGNAL NEGX :bit;-- 1 si mouvement vers bas , 0 si vers le haut
SIGNAL NEGY :bit;-- 1 si mouvement vers gauche, 0 si vers la droite.
BEGIN
PROCESS(touch)
BEGIN
IF (touch = '1' AND touch'EVENT) THEN -- detecti
on evenement tactile
RE <= '0'
mouv <= '01';
COOYD <= YC;
COOZD <= ZC;
END IF;
--##############################################################################
#########################
IF (touch = '0' AND touch'EVENT) THEN -- detecti
on evenement tactile
mouv <= '00';
COOYF <= YC;
COOYF <= ZC;
IF (COOZD <= "011111111111") THE
N
DIFZ <= (COOZF-COOZD);
NEGZ <='0';
ELSIF ( DIFZ <= (COOZD-COOZF);
NEGZ <='1';)
END IF;
IF (COOYD <= "011111111111") THE
N
DIFY <= (COOYF-COOYD);
NEGY <='0';
ELSIF ( DIFY <= (COOYD-COOYF);
NEGY <='1';)
END IF;
mouv <= '11'
END IF;
--##############################################################################
#########################
IF (mouv= '01' AND CLK = '1' AND clock'event) TH
EN
CPT <= CPT + 1;
END IF;
--##############################################################################
#########################
IF ( mouv = '11') THEN
--####################################
IF (DIFZ <= "1111101000" AND NEGZ ="1")
THEN -- pour que le mouvement soit detectable, il faut que
W <= '1';
-- la distance parcourue fasse le tiers de la longueur/largeur
ELSIF(
-- de l'écran
W <= '0';
)
END IF;
--####################################
IF (DIFZ >= "1111101000" AND NEGZ ="0")
THEN
E <= '1';
ELSIF(
E <= '0';
)
END IF;
--####################################
IF (DIFY <= "1111101000" AND NEGY ="1")
THEN
S <= '1';
ELSIF(
S <= '0';
)
END IF;
--####################################
IF (DIFY >= "1111101000" AND NEGZ ="0")
THEN
N <= '1';
ELSIF(
N <= '0';
)
END IF;
--####################################
IF (CPT >= "011111111111") THEN -- admet
tons une horloge a 10MHZ, vitesse = 1 si mouvement inférieur a 0,2secondes
VITESSE <= '0';
ELSIF(
VITESSE <= '1';
)
END IF;
END IF;
END PROCESS;
END ARCHITECTURE MOUVEMENT;

S-ar putea să vă placă și