Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
84,21 KB
Nội dung
Chương 24: Kiểm tra giới hạn trên của màn hình IF (cursor_column <128) AND ((NEW_cursor_column > 256) OR (NEW_cursor_column < 2)) THEN cursor_column<=CONV_STD_LOGIC_VECTOR (0, 10); Kiểm tra giới hạn dưới của màn hình ELSIF NEW_cursor_column > 640 THEN cursor_column<=CONV_STD_LOGIC_VECTOR (640,10); ELSE cursor_column <= NEW_cursor_column; END IF; ELSIF PACKET_COUNT = "10" THEN PACKET_CHAR2 <= SHIFTIN (7 DOWNTO 0); ELSIF PACKET_COUNT = "11" THEN PACKET_CHAR3 <= SHIFTIN (7 DOWNTO 0); END IF; INCNT <= conv_std_logic_vector (0,4); IF PACKET_COUNT = "11" THEN PACKET_COUNT <= "01"; Hoàn tất đóng gói, để xử lý dữ liệu trong gói. Tín hiệu hai giá trò của thành phần chuyển động mở rộng X và Y và cộng thêm đòa chỉ con trỏ hiện hành. Sự chuyển động Y ngược lên là đòa chỉ hàng thấp. NEW_cursor_row <= cursor_row - (PACKET_CHAR3 (7) & PACKET_CHAR3 (7) & PACKET_CHAR3); NEW_cursor_column<=cursor_column+ (PACKET_CHAR2(7) & PACKET_CHAR2 (7) & PACKET_CHAR2); LEFT_BUTTON <= PACKET_CHAR1 (0); RIGHT_BUTTON <= PACKET_CHAR1 (1); END IF; END IF; END IF; END IF; END IF; END IF; END PROCESS RECV_UART; END behavior; Bảng dữ liệu mouse L =bit thể trạng thái của nút trái M =bit thể trạng thái của nút giữa R =bit thể trạng thái của nút phải X7-X0= khoảng cách di chuyển của X (0=di chuyển trái, 1=dichuyển phải) Y7-Y0= khoảng cách di chuyển của Y (0=di chuyển trái, 1=dichuyển phải) Xo= bit dữ liệu thể hiện X tràn (tràn=1) Yo= bit dữ liệu thể hiện Y tràn (tràn=1) …. Từ các bit trong 3 byte của mouse cho ta bit toa độ của mouse và cho biết nút nào của Mouse được nhấn. Chương trình kết hợp với giải mã led thể hiện tọa độ của mouse và nút nào được nhấn thể hiện qua dp của led 7 đoạn. Do kit chỉ có 2 led 7đoạn nên ta chỉ thể hiện hàng đơn vò hay hàng chục của toạ độ của mouse. Chương trình kết hợp này thể hiện tọa độ hàng chục của chuột: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY kethop IS PORT ( clock_25Mhz, reset : IN STD_LOGIC; dataM,dataL :OUT STD_LOGIC_VECTOR (6 DOWNTO 0); mouse_data, mouse_clk : INOUT STD_LOGIC; left_button, right_button : OUT STD_LOGIC); END kethop; ARCHITECTURE bb OF kethop IS SIGNAL mouse_cursor_row :STD_LOGIC_VECTOR (9 DOWNTO 0); SIGNAL mouse_cursor_column: STD_LOGIC_VECTOR (9 DOWNTO 0) ; COMPONENT mouse PORT( clock_25Mhz, reset : IN STD_LOGIC; SIGNAL mouse_data : INOUT STD_LOGIC; SIGNAL mouse_clk : INOUT STD_LOGIC; SIGNAL left_button, right_button : OUT STD_LOGIC; SIGNAL mouse_cursor_row : OUT STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL mouse_cursor_column:OUT STD_LOGIC_VECTOR(9DOWNTO 0 )); END COMPONENT; COMPONENT dec_7seg1 PORT(hex_digit : IN STD_LOGIC_VECTOR(3 DOWNTO 0); Data : OUT STD_LOGIC_VECTOR (6 DOWNTO 0)); END COMPONENT; BEGIN x1: mouse port map(clock_25Mhz=>clock_25Mhz,reset=>reset, mouse_data=>mouse_data,mouse_clk=>mouse_clk, left_button=>left_button,right_button=>right_button, mouse_cursor_row=>mouse_cursor_row, mouse_cursor_column =>mouse_cursor_column); x2: dec_7seg1 port map (hex_digit=> mouse_cursor_row(9 downto 6),data =>dataM); x3: dec_7seg1 port map (hex_digit =>mouse_cursor_column(9 downto 6),data =>dataL); END; Sau ñoù ta gaùn chaân nhö sau: Tín hieäu Chaân dataL6 6 dataL5 7 dataL4 8 dataL3 9 dataL2 11 dataL1 12 dataL0 13 right_button 14 dataM6 17 dataM5 18 dataM4 19 dataM3 20 dataM2 21 dataM1 23 dataM0 24 left_button 25 mouse_clk 30 mouse_data 31 reset 41 clock_25Mhz 91 Lưu và biên dòch lại, rồi nạp file .sof lên Kit UP2 để chạy chương trình. VII. Giao tiếp giữa VGA và bàn phím 1. Mô hình Data : từ bàn phím xuất ra khi ta nhấn phím. Clk : từ bàn phím khi ta nhấn phím. Mã scancode được chương trình chuyển đổi (ở phần trước) từ tín hiệu data của bàn phím. Tín hiệu data và clk được truyền thông qua cổng PS/2 đến KIT UP2. Sau đó mã scancode được giải mã thành đòa chỉ của kí tự có mã scancode đó. Đòa chỉ được đưa vào chương trình xuất kí tự( ở phần trước) đưa kí tự lên màn hình. Lúc này chương trình sẽ xuất ra 5 tín hiệu red, green, blue và hai tín hiệu đồng bộ ngang và dọc. 5 tín hiệu này được truyền tới monitor thông qua cổng Vga của KIT UP2. 2. Chương trình a. Chương trình giải mã LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.all; USE IEEE.STD_LOGIC_ARITH.all; USE IEEE.STD_LOGIC_UNSIGNED.all; ENTITY giaima IS PORT( scan_in: IN STD_LOGIC_VECTOR (7 DOWNTO 0); scan_out: OUT STD_LOGIC_VECTOR (5 DOWNTO 0)); END giaima; ARCHITECTURE o OF giaima IS SIGNAL scan1 : STD_LOGIC_VECTOR (5 DOWNTO 0); BEGIN PROCESS (scan_in) BEGIN CASE scan_in IS WHEN "00011110" => scan1 <= "000000"; WHEN "00011100" => scan1 <= "000001"; WHEN "00110010" => scan1 <= "000010"; WHEN "00100001" => scan1 <= "000011"; WHEN "00100011" => scan1 <= "000100"; WHEN "00100100" => scan1 <= "000101"; WHEN "00101011" => scan1 <= "000110"; WHEN "00110100" => scan1 <= "000111"; WHEN "00110011" => scan1 <= "001000"; WHEN "01000011" => scan1 <= "001001"; WHEN "01001011" => scan1 <= "001010"; WHEN "01000010" => scan1 <= "001011"; WHEN "01001100" => scan1 <= "001100"; WHEN "00111010" => scan1 <= "001101"; WHEN "00110001" => scan1 <= "001110"; WHEN "01000100" => scan1 <= "001111"; WHEN "01001101" => scan1 <= "010000"; WHEN "00010101" => scan1<= "010001"; WHEN "00101101" => scan1<= "010010"; WHEN "00011011" => scan1 <= "010011"; WHEN "00101100" => scan1 <= "010100"; WHEN "00111100" => scan1 <= "010101"; WHEN "00101010" => scan1 <= "010110"; WHEN "00011101" => scan1 <= "010111"; WHEN "00100010" => scan1 <= "011000"; WHEN "00110101" => scan1 <= "011001"; WHEN "00011010" => scan1 <= "011010"; WHEN "01010100" => scan1 <= "011011"; WHEN "01110010" => scan1 <= "011100"; WHEN "01011011" => scan1 <= "011101"; WHEN "01110101" => scan1 <= "011110"; WHEN "01101011" => scan1 <= "011111"; WHEN "00101001" => scan1 <= "100000"; WHEN "00010110" => scan1 <= "100001"; WHEN "00100110" => scan1 <= "100011"; WHEN "00100101" => scan1 <= "100100"; WHEN "00101110" => scan1 <= "100101"; WHEN "00111101" => scan1 <= "100110"; WHEN "01010010" => scan1 <= "100111"; WHEN "01000110" => scan1 <= "101000"; WHEN "01000101" => scan1 <= "101001"; WHEN "01111100" => scan1 <= "101010"; WHEN "01111001" => scan1 <= "101011"; WHEN "01000001" => scan1 <= "101100"; WHEN "01001110" => scan1 <= "101101"; WHEN "01001001" => scan1 <= "101110"; WHEN "01001010" => scan1 <= "101111"; WHEN "01110000" => scan1 <= "110000"; WHEN "01101001" => scan1 <= "110001"; WHEN "01111010" => scan1 <= "110011"; WHEN "01110001" => scan1 <= "110100"; WHEN "01110011" => scan1 <= "110101"; WHEN "01110100" => scan1 <= "110110"; [...]... Clock_25Mhz : 91 Red_out : 236 Green_out : 237 Blue_out : 238 Vert_sync_out : 239 Horiz_sync_out : 240 Các chân còn lại chương trình tự gán Lưu và biên dòch lại rồi nạp lên Kit Tuy nhiên chương trình vẫn còn nhiều thiếu xót trong việc hiển thò, thứ nhất là do ROM của KIT nhỏ không thể hiện được hết các phím trên bàn phím, thứ hai là do có một số phím có mã scancode trùng nhau nên ta không thể hiển thò... Reset :tín hiệu reset chương trình Clk_25Mhz : xung cấp cho chương trình VGA_sync Horiz_sync : tín hiệu đồng bộ ngang từ KIT truyền cho monitor Vert_sync : tín hiệu đồng bộ dọc từ KIT truyền cho monitor Red_out : tín màu đỏ từ KIT truyền cho monitor Green_out : tín màu xanh lá cây từ KIT truyền cho monitor Blue_out : tín màu xanh dương từ KIT truyền cho monitor Chương trình liên kết hiển thò con trỏ... hiệu con trỏ nên ta thay con trỏ như một dấu chấm Đầu tiên tín hiệu xung và dữ liệu của mouse được đưa vào chương trình chuyển đổi(phần trước) nhận biết được nút trái hay phải được nhấp và cho biết toạ độ của mouse Tín hiệu toạ độ của chuột sẽ làm tín hiệu để so sánh với hàng cột của điểm ảnh do chương trình Vga_sync( phần trước) Nếu thoả điều kiện thì tín hiệu color_on được đặt lên ‘1’ và nó chính là...WHEN "01101100" => scan1 scan1 scan1 scan1 . Chương 24: Kiểm tra giới hạn trên của màn hình IF (cursor_column <128) AND ((NEW_cursor_column > 256). 237 Blue_out : 238 Vert_sync_out : 239 Horiz_sync_out : 240 Các chân còn lại chương trình tự gán. Lưu và biên dòch lại rồi nạp lên Kit. Tuy nhiên chương trình vẫn còn nhiều thiếu xót trong việc hiển. trong 3 byte của mouse cho ta bit toa độ của mouse và cho biết nút nào của Mouse được nhấn. Chương trình kết hợp với giải mã led thể hiện tọa độ của mouse và nút nào được nhấn thể hiện qua dp của