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

📄 song.vhd

📁 音乐
💻 VHD
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity song is
port(clk_4mhz,clk_4hz:in std_logic;
     co: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 one 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(clk_4mhz,co)
   begin
   if co='1' then
     if(clk_4mhz'event and clk_4mhz='1')then
        if(divider="1111111111111")then
           carrier<='1';
           divider<=origin;
        else
           divider<=divider+'1';
           carrier<='0';
        end if;
     end if;
   end if;
   end process;
  process(carrier)
  begin
    if(carrier'event and carrier='1')then
      count<=count+'1';                                --输出时钟四分频
      if count="00" then
         speaker<='1';
      else
        speaker<='0';
      end if;
    end if;
  end process;
process(clk_4hz,counter,digit)
  begin
    if(clk_4hz'event and clk_4hz='1')then
      if(counter=140)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
 end case;
 end process;
end one;

⌨️ 快捷键说明

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