-- 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;