亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hand_play.vhd

?? 多功能電子琴 可以實現(xiàn)人性化界面 同時可以根據(jù)按鍵選擇播放模式
?? VHD
字號:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use work.ram_pack.all;

entity Hand_Play is
	port(
        choose:in std_logic;--歌曲選擇信號
		clk_10:in std_logic;--10HZ時鐘
		clk_20:in std_logic;--20M時鐘
		high:in std_logic;--高音輸入控制信號
		low:in std_logic;--低音輸入控制信號
		fast: in std_logic;--快速播放音樂
		slow: in std_logic;--慢速播放音樂
		Ctrl:in std_logic_vector(2 downto 0);--狀態(tài)轉(zhuǎn)換控制信號		
		row:out std_logic_vector(3 downto 0);--鍵盤掃描行信號,同管腳中的scan信號,作為輸出信號
		col:inout std_logic_vector(3 downto 0);--鍵盤掃描列信號,同管腳中的kin信號,為input信號
		audio:out std_logic;--音頻輸出信號
		Dout:out std_logic_vector(6 downto 0);	--數(shù)碼管數(shù)據(jù)信號
		Leds:out std_logic_vector(5 downto 0);	--數(shù)碼管選通信號
		Key_Leds:out std_logic_vector(7 downto 0)	--輸出音階的LED顯示	
		);
end Hand_Play;

architecture code of Hand_Play is
signal tune_memory:RAM_TYPE;
signal time_memory:RAM_TYPE;
signal keynum, keynum1:integer range 0 to 31;  --臨時變量,用來存放按鍵值,初值0為無效值
signal keynum_last:integer range 0 to 31 :=0;--上一次掃描鍵盤時的鍵值,用于判斷按鍵時間的長短 
signal row_temp:std_logic_vector(3 downto 0);--時鐘掃描線向量
signal Q:std_logic_vector(20 downto 0);--用于時鐘加計數(shù)分頻
signal count:std_logic_vector(1 downto 0);--標記鍵盤掃描線的四種狀態(tài)
signal keyvec:std_logic_vector(9 downto 0);--用于判斷鍵值的向量
signal col_pre_flutter:std_logic_vector(3 downto 0);--消抖后的col信號
signal same_key_time:integer;--同一鍵按下時掃描的次數(shù),可以幫助計算按鍵時間
signal nextkey:integer range 0 to 99:=0;--標記RAM中存放的key按鍵時間的位置
signal iskey: std_logic;--判斷是否有鍵按下
signal time_count,key_begin:std_logic;--time_count標記是否進行按鍵時間計數(shù),key_begin標記一個鍵按下的開始
signal isreset:std_logic;--清RAM信號
signal clk_div:std_logic_vector(21 downto 0);--從20MHZ分頻得到10HZ時鐘
signal clk_play:std_logic;--可控制音樂播放快慢的時鐘頻率
component Prevent_Flutter is
port(
	clk:in std_logic;
	in1:in std_logic_vector(3 downto 0);
	out1:out std_logic_vector(3 downto 0)
);
end component;

component Play_ram
	port(
		keynum2:in integer range 0 to 31;
		signal tune_played:RAM_TYPE;
		signal time_passed:RAM_TYPE;
		max_addr:in integer range 0 to 127;
		Ctrl:in std_logic_vector(2 downto 0);		
		song:out std_logic;
		clk_com,clk_in,choose:in std_logic;
		Dout:out std_logic_vector(6 downto 0);	--數(shù)碼管數(shù)據(jù)信號
		Leds:out std_logic_vector(5 downto 0);	--數(shù)碼管選通信號
		Key_Leds:out std_logic_vector(7 downto 0)	--輸出音階的LED顯示
		);
end component;  

begin
	u0:Prevent_Flutter port map(Q(3),col,col_pre_flutter);
	u1:Play_ram port map(keynum1,tune_memory,time_memory,nextkey,Ctrl,audio,clk_20,clk_play,choose,Dout,Leds,Key_Leds);
	
	clkdiv_10:process(clk_20)
	begin
		if(clk_20'event and clk_20 = '1')then
			clk_div<=clk_div+1;
			
			if fast='1' and slow='0' then  --時鐘頻率增加,快速播放
				clk_play<=clk_div(18);
			elsif fast='0' and slow='1' then --時鐘頻率減小,慢速播放
				clk_play<=clk_div(20); 
			else
				clk_play<=clk_div(19);   --中速播放
			end if;
				
 		end if;
	end process clkdiv_10;

	clkscan_pro:process(clk_20)--時鐘分頻
	begin
	if clk_20'event and clk_20='1' then
		Q<=Q+1;
	end if;
	end process clkscan_pro;
	
	col_qudian:process(Q)--在時鐘的半個周期內(nèi)使col端口放電,消除按鍵靜電積累所產(chǎn)生的影響
	begin
		if Q(3)='1' then
			col<="ZZZZ";
		else
			col<="0000";
		end if;
	end process col_qudian;
		
	scanline:process(Q,Ctrl(0))--根據(jù)掃描時鐘產(chǎn)生掃描線
	begin
	if(Ctrl(0)='0') then
		row_temp<="0000";
		isreset<='0';
	elsif Q(3)'event and Q(3)='1' then
	
		if isreset='0' then   --判斷是否需要對RAM清零,每次進入HAND模式時自動清RAM
			for i in 0 to 127 loop
				tune_memory(i)<=0;
				time_memory(i)<=15;
			end loop;
			nextkey<=1;--RAM第一個元素避開   
		    isreset<='1';
		end if; 
		
		count<=count+1;
		case count is  --產(chǎn)生鍵盤掃描線
			when "00"=> row_temp<="0001";
			when "01"=> row_temp<="0010";
			when "10"=> row_temp<="0100";
			when "11"=> row_temp<="1000";
			when others =>null;
		end case;
		if count="10" then
			keynum1<=keynum;			
		end if;
		if keynum_last/=0 and keynum_last=keynum1 then  --同一個鍵按下未放開
			time_count<='1';
			key_begin<='0';	
		end if;		
		if keynum1/=0 and keynum_last/=keynum1 then  --新的按鍵按下
			keynum_last<=keynum1;
			tune_memory(nextkey)<=keynum1;
			time_memory(nextkey)<=same_key_time/4;
			nextkey<=nextkey+1;
			key_begin<='1';
			time_count<='1';
		end if;
		if keynum_last=0 and keynum1=0 then --沒有按鍵按下
			time_count<='0';
			key_begin<='0';
		end if;
	end if;
	end process scanline;
	row<=row_temp;
	
	keyvec<=high&low&row_temp&col; --將用于判斷按鍵的各種信號合為一個向量,便于根據(jù)不同情況判斷鍵值
	
	key_judge:process(clk_20 )
	begin
	if clk_20'event and clk_20='1' then
		if iskey='0' then
		case keyvec is
			when "1000010001"=>keynum<=1;iskey<='1';--低音
			when "1000010010"=>keynum<=2;iskey<='1';
	    	when "1000010100"=>keynum<=3;iskey<='1';
			when "1000011000"=>keynum<=4;iskey<='1';
			when "1000100001"=>keynum<=5;iskey<='1';
			when "1000100010"=>keynum<=6;iskey<='1';
			when "1000100100"=>keynum<=7;iskey<='1';
			
			when "0100010001"=>keynum<=15;iskey<='1';--高音
			when "0100010010"=>keynum<=16;iskey<='1';
	    	when "0100010100"=>keynum<=17;iskey<='1';
			when "0100011000"=>keynum<=18;iskey<='1';
			when "0100100001"=>keynum<=19;iskey<='1';
			when "0100100010"=>keynum<=20;iskey<='1';
			when "0100100100"=>keynum<=21;iskey<='1';
			
		    when "0000010001"=>keynum<=8;iskey<='1';--中音
			when "0000010010"=>keynum<=9;iskey<='1';
	    	when "0000010100"=>keynum<=10;iskey<='1';
			when "0000011000"=>keynum<=11;iskey<='1';
			when "0000100001"=>keynum<=12;iskey<='1';
			when "0000100010"=>keynum<=13;iskey<='1';
			when "0000100100"=>keynum<=14;iskey<='1';

		    when "1100010001"=>keynum<=8;iskey<='1';--高低音控制鍵同時按下,判為中音
			when "1100010010"=>keynum<=9;iskey<='1';
	    	when "1100010100"=>keynum<=10;iskey<='1';
			when "1100011000"=>keynum<=11;iskey<='1';
			when "1100100001"=>keynum<=12;iskey<='1';
			when "1100100010"=>keynum<=13;iskey<='1';
			when "1100100100"=>keynum<=14;iskey<='1';
			when others      =>keynum<=0;iskey<='0';							
		end case;
		else
			if count="11" then
				iskey<='0';
			end if;			
		end if;
	end if;	
	end process	key_judge;
	
	time_measure:process(clk_play,time_count)  --測量按鍵按下的時間
	begin
	  if clk_play'event and clk_play='1' then
		if time_count='1' and key_begin='1' then --新鍵按下,按鍵時間清零
			same_key_time<=0;
		elsif time_count='1' and key_begin='0' then
			same_key_time<=same_key_time+1;
		else 
			null;
		end if;
	   end if;
	end process time_measure;

end code;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人aaaa| 色悠久久久久综合欧美99| 日韩欧美aaaaaa| 人人超碰91尤物精品国产| 欧美日韩亚洲综合在线 | 91精品国产麻豆国产自产在线| 亚洲va欧美va天堂v国产综合| 欧美日韩二区三区| 极品销魂美女一区二区三区| 中文一区二区完整视频在线观看| 亚洲免费视频中文字幕| 欧美三级日本三级少妇99| 蜜桃视频在线观看一区| 精品国产sm最大网站| 99视频一区二区| 日韩国产一二三区| 国产精品丝袜在线| 777奇米成人网| hitomi一区二区三区精品| 亚洲观看高清完整版在线观看| 欧美成人官网二区| 99久久99久久综合| 国产福利91精品| 亚洲影视在线观看| 国产精品天干天干在观线| 欧美日韩另类一区| 成人av在线观| 国产激情偷乱视频一区二区三区 | 亚洲欧美国产77777| 日韩精品一区国产麻豆| 91久久香蕉国产日韩欧美9色| 国产揄拍国内精品对白| 天堂成人免费av电影一区| 中文字幕免费一区| 久久久久久夜精品精品免费| 欧美二区三区的天堂| 丁香婷婷综合色啪| 亚洲欧美综合色| 26uuu精品一区二区在线观看| 欧美在线高清视频| 91在线国内视频| 成人午夜伦理影院| 国产精品一二三四区| 国产美女精品人人做人人爽 | 亚洲电影你懂得| 午夜精品一区在线观看| 亚洲成人动漫在线免费观看| 亚洲亚洲精品在线观看| 亚洲一区二区视频在线观看| 日韩激情视频在线观看| 亚洲国产美女搞黄色| 一本一道综合狠狠老| 奇米色777欧美一区二区| 日韩高清在线电影| 欧美视频在线一区| 久久嫩草精品久久久久| 欧美精品1区2区3区| 国产精品久久久久9999吃药| 美女网站色91| 欧美肥妇bbw| 午夜激情一区二区三区| 色欧美乱欧美15图片| 欧美国产精品专区| 精品一区二区在线视频| 欧美一区国产二区| 日韩成人一级片| 精品一区二区影视| 国产精品一级在线| 色综合久久天天综合网| 欧美丰满高潮xxxx喷水动漫| 日韩三级视频在线观看| 国产欧美精品一区二区色综合朱莉| 中文字幕免费在线观看视频一区| 亚洲免费观看高清完整版在线观看| 综合久久久久综合| 老司机精品视频一区二区三区| 欧美亚洲愉拍一区二区| 欧美日韩一区二区在线观看视频| 欧美mv日韩mv国产| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲成a人片综合在线| 国产精品 日产精品 欧美精品| 在线欧美一区二区| 久久久久久久国产精品影院| 亚洲综合偷拍欧美一区色| 久久69国产一区二区蜜臀| 在线精品视频一区二区| 欧美国产成人精品| 老汉av免费一区二区三区| 欧美在线观看禁18| 国产欧美一区二区三区在线看蜜臀 | 亚洲欧美一区二区在线观看| 美女国产一区二区三区| 欧美性猛交一区二区三区精品| 亚洲国产精品ⅴa在线观看| 天堂一区二区在线| 91精品国产欧美一区二区成人 | 欧美va亚洲va香蕉在线| 韩国精品一区二区| 国产精品成人一区二区艾草| 色妞www精品视频| 天堂资源在线中文精品| 26uuu国产电影一区二区| 成人丝袜高跟foot| 亚洲成人av电影| 精品国产乱码久久久久久久久| 激情成人午夜视频| 一区二区三区不卡视频| 555夜色666亚洲国产免| 国产精品一区二区你懂的| 亚洲欧洲精品一区二区三区| 欧美绝品在线观看成人午夜影视| 精品中文av资源站在线观看| 国产视频亚洲色图| 欧美美女激情18p| 91色九色蝌蚪| 国产一区二区剧情av在线| 亚洲欧美另类久久久精品| 久久综合狠狠综合| 在线播放欧美女士性生活| 成人黄色av电影| 国内外精品视频| 三级影片在线观看欧美日韩一区二区| 麻豆精品蜜桃视频网站| 成人免费毛片a| 精品制服美女久久| 天天操天天色综合| 午夜精品久久久久久久久| 亚洲色图欧美偷拍| 国产精品免费aⅴ片在线观看| 久久综合久久综合九色| 欧美精品乱码久久久久久| 欧美日韩高清一区二区| 在线一区二区三区四区五区| av在线播放不卡| 91小视频在线免费看| 在线精品亚洲一区二区不卡| 色妞www精品视频| 欧美日韩一区精品| 欧美日本在线视频| 欧美r级在线观看| 国产丝袜在线精品| 亚洲另类一区二区| 国产色综合一区| 国产91精品久久久久久久网曝门| 中文字幕中文字幕中文字幕亚洲无线| 欧美激情一二三区| 美女国产一区二区三区| 色久优优欧美色久优优| 国产精品一区二区果冻传媒| 91免费小视频| 精品久久久久久无| 亚洲综合999| 成人一道本在线| 欧美成人国产一区二区| 亚洲精品乱码久久久久久久久| 看电影不卡的网站| 在线观看日韩高清av| 在线观看一区二区精品视频| www.欧美亚洲| 欧美三级日韩在线| 国产欧美日韩不卡免费| 自拍偷拍亚洲激情| 日本免费在线视频不卡一不卡二| 韩国v欧美v日本v亚洲v| 99视频精品全部免费在线| 日韩欧美国产不卡| 亚洲精品视频自拍| 国产黄人亚洲片| 欧美日韩一区二区不卡| 国产欧美综合在线观看第十页| 亚洲国产aⅴ天堂久久| 青青草视频一区| 欧美三区在线观看| 国产精品电影院| 久久激情五月婷婷| 欧美视频一区二区| 欧美一区二区在线播放| 依依成人综合视频| 99久久久免费精品国产一区二区| 欧美性大战xxxxx久久久| 国产精品盗摄一区二区三区| 国产在线一区二区综合免费视频| 欧美日韩久久久一区| 一区二区三区中文免费| 99精品久久免费看蜜臀剧情介绍| 亚洲精品在线三区| 国模大尺度一区二区三区| 日韩欧美一区二区免费| 老司机免费视频一区二区三区| 欧美一区二区三区免费大片| 亚洲成人激情社区| 欧美剧在线免费观看网站 | 国产在线麻豆精品观看| 日韩美女视频一区二区在线观看| 亚洲成av人片观看| 9191精品国产综合久久久久久| 亚洲国产精品久久人人爱蜜臀 | 在线影视一区二区三区| 国产日韩欧美一区二区三区乱码 |