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

📄 song.vhdl

📁 自己写的<<梁祝>>歌曲,主要改变歌谱,就可以实现任意的歌曲
💻 VHDL
字号:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

--  Uncomment the following lines to use the declarations that are
--  provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;

entity song is
port(clk4m,clk4:in std_logic;	 ---预置计数器和乐谱产生器的时钟
     digit:buffer std_logic_vector(6 downto 0);	 ---高,中,低音数码管指示
	  zero:out std_logic_vector(4 downto 0);---	用于数码管高位置低
	  speaker:out std_logic);		---扬声器
end song;

architecture Behavioral of song is
 signal divider,origin:std_logic_vector(12 downto 0);	 ---13位计数值和预置值
 signal counter:integer range 0 to 140;		  ---7位计数器
 signal count:	std_logic_vector(1 downto 0);	  ---记录1/4拍
 signal 	carrier:std_logic;
begin
 zero<="00000";
 process(clk4m)
 begin
  if clk4m='1' and clk4m'event then
    if divider="1111111111111"	then
	    carrier<='1';
		 divider<=origin;
		else
		  divider<=divider+1;
		  carrier<='0';
	  end if;
	end if;
 end process;
 process(carrier)
	 begin
	  if carrier='1' and carrier'event then
	        count<=count+1;				  ---输出时钟4分频
		  if count="00" then
		    speaker<='0';
			else
			  speaker<='1';
			end if;
		end if;
  end process;
	process(clk4 )
	  begin
	   if clk4='1' and clk4'event then
		  if counter=137 then
		     counter<=0;
			 else
			  counter<=counter+1;
			 end if;
			end if;
	  case counter is
	    when 0=>digit<="0000011" ;	  when 1=>digit<="0000011" ;
		 when 2=>digit<="0000011" ;	  when 3=>digit<="0000011" ;
		 when 4=>digit<="0000101" ;	  when 5=>digit<="0000101" ;
		 when 6=>digit<="0000101" ;	  when 7=>digit<="0000110" ;
		 when 8=>digit<="0001000" ;	  when 9=>digit<="0001000" ;
		 when 10=>digit<="0001000" ;	  when 11=>digit<="0010000" ;
		 when 12=>digit<="0000110" ;	  when 13=>digit<="0001000" ;
		 when 14=>digit<="0000101" ;	  when 15=>digit<="0000101" ;
		 when 16=>digit<="0101000" ;	  when 17=>digit<="0101000" ;
		 when 18=>digit<="0101000" ;	  when 19=>digit<="1000000" ;
		 when 20=>digit<="0110000" ;	  when 21=>digit<="0101000" ;
		 when 22=>digit<="0011000" ;	  when 23=>digit<="0101000" ;
		 when 24=>digit<="0010000" ;	  when 25=>digit<="0010000" ;
		 when 26=>digit<="0010000" ;	  when 27=>digit<="0010000" ;
		 when 28=>digit<="0010000" ;	  when 29=>digit<="0010000" ;
		 when 30=>digit<="0010000" ;	  when 31=>digit<="0000000" ;
		 when 32=>digit<="0010000" ;	  when 33=>digit<="0010000" ;
		 when 34=>digit<="0010000" ;	  when 35=>digit<="0011000" ;
		 when 36=>digit<="0000111" ;	  when 37=>digit<="0000111" ;
		 when 38=>digit<="0000110" ;	  when 39=>digit<="0000110" ;
		 when 40=>digit<="0000101" ;	  when 41=>digit<="0000101" ;
		 when 42=>digit<="0000101" ;	  when 43=>digit<="0000110" ;
		 WHEN 44=>digit<="0001000"; 	 WHEN 45=>digit<="0001000"; 
       WHEN 46=>digit<="0010000"; 	 WHEN 47=>digit<="0010000"; 
       WHEN 48=>digit<="0000011"; 	 WHEN 49=>digit<="0000011";
       WHEN 50=>digit<="0001000"; 	 WHEN 51=>digit<="0001000";
       WHEN 52=>digit<="0000110"; 	 WHEN 53=>digit<="0000101";
       WHEN 54=>digit<="0000110"; 	 WHEN 55=>digit<="0001000";
       WHEN 56=>digit<="0000101"; 	 WHEN 57=>digit<="0000101";
       WHEN 58=>digit<="0000101"; 	 WHEN 59=>digit<="0000101"; 
       WHEN 60=>digit<="0000101"; 	 WHEN 61=>digit<="0000101"; 
       WHEN 62=>digit<="0000101"; 	 WHEN 63=>digit<="0000101";
       WHEN 64=>digit<="0011000"; 	 WHEN 65=>digit<="0011000"; 
       WHEN 66=>digit<="0011000"; 	 WHEN 67=>digit<="0101000"; 
       WHEN 68=>digit<="0000111"; 	 WHEN 69=>digit<="0000111"; 
       WHEN 70=>digit<="0010000"; 	 WHEN 71=>digit<="0010000"; 
       WHEN 72=>digit<="0000110"; 	 WHEN 73=>digit<="0001000";
		 WHEN 74=>digit<="0000101"; 	 WHEN 75=>digit<="0000101"; 
		 WHEN 76=>digit<="0000101"; 	 WHEN 77=>digit<="0000101"; 
		 WHEN 78=>digit<="0000101"; 	 WHEN 79=>digit<="0000101";
		 WHEN 80=>digit<="0000011";	 WHEN 81=>digit<="0000101"; 
		 WHEN 82=>digit<="0000011";	 WHEN 83=>digit<="0000011";
		 WHEN 84=>digit<="0000101";	 WHEN 85=>digit<="0000110";
		WHEN 86=>digit<="0000111";		 WHEN 87=>digit<="0010000"; 
		WHEN 88=>digit<="0000110"; 	 WHEN 89=>digit<="0000110"; 
		WHEN 90=>digit<="0000110";		 WHEN 91=>digit<="0000110"; 
	   WHEN 92=>digit<="0000110"; 	 WHEN 93=>digit<="0000110";
		WHEN 94=>digit<="0000101";		 WHEN 95=>digit<="0000110";
		WHEN 96=>digit<="0001000"; 	 WHEN 97=>digit<="0001000"; 
		WHEN 98=>digit<="0001000";	    WHEN 99=>digit<="0010000";
		WHEN 100=>digit<="0101000"; 	 WHEN 101=>digit<="0101000";
      WHEN 102=>digit<="0101000"; 	 WHEN 103=>digit<="0011000"; 
      WHEN 104=>digit<="0010000"; 	 WHEN 105=>digit<="0010000";
      WHEN 106=>digit<="0011000"; 	 WHEN 107=>digit<="0010000"; 
      WHEN 108=>digit<="0001000"; 	 WHEN 109=>digit<="0001000";
      WHEN 110=>digit<="0000110"; 	 WHEN 111=>digit<="0000101";
      WHEN 112=>digit<="0000011"; 	 WHEN 113=>digit<="0000011"; 
      WHEN 114=>digit<="0000011"; 	 WHEN 115=>digit<="0000011";
      WHEN 116=>digit<="0001000"; 	 WHEN 117=>digit<="0001000";
      WHEN 118=>digit<="0001000"; 	 WHEN 119=>digit<="0001000"; 
      WHEN 120=>digit<="0000110"; 	 WHEN 121=>digit<="0001000";
      WHEN 122=>digit<="0000110"; 	 WHEN 123=>digit<="0000101"; 
      WHEN 124=>digit<="0000011";	 WHEN 125=>digit<="0000101";
		WHEN 126=>digit<="0000110"; 	 WHEN 127=>digit<="0001000"; 
      WHEN 128=>digit<="0000101"; 	 WHEN 129=>digit<="0000101";
      WHEN 130=>digit<="0000101"; 	 WHEN 131=>digit<="0000101"; 
      WHEN 132=>digit<="0000101"; 	 WHEN 133=>digit<="0000101";
      WHEN 134=>digit<="0000101"; 	 WHEN 135=>digit<="0000101";
      WHEN 136=>digit<="0000000"; 	 WHEN 137=>digit<="0000000";
      WHEN 138=>digit<="0000000"; 	 WHEN 139=>digit<="0000000";
      WHEN others=>digit<="0000000"; 
    END CASE; 
    CASE digit IS 
			WHEN "0000011"=>origin<="0100001001100"; 	   ---2124
         WHEN "0000101"=>origin<="0110000010001"; 		---3089
         WHEN "0000110"=>origin<="0111000111110"; 		---3646
         WHEN "0000111"=>origin<="1000000101101"; 		---4141
         WHEN "0001000"=>origin<="1000100010001"; 	   ---4369
         WHEN "0010000"=>origin<="1001010110010"; 		---4786
         WHEN "0011000"=>origin<="1010000100101"; 		---5157
         WHEN "0101000"=>origin<="1011000001000"; 		---5640
         WHEN "0110000"=>origin<="1011100011110"; 		---5918
         WHEN "1000000"=>origin<="1100010001000"; 		---6280
         WHEN others=>origin<="1111111111111"; 			---8191 ,0分频,休止符,扬声器不出声,
	 END  CASE; 
  END PROCESS; 
end Behavioral;

⌨️ 快捷键说明

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