Thông báo

Collapse
No announcement yet.

Xử lý KEYBOARD trên Spartan 3e vơi ngôn ngữ VHDL

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xử lý KEYBOARD trên Spartan 3e vơi ngôn ngữ VHDL

    Code:
       
    --Hang so quy dinh man hinh
        constant SCREEN_WIDTH: integer := 640;
        constant SCREEN_HEIGHT: integer := 480;
    ---Tin hieu quy dinh thanh truot o truc y(truc doc)
         signal bar_1_y, bar_1_y_next, bar_2_y, bar_2_y_next: std_logic_vector(9 downto 0);
    	 --Tin hieu xac dinh do rong va chieu cao cua thanh BAR
        constant BAR_WIDTH: integer := 20;
        constant BAR_HEIGHT: integer := 64;
    
    bar_control: process(
    			bar_1_y,bar_2_y,
    			p1_up,p1_down,
    			p2_up,p2_down
    		)
    		variable count: std_logic;
        begin
    	
            bar_1_y_next <= bar_1_y;
            bar_2_y_next <= bar_2_y;
    			if p1_up='1' then
    				if (bar_1_y>0) then
    					bar_1_y_next <= bar_1_y -8;
    				end if;
    		
    			elsif p1_down = '1' then
    				if bar_1_y < SCREEN_HEIGHT - BAR_HEIGHT - 1    then
    					bar_1_y_next <= bar_1_y +8;
    				end if;
    			end if;
    	
    
    				if p2_up = '1' then
    					if bar_2_y >0 then
    						bar_2_y_next <= bar_2_y - 1;
    					end if;
    				elsif p2_down ='1' then
    					if bar_2_y < SCREEN_HEIGHT - BAR_HEIGHT - 1  then
    					 bar_2_y_next <= bar_2_y + 1;
    					end if;
    				end if;
    Em đang làm game pingpong trên spartan 3e. Đoạn code này em xử lý phím trên keyboard để điều khiển thanh trượt.
    Em làm cho nó trượt rồi nhưng không hiểu vì sao nó trượt thằng lên góc trên màn hình và góc dưới màn hình mà nó không trườ từ từ để mình đỡ bóng.
    Ai biết code sai đoạn nào thì chỉ giúp em nhé!
    Em cảm ơn nhiều!

  • #2
    Nguyên văn bởi vinhtk73 Xem bài viết
    Code:
       
    --Hang so quy dinh man hinh
        constant SCREEN_WIDTH: integer := 640;
        constant SCREEN_HEIGHT: integer := 480;
    ---Tin hieu quy dinh thanh truot o truc y(truc doc)
         signal bar_1_y, bar_1_y_next, bar_2_y, bar_2_y_next: std_logic_vector(9 downto 0);
    	 --Tin hieu xac dinh do rong va chieu cao cua thanh BAR
        constant BAR_WIDTH: integer := 20;
        constant BAR_HEIGHT: integer := 64;
    
    bar_control: process(
    			bar_1_y,bar_2_y,
    			p1_up,p1_down,
    			p2_up,p2_down
    		)
    		variable count: std_logic;
        begin
    	
            bar_1_y_next <= bar_1_y;
            bar_2_y_next <= bar_2_y;
    			if p1_up='1' then
    				if (bar_1_y>0) then
    					bar_1_y_next <= bar_1_y -8;
    				end if;
    		
    			elsif p1_down = '1' then
    				if bar_1_y < SCREEN_HEIGHT - BAR_HEIGHT - 1    then
    					bar_1_y_next <= bar_1_y +8;
    				end if;
    			end if;
    	
    
    				if p2_up = '1' then
    					if bar_2_y >0 then
    						bar_2_y_next <= bar_2_y - 1;
    					end if;
    				elsif p2_down ='1' then
    					if bar_2_y < SCREEN_HEIGHT - BAR_HEIGHT - 1  then
    					 bar_2_y_next <= bar_2_y + 1;
    					end if;
    				end if;
    Em đang làm game pingpong trên spartan 3e. Đoạn code này em xử lý phím trên keyboard để điều khiển thanh trượt.
    Em làm cho nó trượt rồi nhưng không hiểu vì sao nó trượt thằng lên góc trên màn hình và góc dưới màn hình mà nó không trườ từ từ để mình đỡ bóng.
    Ai biết code sai đoạn nào thì chỉ giúp em nhé!
    Em cảm ơn nhiều!
    Vui nhỉ, ban thử mô phỏng xem sai cho nào

    Comment


    • #3
      Ai sửa giúp em với. Nhấn nút X̣ trên bàn phím (nút Pause trong game) mà nhấn thì bóng ko chạy nhả ra thì bóng lại chạy.
      Ai biết chỉ giùm em với
      Code:
      ---- Doan code xu ly ball
          ball_control: process(
              ball_control_counter,
              ball_x, ball_y,
              ball_x_next, ball_y_next,
              ball_h_dir, ball_v_dir,
              ball_enable
          )
          begin
              ball_x_next <= ball_x;
              ball_y_next <= ball_y;
      	 if(pause ='0')then
              if ball_enable = '1' then	  		
                  if ball_control_counter = 0 then	
      				--Doan code dieu khien bong di thang theo truc X
                      if ball_h_dir = '1' then
                          ball_x_next <= ball_x + 1;
                      else
                          ball_x_next <= ball_x - 1;
                      end if;
      				--Doan code dieu khien bong di thang theo truc Y (duong net dut o giua man hinh)
                      if ball_v_dir = '1' then
                          ball_y_next <= ball_y + 1;
                      else
                          ball_y_next <= ball_y - 1;
                      end if;
                  end if;				
              else
                  ball_x_next <= conv_std_logic_vector(SCREEN_WIDTH / 2 - BALL_SIZE / 2, 10);
                  ball_y_next <= conv_std_logic_vector(SCREEN_HEIGHT / 2 - BALL_SIZE / 2, 10);
              end if;
      		 end if;
          end process;

      Comment


      • #4
        Ôi bạn ơi, sao code của bạn không có clock.
        Code của bạn hơi lạ. Bạn mô phỏng nó đi. Đem một đống thảy lên mạch thật như vậy mất công debug lắm!

        Comment

        Về tác giả

        Collapse

        vinhtk73 Tìm hiểu thêm về vinhtk73

        Bài viết mới nhất

        Collapse

        Đang tải...
        X