⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 __keyboard.vhd

📁 vhdl编写的4X4键盘扫描程序
💻 VHD
字号:
---------------------------------------------------------------------------------- Company: -- Engineer:---- Create Date:    16:32:37 08/31/07-- Design Name:    -- Module Name:    keyboard - Behavioral-- Project Name:   -- Target Device:  -- Tool versions:  -- Description:---- Dependencies:-- -- Revision:-- Revision 0.01 - File Created-- Additional Comments:-- --------------------------------------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity keyboard is    Port ( KB_ROW : buffer 	std_logic_vector(3 downto 0);           KB_COL : in	 	std_logic_vector(3 downto 0);           KB_CLK	: in 		std_logic;           KB_RST	: in 		std_logic;           KB_VAL : out 	std_logic_vector(7 downto 0);			  KB_VLD	: out 	std_logic;           KB_BLL : out 	std_logic);end keyboard;architecture Behavioral of keyboard isconstant MAXSCAN1: std_logic_vector(3 downto 0):= X"4";constant BELLDIV : std_logic_vector(4 downto 0):= "11111";signal SCANTMP :std_logic_vector(7 downto 0);signal SCANVAL :std_logic_vector(7 downto 0);signal SCANCNT :std_logic_vector(3 downto 0);signal BL_CNT :std_logic_vector(4 downto 0);signal BL_FRQ  :std_logic;signal BL_ENA  :std_logic;beginKB_BLL <= not(KB_CLK and BL_ENA);process(KB_CLK,KB_RST)begin	if(KB_RST = '0') then		SCANVAL <= X"FF";		SCANCNT <= MAXSCAN1;		BL_ENA  <= '0';		KB_VAL <= X"FF";		KB_ROW <= X"E";		KB_VLD <= '0';	 elsif(KB_CLK'event and KB_CLK = '1') then	   case KB_ROW is	      when X"E" => KB_ROW <= X"D";	      when X"D" => KB_ROW <= X"B";	      when X"B" => KB_ROW <= X"7";	      when X"7" => KB_ROW <= X"F";	      when X"F" => KB_ROW <= X"E";	      when others=>KB_ROW <= X"E";	 	end case;	 	if(KB_ROW = X"F")     then 			SCANTMP <= X"FF";			if(SCANTMP = X"FF" or SCANTMP /= SCANVAL) then				SCANVAL <= SCANTMP;				SCANCNT <= MAXSCAN1;            BL_ENA <= '0';				KB_VLD <= '0';    		else				if(SCANCNT > X"1")	then 			 	   SCANCNT <= SCANCNT-1;					BL_ENA <= '1';					KB_VLD <= '0';				elsif(SCANCNT = X"1") then					case SCANVAL is						when X"EE" => KB_VAL<=X"55";						when X"ED" => KB_VAL<=X"44";						when X"EB" => KB_VAL<=X"42";						when X"E7" => KB_VAL<=X"45";						when X"DE" => KB_VAL<=X"39";						when X"DD" => KB_VAL<=X"36";						when X"DB" => KB_VAL<=X"33";						when X"D7" => KB_VAL<=X"52";						when X"BE" => KB_VAL<=X"38";						when X"BD" => KB_VAL<=X"35";						when X"BB" => KB_VAL<=X"32";						when X"B7" => KB_VAL<=X"2E";						when X"7E" => KB_VAL<=X"37";						when X"7D" => KB_VAL<=X"34";						when X"7B" => KB_VAL<=X"31";						when X"77" => KB_VAL<=X"30";						when others => KB_VAL<=X"67"; 					end case;					SCANCNT <= X"0";					KB_VLD <= '1';				else					KB_VLD <= '0';								end if;			end if;	 	elsif(KB_COL /= X"F") then SCANTMP(3 downto 0)<=KB_ROW; SCANTMP(7 downto 4)<=KB_COL;	 	else                       SCANTMP <= SCANTMP;	 	end if;	end if;end process;end Behavioral;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -