📄 notetabs.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY NoteTabs IS
PORT ( clk :IN STD_LOGIC; --4Hz
ToneIndex : OUT INTEGER RANGE 0 TO 15; --音调
PP : IN STD_LOGIC; --播放或暂停
NEXTONE : IN STD_LOGIC; --下一首
PREVIOUS : IN STD_LOGIC ; --本首重来
MODE : IN STD_LOGIC; --播放模式
SHOW :OUT STD_LOGIC; --播放模式显示
SEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--7段数码管输出
RANDOM: IN STD_LOGIC
);
END;
ARCHITECTURE one OF NoteTabs IS
SIGNAL Counter : INTEGER RANGE 0 TO 199;
BEGIN
CNT8: PROCESS(clk,PP,MODE,RANDOM,NEXTONE,PREVIOUS)
BEGIN
IF(clk'EVENT AND clk='1') THEN
IF( NEXTONE='0' AND PREVIOUS='0' AND MODE='0' AND PP='0' ) THEN --顺序播放模式下
SHOW<='0'; --灯灭
IF Counter=199 THEN Counter <=0;
ELSE Counter<=Counter+1;
END IF;
ELSIF (NEXTONE='0' AND PREVIOUS='0' AND MODE='1' AND PP='0' )THEN --随机播放模式下
SHOW<='1'; --灯亮
IF Counter=69 THEN --每首歌完后,如果随机信号为0则播放下一首歌
IF RANDOM='0' THEN Counter<=70; --如果为1,则播放前一首歌。这一切都可由改变状态
ELSIF RANDOM='1' THEN Counter<=138; --计数器Counter来实现
END IF;
ELSIF Counter=137 THEN
IF RANDOM='0' THEN Counter<=1;
ELSIF RANDOM='1' THEN Counter<=138;
END IF;
ELSIF Counter=199 THEN
IF RANDOM='0' THEN Counter<=0;
ELSIF RANDOM='1' THEN Counter<=70;
END IF;
ELSE Counter<=Counter+1;
END IF;
ELSIF PP='1' THEN --如果暂停了,计数器暂停计数
Counter<=Counter;
ELSIF (NEXTONE='1' AND PREVIOUS='0') THEN --选择下一首,将计数器直接改为本首歌曲的最后一个数
IF(Counter<=69) THEN Counter<=69;
ELSIF(Counter>=70 and Counter<=137) THEN Counter<=137;
ELSIF(Counter>=138) THEN Counter<=199;
END IF;
ELSIF(NEXTONE='0' AND PREVIOUS='1') THEN --选择本首重放,将计数器改为本首开始的状态数
IF(Counter<=69) THEN Counter<=0;
ELSIF(Counter>=70 and Counter<=137) THEN Counter<=70;
ELSIF(Counter>=138) THEN Counter<=138;
END IF;
END IF;
END IF;
END PROCESS;
PROCESS(clk) --歌曲序号显示,通过状态数的大小判断
BEGIN
IF Counter<=69 THEN SEG<="0110000";
ELSIF Counter>=70 AND Counter<=137 THEN SEG<="1101101";
ELSIF Counter>=138 THEN SEG<="1111001";
END IF;
END PROCESS;
Search : PROCESS(Counter)
BEGIN
CASE Counter IS
WHEN 00 =>ToneIndex <=10; --欢乐颂
WHEN 01 =>ToneIndex <=10;
WHEN 02 =>ToneIndex <=10;
WHEN 03 =>ToneIndex <=10;
WHEN 04 =>ToneIndex <=11;
WHEN 05 =>ToneIndex <=11;
WHEN 06 =>ToneIndex <=12;
WHEN 07 =>ToneIndex <=12;
WHEN 08=>ToneIndex<=12;
WHEN 09=>ToneIndex<=12;
WHEN 10=>ToneIndex<=11;
WHEN 11=>ToneIndex<=11;
WHEN 12=>ToneIndex<=10;
WHEN 13=>ToneIndex<=10;
WHEN 14=>ToneIndex<=9;
WHEN 15=>ToneIndex<=9;
WHEN 16=>ToneIndex<=8;
WHEN 17=>ToneIndex<=8;
WHEN 18=>ToneIndex<=8;
WHEN 19=>ToneIndex<=8;
WHEN 20=>ToneIndex<=8;
WHEN 21=>ToneIndex<=8;
WHEN 22=>ToneIndex<=8;
WHEN 23=>ToneIndex<=8;
WHEN 24=>ToneIndex<=9;
WHEN 25=>ToneIndex<=9;
WHEN 26=>ToneIndex<=10;
WHEN 27=>ToneIndex<=10;
WHEN 28=>ToneIndex<=10;
WHEN 29=>ToneIndex<=10;
WHEN 30=>ToneIndex<=10;
WHEN 31=>ToneIndex<=9;
WHEN 32=>ToneIndex<=9;
WHEN 33=>ToneIndex<=9;
WHEN 34=>ToneIndex<=9;
WHEN 35=>ToneIndex<=9;
WHEN 36=>ToneIndex<=10;
WHEN 37=>ToneIndex<=10;
WHEN 38=>ToneIndex<=10;
WHEN 39=>ToneIndex<=10;
WHEN 40=>ToneIndex<=10;
WHEN 41=>ToneIndex<=10;
WHEN 42=>ToneIndex<=10;
WHEN 43=>ToneIndex<=10;
WHEN 44=>ToneIndex<=11;
WHEN 45=>ToneIndex<=11;
WHEN 46=>ToneIndex<=12;
WHEN 47=>ToneIndex<=12;
WHEN 48=>ToneIndex<=12;
WHEN 49=>ToneIndex<=12;
WHEN 50=>ToneIndex<=11;
WHEN 51=>ToneIndex<=11;
WHEN 52=>ToneIndex<=10;
WHEN 53=>ToneIndex<=10;
WHEN 54=>ToneIndex<=9;
WHEN 55=>ToneIndex<=9;
WHEN 56=>ToneIndex<=8;
WHEN 57=>ToneIndex<=8;
WHEN 58=>ToneIndex<=8;
WHEN 59=>ToneIndex<=8;
WHEN 60=>ToneIndex<=9;
WHEN 61=>ToneIndex<=9;
WHEN 62=>ToneIndex<=10;
WHEN 63=>ToneIndex<=10;
WHEN 64=>ToneIndex<=9;
WHEN 65=>ToneIndex<=9;
WHEN 66=>ToneIndex<=9;
WHEN 67=>ToneIndex<=0;
WHEN 68=>ToneIndex<=0;
WHEN 69=>ToneIndex<=0; --第一首结束
WHEN 70=>ToneIndex<=0; --梁祝开始
WHEN 71=>ToneIndex<=0;
WHEN 72 =>ToneIndex <=3;
WHEN 73 =>ToneIndex <=3;
WHEN 74 =>ToneIndex <=3;
WHEN 75 =>ToneIndex <=3;
WHEN 76 =>ToneIndex <=5;
WHEN 77 =>ToneIndex <=5;
WHEN 78 =>ToneIndex <=5;
WHEN 79 =>ToneIndex <=6;
WHEN 80=>ToneIndex<=8;
WHEN 81=>ToneIndex<=8;
WHEN 82=>ToneIndex<=8;
WHEN 83=>ToneIndex<=9;
WHEN 84=>ToneIndex<=6;
WHEN 85=>ToneIndex<=8;
WHEN 86=>ToneIndex<=5;
WHEN 87=>ToneIndex<=5;
WHEN 88=>ToneIndex<=12;
WHEN 89=>ToneIndex<=12;
WHEN 90=>ToneIndex<=12;
WHEN 91=>ToneIndex<=15;
WHEN 92=>ToneIndex<=13;
WHEN 93=>ToneIndex<=12;
WHEN 94=>ToneIndex<=10;
WHEN 95=>ToneIndex<=12;
WHEN 96=>ToneIndex<=9;
WHEN 97=>ToneIndex<=9;
WHEN 98=>ToneIndex<=9;
WHEN 99=>ToneIndex<=9;
WHEN 100=>ToneIndex<=9;
WHEN 101=>ToneIndex<=9;
WHEN 102=>ToneIndex<=9;
WHEN 103=>ToneIndex<=9;
WHEN 104=>ToneIndex<=9;
WHEN 105=>ToneIndex<=9;
WHEN 106=>ToneIndex<=9;
WHEN 107=>ToneIndex<=10;
WHEN 108=>ToneIndex<=7;
WHEN 109=>ToneIndex<=7;
WHEN 110=>ToneIndex<=6;
WHEN 111=>ToneIndex<=6;
WHEN 112=>ToneIndex<=5;
WHEN 113=>ToneIndex<=5;
WHEN 114=>ToneIndex<=5;
WHEN 115=>ToneIndex<=6;
WHEN 116=>ToneIndex<=8;
WHEN 117=>ToneIndex<=8;
WHEN 118=>ToneIndex<=9;
WHEN 119=>ToneIndex<=9;
WHEN 120=>ToneIndex<=3;
WHEN 121=>ToneIndex<=3;
WHEN 122=>ToneIndex<=8;
WHEN 123=>ToneIndex<=8;
WHEN 124=>ToneIndex<=6;
WHEN 125=>ToneIndex<=5;
WHEN 126=>ToneIndex<=6;
WHEN 127=>ToneIndex<=8;
WHEN 128=>ToneIndex<=5;
WHEN 129=>ToneIndex<=5;
WHEN 130=>ToneIndex<=5;
WHEN 131=>ToneIndex<=5;
WHEN 132=>ToneIndex<=5;
WHEN 133=>ToneIndex<=5;
WHEN 134=>ToneIndex<=5;
WHEN 135=>ToneIndex<=5;
WHEN 136=>ToneIndex<=0;
WHEN 137=>ToneIndex<=0; --梁祝结束
WHEN 138=>ToneIndex<=0; --送别开始
WHEN 139=>ToneIndex<=0;
WHEN 140=>ToneIndex<=12;
WHEN 141=>ToneIndex<=12;
WHEN 142=>ToneIndex<=12;
WHEN 143=>ToneIndex<=12;
WHEN 144=>ToneIndex<=10;
WHEN 145=>ToneIndex<=10;
WHEN 146=>ToneIndex<=12;
WHEN 147=>ToneIndex<=12;
WHEN 148=>ToneIndex<=15;
WHEN 149=>ToneIndex<=15;
WHEN 150=>ToneIndex<=15;
WHEN 151=>ToneIndex<=15;
WHEN 152=>ToneIndex<=15;
WHEN 153=>ToneIndex<=15;
WHEN 154=>ToneIndex<=15;
WHEN 155=>ToneIndex<=15;
WHEN 156=>ToneIndex<=13;
WHEN 157=>ToneIndex<=13;
WHEN 158=>ToneIndex<=13;
WHEN 159=>ToneIndex<=13;
WHEN 160=>ToneIndex<=15;
WHEN 161=>ToneIndex<=15;
WHEN 162=>ToneIndex<=15;
WHEN 163=>ToneIndex<=15;
WHEN 164=>ToneIndex<=12;
WHEN 165=>ToneIndex<=12;
WHEN 166=>ToneIndex<=12;
WHEN 167=>ToneIndex<=12;
WHEN 168=>ToneIndex<=12;
WHEN 169=>ToneIndex<=12;
WHEN 170=>ToneIndex<=12;
WHEN 171=>ToneIndex<=12;
WHEN 172=>ToneIndex<=12;
WHEN 173=>ToneIndex<=12;
WHEN 174=>ToneIndex<=12;
WHEN 175=>ToneIndex<=12;
WHEN 176=>ToneIndex<=8;
WHEN 177=>ToneIndex<=8;
WHEN 178=>ToneIndex<=9;
WHEN 179=>ToneIndex<=9;
WHEN 180=>ToneIndex<=10;
WHEN 181=>ToneIndex<=10;
WHEN 182=>ToneIndex<=10;
WHEN 183=>ToneIndex<=10;
WHEN 184=>ToneIndex<=10;
WHEN 185=>ToneIndex<=10;
WHEN 186=>ToneIndex<=10;
WHEN 187=>ToneIndex<=10;
WHEN 188=>ToneIndex<=9;
WHEN 189=>ToneIndex<=9;
WHEN 190=>ToneIndex<=8;
WHEN 191=>ToneIndex<=8;
WHEN 192=>ToneIndex<=9;
WHEN 193=>ToneIndex<=9;
WHEN 194=>ToneIndex<=9;
WHEN 195=>ToneIndex<=9;
WHEN 196=>ToneIndex<=9;
WHEN 197=>ToneIndex<=9;
WHEN 198=>ToneIndex<=9;
WHEN 199=>ToneIndex<=9; --送别结束
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -