欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      EDA_電子琴課程設(shè)計(jì)

      時(shí)間:2019-05-15 04:49:57下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《EDA_電子琴課程設(shè)計(jì)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《EDA_電子琴課程設(shè)計(jì)》。

      第一篇:EDA_電子琴課程設(shè)計(jì)

      基于VHDL原理圖及文本輸入法 的簡(jiǎn)單電子琴電路的設(shè)計(jì)

      1.1 課程設(shè)計(jì)目的

      本課程設(shè)計(jì)主要是基于VHDL文本輸入法設(shè)計(jì)樂(lè)曲演奏電路,該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,采用自頂向下的設(shè)計(jì)方法來(lái)實(shí)現(xiàn),通過(guò)按鍵輸入來(lái)控制音響或者自動(dòng)演奏已存入的歌曲。系統(tǒng)由樂(lè)曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三個(gè)部分組成。系統(tǒng)實(shí)現(xiàn)是用硬件描述語(yǔ)言VHDL按模塊化方式進(jìn)行設(shè)計(jì),然后進(jìn)行編程、時(shí)序仿真、電路功能驗(yàn)證,奏出美妙的樂(lè)曲(當(dāng)然由于條件限制,暫不進(jìn)行功能驗(yàn)證,只進(jìn)行編程和時(shí)序仿真)。該設(shè)計(jì)最重要的一點(diǎn)就是通過(guò)按鍵控制不同的音調(diào)發(fā)生,每一個(gè)音調(diào)對(duì)應(yīng)不同的頻率,從而輸出對(duì)應(yīng)頻率的聲音。

      1.2 課程設(shè)計(jì)內(nèi)容

      (1)設(shè)計(jì)一個(gè)簡(jiǎn)易的八音符電子琴,它可通過(guò)按鍵輸入來(lái)控制音響。

      (2)系統(tǒng)演奏時(shí)可以選擇是手動(dòng)演奏(由鍵盤(pán)輸入)還是自動(dòng)演奏已存入的樂(lè)曲。(3)能夠自動(dòng)演奏多首樂(lè)曲,且樂(lè)曲可重復(fù)演奏。

      1.3 課程設(shè)計(jì)原理

      本課程設(shè)計(jì)目的在于靈活運(yùn)用EDA技術(shù)編程實(shí)現(xiàn)一個(gè)簡(jiǎn)易電子琴的樂(lè)曲演奏,它要求在實(shí)驗(yàn)箱上構(gòu)造一個(gè)電子琴電路,不同的音階對(duì)應(yīng)不同頻率的正弦波。按下每個(gè)代表不同音階的按鍵時(shí),能夠發(fā)出對(duì)應(yīng)頻率的聲音。故系統(tǒng)可分為樂(lè)曲自動(dòng)演奏模塊(AUTO)、音調(diào)發(fā)生模塊(TONE)和數(shù)控分頻模塊(FENPIN)三部分。系統(tǒng)的整體組裝設(shè)計(jì)原理圖如圖1-1所示。

      圖1-1 系統(tǒng)的整體組裝設(shè)計(jì)原理圖

      由于設(shè)計(jì)分模塊組成,每個(gè)單獨(dú)的模塊都是一個(gè)完整的源程序,分別實(shí)現(xiàn)不同性質(zhì)的功能,但是每個(gè)模塊又是緊密關(guān)聯(lián)的,前一個(gè)模塊的輸出很可能是后一模塊的輸入。如AUTO模塊的音符信號(hào)輸出就是TONE模塊的音符信號(hào)輸入。另外,時(shí)鐘脈沖信號(hào)在本課程設(shè)計(jì)中用的最多,用處也最大,一般情況下時(shí)鐘信號(hào)處上升沿有效,判斷和控制各個(gè)計(jì)數(shù)器計(jì)數(shù)多少。簡(jiǎn)易電子琴的設(shè)計(jì)過(guò)程

      根據(jù)系統(tǒng)設(shè)計(jì)要求,系統(tǒng)該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,設(shè)計(jì)采用自頂向下的設(shè)計(jì)方法,通過(guò)按鍵輸入來(lái)控制音響或者自動(dòng)演奏已存入的歌曲。它由樂(lè)曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三部分組成。

      2.1 樂(lè)曲自動(dòng)演奏模塊

      樂(lè)曲自動(dòng)演奏模塊的作用是產(chǎn)生8位發(fā)生控制輸入信號(hào)。當(dāng)進(jìn)行自動(dòng)演奏時(shí),由存儲(chǔ)在此模塊的8位二進(jìn)制數(shù)作為發(fā)聲控制輸入,從而自動(dòng)演奏樂(lè)曲。

      該模塊的VHDL源程序主要由3個(gè)工作進(jìn)程組成,分別為PULSE0,MUSIC和COM1。PULSE0的作用是根據(jù)鍵盤(pán)輸入(自動(dòng)演奏)的值(0或1)來(lái)判斷計(jì)數(shù)器COUNT以及脈沖CLK2的輸出值。部分源程序如下:

      PULSE0:PROCESS(CLK,AUTO)

      --工作進(jìn)程開(kāi)始

      VARIABLE COUNT:INTEGER RANGE 0 TO 8;

      --定義計(jì)數(shù)器變量,值從0到8

      IF AUTO='1'THEN

      --鍵盤(pán)輸入為1

      COUNT:=0;CLK2<='0';--計(jì)數(shù)器值指0,時(shí)鐘信號(hào)為0

      ELSIF(CLK'EVENT AND CLK='1')THEN--時(shí)鐘輸入信號(hào)為1

      COUNT:=COUNT+1;--計(jì)數(shù)器加1

      當(dāng)確定了時(shí)鐘信號(hào)輸出的值后,在第二個(gè)PROCESS中就可以由它控制8位發(fā)聲控制輸入信號(hào)了。即CLK2的值為0時(shí),COUNT0為1。最后的COM1便是由前兩個(gè)PROCESS所確定的COUNT0、AUTO和鍵盤(pán)輸入信號(hào)值INDEX2將8位的二進(jìn)制數(shù)轉(zhuǎn)化為音符信號(hào)的輸出,達(dá)到自動(dòng)演奏的目的。部分源程序如下:

      IF AUTO='0'THEN CASE COUNT0 IS WHEN 0=>INDEX0<=“00000100”;--3

      WHEN 4=>INDEX0<=“00010000”;--5 該模塊最主要的用途就是將輸入二進(jìn)制數(shù)轉(zhuǎn)化為發(fā)聲控制輸入,是產(chǎn)生音符的重要步

      驟,AUTO模塊的源程序符號(hào)編輯圖如圖3-1。

      圖3-1 AUTO模塊的符號(hào)編輯圖

      2.1.1樂(lè)曲演奏模塊文本程序:--程序名稱(chēng):AUTO.VHD--程序功能:采用VHDL語(yǔ)言編程產(chǎn)生8位發(fā)聲控制輸入信號(hào)。

      LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY AUTO IS

      PORT(CLK:

      IN STD_LOGIC;

      --系統(tǒng)時(shí)鐘信號(hào)

      AUTO:

      IN STD_LOGIC;

      --鍵盤(pán)輸入/自動(dòng)演奏

      CLK2: BUFFER STD_LOGIC;

      --時(shí)鐘輸出

      INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      --鍵盤(pán)輸入信號(hào)

      INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--音符信號(hào)輸出 END AUTO;ARCHITECTURE BEHAVIORAL OF AUTO IS SIGNAL COUNT0:INTEGER RANGE 0 TO 31;--定義信號(hào)計(jì)數(shù)器,有32個(gè)信號(hào)元素 BEGIN PULSE0:PROCESS(CLK,AUTO)

      --PULSE0工作進(jìn)程開(kāi)始

      VARIABLE COUNT:INTEGER RANGE 0 TO 8;

      --定義變量計(jì)數(shù)器,從0到8 BEGIN

      IF AUTO='1'THEN

      --鍵盤(pán)輸入為1

      COUNT:=0;CLK2<='0';

      --計(jì)數(shù)器值為0,時(shí)鐘信號(hào)2幅值為0

      ELSIF(CLK'EVENT AND CLK='1')THEN

      --輸入的時(shí)鐘信號(hào)為其他值

      COUNT:=COUNT+1;

      --計(jì)數(shù)器加1即為1

      IF COUNT=4 THEN

      CLK2<='1';

      ELSIF COUNT=8 THEN

      CLK2<='0';COUNT:=0;END IF;END IF;END PROCESS;MUSIC:PROCESS(CLK2)

      --MUSIC工作進(jìn)程開(kāi)始 BEGIN

      IF(CLK2'EVENT AND CLK2='1')THEN

      --時(shí)鐘信號(hào)2為1

      IF(COUNT0=31)THEN

      --計(jì)數(shù)器值為31

      COUNT0<=0;

      --計(jì)數(shù)器清0 ELSE

      COUNT0<=COUNT0+1;

      END IF;END IF;END PROCESS;COM1:PROCESS(COUNT0,AUTO,INDEX2)BEGIN IF AUTO='0'THEN

      --鍵盤(pán)輸入為0 CASE COUNT0 IS

      --由計(jì)數(shù)器從0到31的取值判斷音符信號(hào)的8位二進(jìn)制數(shù)

      WHEN 0=>INDEX0<=“00000100”;

      --3 WHEN 1=>INDEX0<=“00000100”;

      --3 WHEN 2=>INDEX0<=“00000100”;

      --3 WHEN 3=>INDEX0<=“00000100”;

      WHEN 4=>INDEX0<=“00010000”;

      WHEN 5=>INDEX0<=“00010000”;

      WHEN 6=>INDEX0<=“00010000”;

      WHEN 7=>INDEX0<=“00100000”;

      WHEN 8=>INDEX0<=“10000000”;

      WHEN 9=>INDEX0<=“10000000”;

      WHEN 10=>INDEX0<=“10000000”;WHEN 11=>INDEX0<=“00000100”;WHEN 12=>INDEX0<=“00000010”;WHEN 13=>INDEX0<=“00000010”;WHEN 14=>INDEX0<=“00000001”;WHEN 15=>INDEX0<=“00000001”;WHEN 16=>INDEX0<=“00010000”;WHEN 17=>INDEX0<=“00010000”;WHEN 18=>INDEX0<=“00001000”;WHEN 19=>INDEX0<=“00001000”;WHEN 20=>INDEX0<=“00001000”;WHEN 21=>INDEX0<=“00000100”;WHEN 22=>INDEX0<=“00000010”;WHEN 23=>INDEX0<=“00000010”;WHEN 24=>INDEX0<=“00010000”;WHEN 25=>INDEX0<=“00010000”;WHEN 26=>INDEX0<=“00001000”;WHEN 27=>INDEX0<=“00001000”;WHEN 28=>INDEX0<=“00000100”;WHEN 29=>INDEX0<=“00000100”;WHEN 30=>INDEX0<=“00000010”;WHEN 31=>INDEX0<=“00000010”;WHEN OTHERS=>NULL;END CASE;ELSE INDEX0<=INDEX2;

      END IF;END PROCESS;END BEHAVIORAL;

      2.2 音調(diào)發(fā)生模塊

      --3--5--5--5--6--8--8--8--3--2--2--1--1--5--5--4--4--4--3--2--2--5--5--4--4--3--3--2--2

      --將音符信號(hào)0的值賦給音符信號(hào)2

      音調(diào)發(fā)生模塊的作用是產(chǎn)生音階的分頻預(yù)置值。當(dāng)8位發(fā)聲控制輸入信號(hào)中的某一位為高電平時(shí),則對(duì)應(yīng)某一音階的數(shù)值將輸出,該數(shù)值即為該音階的分頻預(yù)置值,分頻預(yù)置值控制數(shù)控分頻模塊進(jìn)行分頻,由此得到每個(gè)音階對(duì)應(yīng)的頻率。

      該模塊的唯一輸入信號(hào)INDEX對(duì)應(yīng)就是自動(dòng)模塊中最后的輸出INDEX0,音符顯示信號(hào)CODE,高低音顯示信號(hào)HIGH和音符分頻系數(shù)都是根據(jù)音符輸入確定的。比如我們自定義INDEX第8位為高電平時(shí),它的分頻系數(shù)則為773Hz,音符顯示信號(hào)為1001111,即是773的二進(jìn)制表示,此時(shí)高低音顯示1表示高音。部分源程序如下: CASE INDEX IS WHEN“00000010”=>TONE0<=912;CODE<=“0010010”;HIGH<='1';--音符第7位為1,分頻數(shù)912Hz,音符顯示為0010010,屬高音 WHEN“01000000”=>TONE0<=1372;CODE<=“0001111”;HIGH<='0';WHEN OTHERS =>TONE0<=2047;CODE<=“0000001”;HIGH<='0';顯然,該模塊最主要的作用就是給音符輸入預(yù)設(shè)頻率值,因?yàn)?,電子琴最終實(shí)現(xiàn)樂(lè)曲演奏就是輸出不同頻率的正弦波,此模塊就是將二進(jìn)制發(fā)聲信號(hào)轉(zhuǎn)化為對(duì)應(yīng)的頻率。

      3—2 TONE模塊的符號(hào)編輯圖

      2.2.1音調(diào)發(fā)生模塊文本程序:--程序名稱(chēng):TONE.VHD--程序功能:采用VHDL語(yǔ)言編程產(chǎn)生音階的分頻預(yù)置值。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TONE IS PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      --音符輸入信號(hào)

      CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--音符顯示信號(hào)

      HIGH: OUT STD_LOGIC;

      --高低音顯示信號(hào)

      TONE0:OUT INTEGER RANGE 0 TO 2047);

      --音符的分頻系數(shù) END TONE;ARCHITECTURE ART OF TONE IS BEGIN SEARCH:PROCESS(INDEX)

      BEGIN CASE INDEX IS WHEN“00000001”=>TONE0<=773;CODE<=“1001111”;HIGH<='1';

      --分頻系數(shù)773Hz,音符顯示1001111,顯示低音

      WHEN“00000010”=>TONE0<=912;CODE<=“0010010”;HIGH<='1';WHEN“00000100”=>TONE0<=1036;CODE<=“0000110”;HIGH<='1';WHEN“00001000”=>TONE0<=1116;CODE<=“1001100”;HIGH<='1';WHEN“00010000”=>TONE0<=1197;CODE<=“0100100”;HIGH<='1';WHEN“00100000”=>TONE0<=1290;CODE<=“0100000”;HIGH<='0';WHEN“01000000”=>TONE0<=1372;CODE<=“0001111”;HIGH<='0';WHEN“10000000”=>TONE0<=1410;CODE<=“0000000”;HIGH<='0';WHEN OTHERS =>TONE0<=2047;CODE<=“0000001”;HIGH<='0';END CASE;END PROCESS;END ART;2.3 數(shù)控分頻模塊

      數(shù)控分頻模塊是對(duì)時(shí)基脈沖進(jìn)行分頻,得到與0、1、2、3、4、5、6、7八個(gè)音符相對(duì)應(yīng)的頻率。FENPIN模塊的源程序符號(hào)編輯圖如圖3-3。

      3—3 FENPIN模塊符號(hào)編輯圖

      該模塊主要由4個(gè)工作進(jìn)程組成。首先,根據(jù)系統(tǒng)時(shí)鐘信號(hào)的輸入得到時(shí)基脈沖以及計(jì)數(shù)器的值,而時(shí)鐘信號(hào)在AUTO模塊中便已給出,兩者之間的設(shè)置關(guān)系類(lèi)似于AUTO模塊中第一個(gè)工作進(jìn)程的設(shè)置。第二個(gè)PROCESS是此模塊的核心,即由時(shí)基脈沖值轉(zhuǎn)化為音符的頻率。部分源程序如下:

      VARIABLE COUNT11:INTEGER RANGE 0 TO 2047;--定義頻率計(jì)數(shù)器,從0到2047Hz

      IF(PRECLK'EVENT AND PRECLK='1')THEN--時(shí)基脈沖為1時(shí)

      IF COUNT11

      --頻率計(jì)數(shù)器小于音符分頻系數(shù)

      COUNT11:=COUNT11+1;FULLSPKS<='1';--計(jì)數(shù)加1,揚(yáng)聲器音頻為1 ELSE

      COUNT11:=0;FULLSPKS<='0';最后一個(gè)PROCESS則是用來(lái)設(shè)置揚(yáng)聲器輸出信號(hào)的,揚(yáng)聲器信號(hào)由0和1控制,當(dāng)且僅當(dāng)前一個(gè)PROCESS中的FULLSPKS輸出為1時(shí),揚(yáng)聲器才有輸出,再根據(jù)計(jì)數(shù)器取值來(lái)確定輸出是1還是0。部分源程序如下:

      IF(FULLSPKS'EVENT AND FULLSPKS='1')THEN--揚(yáng)聲器音頻信號(hào)為1

      COUNT2:=NOT COUNT2;

      IF COUNT2='1'THEN SPKS<='1';

      --揚(yáng)聲器輸出為1 ELSE SPK<=’0’;

      .2.3.1數(shù)控分頻模塊文本程序:

      LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FENPIN IS PORT(CLK1: IN STD_LOGIC;

      --系統(tǒng)時(shí)鐘信號(hào)

      TONE1: IN INTEGER RANGE 0 TO 2047;--音符分頻系?

      SPKS: OUT STD_LOGIC);

      --驅(qū)動(dòng)揚(yáng)聲器的音頻信? END ENTITY FENPIN;

      ARCHITECTURE ART OF FENPIN IS

      SIGNAL PRECLK:STD_LOGIC;

      --定義時(shí)基脈沖信號(hào)

      SIGNAL FULLSPKS:STD_LOGIC;BEGIN PROCESS(CLK1)VARIABLE COUNT:INTEGER RANGE 0 TO 8 :=0;

      --定義變量計(jì)數(shù)器,從0到8 BEGIN IF(CLK1'EVENT AND CLK1='1')THEN

      --據(jù)時(shí)鐘信號(hào)為1時(shí)

      COUNT:=COUNT+1;

      --判斷計(jì)數(shù)器取值為1

      IF COUNT=2 THEN

      PRECLK<='1';ELSIF COUNT=4 THEN

      --若計(jì)數(shù)器計(jì)4

      PRECLK<='0';

      COUNT:=0;--時(shí)基脈沖為0,計(jì)數(shù)器清零

      ELSE

      END IF;END IF;END PROCESS;PROCESS(PRECLK,TONE1)VARIABLE COUNT11:INTEGER RANGE 0 TO 2047;--定義變量頻率計(jì)數(shù)器11,從0到2047Hz BEGIN

      IF(PRECLK'EVENT AND PRECLK='1')THEN

      --PRECLK脈沖上升沿觸發(fā)

      IF COUNT11

      --若計(jì)數(shù)器11值小于音符信號(hào)1

      COUNT11:=COUNT11+1;

      FULLSPKS<='1';

      --計(jì)數(shù)器加1,音頻信號(hào)為1

      ELSE

      COUNT11:=0;

      FULLSPKS<='0';

      END IF;END IF;

      END PROCESS;PROCESS(FULLSPKS)

      --音頻信號(hào)輸出進(jìn)程開(kāi)始--VARIABLE count2:integer range 0 to 1 :=0;

      --定義變量計(jì)數(shù)器2,初值為0--BEGIN IF(FULLSPKS'EVENT AND FULLSPKS='1')THEN

      if count2=1 then count2:= 0;

      else

      count2:=1;

      end if;

      IF COUNT2=1 THEN

      SPKS<='1';

      ELSE

      SPKS<='0';

      END IF;END IF;END PROCESS;END ART;2.4 頂層設(shè)計(jì)

      該DIANZIQIN模塊是整個(gè)電子琴設(shè)計(jì)的核心,也是VHDL程序的主程序,前面3個(gè)源程序都是作為子程序分別實(shí)現(xiàn)電子琴的某一功能,而DIANZIQIN模塊則通過(guò)調(diào)用子程序最終實(shí)現(xiàn)樂(lè)曲演奏的目的,奏出美妙的樂(lè)曲。利用VHDL語(yǔ)言COMPONENT將三個(gè)模塊組合起來(lái),其中3個(gè)模塊和DIANZIQIN模塊的輸入輸出是一一對(duì)應(yīng)的,比如AUTO對(duì)應(yīng)HANDTOAUTO,TONE0對(duì)應(yīng)TONE2,SPKS對(duì)應(yīng)SPKOUT等,該模塊的符號(hào)編輯圖如圖3-4。

      圖3-4 DIANZIQIN系統(tǒng)模塊的符號(hào)編輯圖

      該圖描述的是DIANZIQIN模塊輸入輸出的變量表示,整個(gè)系統(tǒng)的整體組裝設(shè)計(jì)原理圖就是這4幅編輯圖按輸入輸出關(guān)系順序連接而成的。2..4.1頂層模塊文本程序:--程序名稱(chēng):DIANZIQIN.VHD--程序功能:采用VHDL語(yǔ)言編寫(xiě)主程序調(diào)用3個(gè)子程序,實(shí)現(xiàn)樂(lè)曲演奏的功能。LIBRARY IEEE;

      USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;

      ENTITY DIANZIQIN IS PORT(CLK32MHZ: IN STD_LOGIC;

      --系統(tǒng)時(shí)鐘信號(hào)

      HANDTOAUTO: IN STD_LOGIC;

      --鍵盤(pán)輸入/自動(dòng)演奏信號(hào)

      CODE1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--音符顯示信號(hào)

      INDEX1: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      --鍵盤(pán)輸入信號(hào)

      HIGH1: OUT STD_LOGIC;

      --高低音節(jié)信號(hào)

      SPKOUT: OUT STD_LOGIC);

      --音頻信號(hào) END;ARCHITECTURE ART OF DIANZIQIN IS COMPONENT AUTO

      --引用 AUTO元件 PORT(CLK: IN STD_LOGIC;

      AUTO: IN STD_LOGIC;

      --輸入自動(dòng)演奏信號(hào)

      INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      --輸入8位控制信號(hào)

      INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

      --輸出8位的音符 END COMPONENT;COMPONENT TONE

      --引用TONE元件 PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

      HIGH: OUT STD_LOGIC;

      TONE0: OUT INTEGER RANGE 0 TO 2047);END COMPONENT;COMPONENT FENPIN

      --引用FENPIN元件 PORT(CLK1: IN STD_LOGIC;

      TONE1: IN INTEGER RANGE 0 TO 2047;

      SPKS: OUT STD_LOGIC);END COMPONENT;SIGNAL TONE2:INTEGER RANGE 0 TO 2047;

      --定義主程序音調(diào)頻率信號(hào) SIGNAL INDX:STD_LOGIC_VECTOR(7 DOWNTO 0);

      --定義8位的音符信號(hào) BEGIN U0:AUTO PORT MAP(CLK=>CLK32MHZ,INDEX2=>INDEX1,INDEX0=>INDX,AUTO=>HANDTOAUTO);

      --調(diào)用自動(dòng)演奏模塊 U1:TONE PORT MAP(INDEX=>INDX,TONE0=>TONE2,CODE=>CODE1,HIGH=>HIGH1);--調(diào)用音調(diào)發(fā)

      生模塊

      U2:FENPIN PORT MAP(CLK1=>CLK32MHZ,TONE1=>TONE2,SPKS=>SPKOUT);END ART;

      --調(diào)用數(shù)控分頻模塊 系統(tǒng)仿真

      系統(tǒng)仿真是在實(shí)際系統(tǒng)上進(jìn)行實(shí)驗(yàn)研究比較困難時(shí)適用的必不可少的工具,它是指通過(guò)系統(tǒng)模型實(shí)驗(yàn)去研究一個(gè)已經(jīng)存在或正在設(shè)計(jì)的系統(tǒng)的過(guò)程,通俗地講,就是進(jìn)行模型實(shí)驗(yàn)。因而,系統(tǒng)仿真的結(jié)果決定整個(gè)課程設(shè)計(jì)任務(wù)完成的到位程度。

      3.1 時(shí)序仿真

      編譯完成后,可以對(duì)所進(jìn)行的設(shè)計(jì)進(jìn)行仿真,下面介紹一下仿真的步驟。(1)在file下拉菜單中選擇new,再在其彈出的對(duì)話框中點(diǎn)選,點(diǎn)擊OK確定,則進(jìn)入了文本編輯器,在編輯區(qū)輸入程序,然后保存為.vhd文件(注意保存時(shí)實(shí)體名要與文件名一致,否則編譯時(shí)會(huì)出錯(cuò));接下來(lái)在file下來(lái)菜單選擇project,在其下拉菜單中選Assign,在其下拉菜單中選device,最后選擇,建立工程文件。第三步,在菜單欄里選擇,再選,確定即可;第四步,在菜單欄中點(diǎn)擊MAX+plusII再用下拉菜單中選compiler進(jìn)行編譯。

      (2)打開(kāi)波形編輯器,在Node菜單中選擇Enter Nodes from SNF項(xiàng),列出所有的信號(hào),選擇所需要的信號(hào),然后畫(huà)出輸入信號(hào)的波形,最后將該文件以.scf的擴(kuò)展名 存盤(pán)。

      (3)在MAX+plusⅡ菜單中打開(kāi)仿真器窗口,單擊Start按鈕,當(dāng)仿真器結(jié)束工作時(shí),單擊Open SCF按鈕,就可以看到仿真的結(jié)果。

      本課程設(shè)計(jì)的仿真平臺(tái)是MAX+plusⅡ,通過(guò)對(duì)VHDL源程序進(jìn)行編譯檢錯(cuò),然后創(chuàng)建波形文件(后綴名為.scf),加入輸入輸出變量,選擇適用的芯片(EPF10K10LC84-3)以及設(shè)定仿真結(jié)束時(shí)間(100us),設(shè)置好輸入初值進(jìn)行仿真,得到仿真波形圖。由于電子琴4個(gè)模塊都是獨(dú)立的程序,可分別對(duì)各個(gè)程序仿真,驗(yàn)證輸入輸出的正確性,但在最終能演奏出樂(lè)曲的則是頂層設(shè)計(jì)模塊。

      3.1.1樂(lè)曲自動(dòng)演奏模塊的仿真如圖3-1所示。

      圖3-1 樂(lè)曲自動(dòng)演奏模塊的仿真圖

      該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK初值設(shè)為0,自動(dòng)演奏AUTO設(shè)為1,鍵盤(pán)輸入信號(hào)INDEX2為00,INDEX0為音符信號(hào)輸出,是8位的二進(jìn)制代碼它根據(jù)COUNT0的值改變而改變。

      3.1.2音調(diào)發(fā)生模塊的仿真如圖3-2所示。

      圖3-2 音調(diào)發(fā)生模塊的仿真圖

      該圖輸入音符信號(hào)INDEX初值為00,輸出是音符顯示信號(hào)CODE為01,高低音顯示信號(hào)為0,音符的分頻系數(shù)為11111111即2047Hz。

      3.1.3數(shù)控分頻模塊的仿真如圖3-3所示。

      圖3-

      3數(shù)控分頻模塊的仿真圖

      該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK1初值為0(各輸出值都是在時(shí)鐘信號(hào)的下降沿有效),音符分頻系數(shù)TONE1為00100000即1290Hz,驅(qū)動(dòng)揚(yáng)聲器的音頻信號(hào)SPKS輸出為1。

      3.1.4簡(jiǎn)易電子琴整個(gè)系統(tǒng)的仿真如圖3-4所示。

      圖3-4 簡(jiǎn)易電子琴整個(gè)系統(tǒng)的仿真圖

      該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK32MHZ初值為0,自動(dòng)演奏信號(hào)HANDTOAUTO初值為0,鍵盤(pán)輸入信號(hào)INDEX1為00000000;輸出音符信號(hào)CODE1則為0110000,高低音節(jié)信號(hào)HIGH1變?yōu)?,即高音,音頻信號(hào)SPKOUT即輸出0,輸出為1時(shí)CODE1變?yōu)?110100,這時(shí)出現(xiàn)10ns的延時(shí)。在仿真時(shí)由于系統(tǒng)各方面原因影響,出現(xiàn)延時(shí)屬于正?,F(xiàn)象。

      3.2原理圖綜合時(shí)序仿真

      步驟:

      1、在file下拉菜單里面選擇new,再在其彈出的對(duì)話框中點(diǎn)選,即可進(jìn)入原理圖編輯界面,右擊鼠標(biāo)選擇(enter symbol..)則會(huì)彈出如右圖的對(duì)話框,然后左鍵分別雙擊對(duì)話框中Symbol File欄中的 AUTO、FENPIN和TONE則會(huì)調(diào)入相應(yīng)模塊的原理圖,然后按照電子琴設(shè)計(jì)要求將各個(gè)模塊連接起來(lái),組成完整的電子琴演奏系統(tǒng),如圖3-5所示。

      3-5 系統(tǒng)的整體組裝設(shè)計(jì)原理圖

      將繪制好的原理圖保存,確保無(wú)誤后運(yùn)行進(jìn)行仿真。

      2、時(shí)序仿真:(1)建立波形文件。(2)輸入信號(hào)近點(diǎn)。(3)設(shè)置波形參數(shù)。(4)設(shè)置仿真時(shí)間寬度。(5)加上輸入信號(hào)。(6)波形文件存盤(pán)。(7)運(yùn)行仿真器。(8)觀察分析波形。之后得到的仿真時(shí)序圖如圖3-6所示。

      圖3-6系統(tǒng)原理圖仿真時(shí)序圖

      3.3 問(wèn)題分析

      在此次課程理論設(shè)計(jì)中,不可避免地遇到許多棘手的問(wèn)題,一是對(duì)EDA技術(shù)的不太了解,二是對(duì)理論知識(shí)的學(xué)習(xí)不夠扎實(shí),初涉VHDL語(yǔ)言以致很多語(yǔ)法和語(yǔ)言基本結(jié)構(gòu)、算法生疏,運(yùn)用不靈活。因此,在編寫(xiě)源程序上遇到極大的難題,而且在編譯運(yùn)行程序時(shí)對(duì)出錯(cuò)的語(yǔ)句理解不到位,導(dǎo)致難于下手修正錯(cuò)誤語(yǔ)句、語(yǔ)法,這使得在設(shè)計(jì)程序時(shí)遇到更大的很大的麻煩。還有就是VHDL語(yǔ)言的數(shù)據(jù)類(lèi)型和語(yǔ)法結(jié)構(gòu)都很容易造成混淆,比如IN STD_LOGIC_VECTOR(7 DOWNTO 0)語(yǔ)句,它有時(shí)既可以認(rèn)為是從7下降到0,也可認(rèn)為是從0上升到7,當(dāng)輸入有多位時(shí),這就容易造成在讀懂仿真波形圖時(shí)讀位數(shù)倒置,使仿真現(xiàn)象與理論結(jié)果相出入。

      在分頻模塊程序設(shè)計(jì)時(shí)遇到了編譯不出來(lái),圖形錯(cuò)誤等編譯時(shí)總是出現(xiàn)非法的錯(cuò)誤,經(jīng)過(guò)老師修改和指正,最后終于編譯成功,完成了該系統(tǒng)的文本設(shè)計(jì)。設(shè)計(jì)小結(jié)

      通過(guò)這本的HDL課程設(shè)計(jì),既鍛煉了我的動(dòng)手能力,也讓我加深了對(duì)課堂上所學(xué)到的理論知識(shí)的理解,這給我提供了一個(gè)在學(xué)習(xí)生活中很難得的理論聯(lián)系實(shí)際的機(jī)會(huì),讓了深刻體驗(yàn)到在對(duì)于設(shè)計(jì)時(shí)遇到的不同問(wèn)題時(shí),首先應(yīng)該理解問(wèn)題關(guān)鍵所在,因?yàn)橛谜Z(yǔ)言編寫(xiě)程序需要仔細(xì)認(rèn)真的態(tài)度,一點(diǎn)點(diǎn)錯(cuò)誤漏洞將導(dǎo)致整個(gè)源程序無(wú)法編譯運(yùn)行,阻礙下一步工作完成進(jìn)度。

      還有我也發(fā)現(xiàn)了在平時(shí)學(xué)習(xí)過(guò)程中難于發(fā)現(xiàn)的許多缺點(diǎn)不足。比如實(shí)踐的機(jī)會(huì)過(guò)少,所學(xué)的理論知識(shí)不能夠靈活運(yùn)用,因此在遇到實(shí)際的問(wèn)題時(shí)無(wú)法正確處理;再者在課堂上獲得的專(zhuān)業(yè)知識(shí)過(guò)于淺顯,很多的有關(guān)基本操作原理、操作方法都理解不了;課外知識(shí)了解的也過(guò)少,導(dǎo)致在課程設(shè)計(jì)初期,面對(duì)完全陌生的設(shè)計(jì)課題無(wú)從下手,不知所措。這就

      提醒我在注重學(xué)好理論的同時(shí),更要加強(qiáng)動(dòng)手的能力,不要一味的照搬課本上的知識(shí),要?jiǎng)?chuàng)新,才能在當(dāng)今競(jìng)爭(zhēng)激烈的社會(huì)中立足,記住,命運(yùn)掌握在自己手里,一切都只能靠我們自己。

      課程設(shè)計(jì)

      1.1 課程設(shè)計(jì)目的……………………………………………………1 1.2 課程設(shè)計(jì)內(nèi)容……………………………………………………………1 1.3 課程設(shè)計(jì)原理……………………………………………………………1 簡(jiǎn)易電子琴的設(shè)計(jì)過(guò)程

      2.1 樂(lè)曲自動(dòng)演奏模塊………………………………………………………2 2.1.1樂(lè)曲演奏模塊文本程序……………………………………………………………3

      2.2 音調(diào)發(fā)生模塊……………………………………………………………4 2.2.1音調(diào)發(fā)生模塊文本程序………………………………………………………………5

      2.3 數(shù)控分頻模塊……………………………………………………………6.2.3.1數(shù)控分頻模塊文本程序

      …………………………………………………………7

      2.4 頂層設(shè)計(jì)…………………………………………………………………8 2..4.1頂層模塊文本程序 ………………………………………………………………9 系統(tǒng)仿真

      3.1 時(shí)序仿真…………………………………………………………………10 3.1.1樂(lè)曲自動(dòng)演奏模塊的仿真…………………………………………………………11 3.1.2音調(diào)發(fā)生模塊的仿真………………………………………………………………11 3.1.3數(shù)控分頻模塊的仿真………………………………………………………………11 3.1.4簡(jiǎn)易電子琴整個(gè)系統(tǒng)的仿真………………………………………………………11

      3.2原理圖綜合時(shí)序仿真……………………………………………………12 3.3 問(wèn)題分析…………………………………………………………………13 4 設(shè)計(jì)小結(jié)…………………………………………………………14

      第二篇:EDA_電子琴課程設(shè)計(jì) 2

      《EDA技術(shù)實(shí)用教程》課程設(shè)計(jì)

      課程設(shè)計(jì)報(bào)告

      課 題:

      EDA電子琴

      課程名稱(chēng): EDA技術(shù)實(shí)用教程

      學(xué)院名稱(chēng):

      物理電氣信息學(xué)院

      班 級(jí): 2011級(jí)通信工程(1)班 學(xué)生姓名: 安 昱 學(xué) 號(hào): 12011243986 指導(dǎo)教師: 楊澤林

      2013年12月26日

      EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      EDA電子琴

      摘 要 :本課程設(shè)計(jì)主要采用EDA技術(shù)設(shè)計(jì)一個(gè)簡(jiǎn)易的八音符電子琴,它可通過(guò)按鍵輸入來(lái)控制音響從而演奏出已存入的樂(lè)曲。在課程設(shè)計(jì)中,系統(tǒng)開(kāi)發(fā)平臺(tái)為Windows XP,程序設(shè)計(jì)采用VHDL語(yǔ)言,程序運(yùn)行平臺(tái)為Quartus II。然后編寫(xiě)程序?qū)崿F(xiàn)電子琴的各項(xiàng)功能,使不同的音階對(duì)應(yīng)不同頻率的正弦波,按下不同的鍵時(shí)發(fā)出對(duì)應(yīng)頻率的聲音。程序通過(guò)調(diào)試運(yùn)行,時(shí)序仿真,電路功能驗(yàn)證,順利地實(shí)現(xiàn)了設(shè)計(jì)目標(biāo)。關(guān)鍵詞 : 電子琴;EDA;VHDL;音階;頻率

      1、引 言

      隨著信息科學(xué)的進(jìn)步,現(xiàn)代電子產(chǎn)品的性能越來(lái)越高,復(fù)雜度越來(lái)越大,更新步伐也越來(lái)越快,電子技術(shù)的發(fā)展進(jìn)入了劃時(shí)代的階段。其中電子技術(shù)的核心便是電子設(shè)計(jì)自動(dòng)化EDA(Electronic Design Automatic)技術(shù)。EDA是指以計(jì)算機(jī)為工作平臺(tái),融合了應(yīng)用電子技術(shù)、計(jì)算機(jī)技術(shù)、智能化技術(shù)的最新成果而開(kāi)發(fā)出的電子CAD通用軟件包,它根據(jù)硬件描述語(yǔ)言VHDL完成的設(shè)計(jì)文件,自動(dòng)完成邏輯編譯、化簡(jiǎn)、分割、綜合、優(yōu)化、布局布線及仿真,直至完成對(duì)于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。本課程設(shè)計(jì)就是采用EDA技術(shù)描述語(yǔ)言VHDL編程實(shí)現(xiàn)簡(jiǎn)易電子琴的各項(xiàng)功能,是EDA技術(shù)應(yīng)用于實(shí)際的一個(gè)很好的例子。

      1.1 課程設(shè)計(jì)目的

      本課程設(shè)計(jì)主要是基于VHDL文本輸入法設(shè)計(jì)樂(lè)曲演奏電路,該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,采用自頂向下的設(shè)計(jì)方法來(lái)實(shí)現(xiàn),通過(guò)按鍵輸入來(lái)控制音響或者自動(dòng)演奏已存入的歌曲。系統(tǒng)由樂(lè)曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三個(gè)部分組成。系統(tǒng)實(shí)現(xiàn)是用硬件描述語(yǔ)言VHDL按模塊化方式進(jìn)行設(shè)計(jì),然后進(jìn)行編程、時(shí)序仿真、電路功能驗(yàn)證,奏出美妙的樂(lè)曲。該設(shè)計(jì)最重要的一點(diǎn)就是通過(guò)按鍵控制不同的音調(diào)發(fā)生,每一個(gè)音調(diào)對(duì)應(yīng)不同的頻率,從而輸出對(duì)應(yīng)頻率的聲音。

      1.2 課程設(shè)計(jì)內(nèi)容

      (1)設(shè)計(jì)一個(gè)簡(jiǎn)易的八音符電子琴,它可通過(guò)按鍵輸入來(lái)控制音響。

      (2)系統(tǒng)演奏時(shí)可以選擇是手動(dòng)演奏(由鍵盤(pán)輸入)還是自動(dòng)演奏已存入的樂(lè)曲。EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      (3)能夠自動(dòng)演奏多首樂(lè)曲,且樂(lè)曲可重復(fù)演奏。

      1.3 課程設(shè)計(jì)原理

      本課程設(shè)計(jì)目的在于靈活運(yùn)用EDA技術(shù)編程實(shí)現(xiàn)一個(gè)簡(jiǎn)易電子琴的樂(lè)曲演奏,它要求在實(shí)驗(yàn)箱上構(gòu)造一個(gè)電子琴電路,不同的音階對(duì)應(yīng)不同頻率的正弦波。按下每個(gè)代表不同音階的按鍵時(shí),能夠發(fā)出對(duì)應(yīng)頻率的聲音。故系統(tǒng)可分為樂(lè)曲自動(dòng)演奏模塊(AUTO)、音調(diào)發(fā)生模塊(TONE)和數(shù)控分頻模塊(FENPIN)三部分。系統(tǒng)的整體組裝設(shè)計(jì)原理圖如1-1所示。

      圖1-1系統(tǒng)的整體組裝設(shè)計(jì)原理圖

      由于設(shè)計(jì)分模塊組成,每個(gè)單獨(dú)的模塊都是一個(gè)完整的源程序,分別實(shí)現(xiàn)不同性質(zhì)的功能,但是每個(gè)模塊又是緊密關(guān)聯(lián)的,前一個(gè)模塊的輸出很可能是后一模塊的輸入。如AUTO模塊的音符信號(hào)輸出就是TONE模塊的音符信號(hào)輸入。另外,時(shí)鐘脈沖信號(hào)在本課程設(shè)計(jì)中用的最多,用處也最大,一般情況下時(shí)鐘信號(hào)處上升沿有效,判斷和控制各個(gè)計(jì)數(shù)器計(jì)數(shù)多少。、EDA、VHDL簡(jiǎn)介

      EDA技術(shù)是以計(jì)算機(jī)為工作平臺(tái),融合了應(yīng)用電子技術(shù)、計(jì)算機(jī)技術(shù)、信息處理及智能化技術(shù)的最新成果,進(jìn)行電子產(chǎn)品的自動(dòng)設(shè)計(jì)。EDA可提供文本輸入以及圖形編輯的方法將設(shè)計(jì)者的意圖用程序或者圖形方式表達(dá)出來(lái),而我們經(jīng)常用到的VHDL語(yǔ)言便是用于編寫(xiě)源程序所需的最常見(jiàn)的硬件描述語(yǔ)言(VHDL)之一。

      2.1 EDA技術(shù)

      EDA是電子設(shè)計(jì)自動(dòng)化(Electronic Design Automation)縮寫(xiě),是90年代初從CAD、CAM、CAT和CAE的概念發(fā)展而來(lái)的。EDA技術(shù)是電子設(shè)計(jì)的發(fā)展趨勢(shì),利用EDA工具可以代替設(shè)計(jì)者完成電子系統(tǒng)設(shè)計(jì)中的大部分工作。EDA工具從數(shù)字系統(tǒng)設(shè)計(jì)的單一領(lǐng)域,EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      發(fā)展到今天,應(yīng)用范圍已涉及模擬、微波等多個(gè)領(lǐng)域,可以實(shí)現(xiàn)各個(gè)領(lǐng)域電子系統(tǒng)設(shè)計(jì)的測(cè)試、設(shè)計(jì)方針和布局布線等。

      現(xiàn)在對(duì)EDA的概念或范疇用得很寬,包括在機(jī)械、電子、通信、航空航天、化工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事等各個(gè)領(lǐng)域,都有EDA的應(yīng)用。目前EDA主要輔助進(jìn)行三個(gè)方面的設(shè)計(jì)工作:IC設(shè)計(jì)、電子電路設(shè)計(jì)和PCB設(shè)計(jì)。

      2.2 VHDL語(yǔ)言

      常用硬件描述語(yǔ)言有VHDL、Verilog和ABEL語(yǔ)言,而VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語(yǔ)句外,VHDL的結(jié)構(gòu)特點(diǎn)是將設(shè)計(jì)實(shí)體的內(nèi)部功能和算法完成部分。

      相對(duì)于其他硬件語(yǔ)言,VHDL有許多優(yōu)點(diǎn)。比如VHDL的行為描述能力更強(qiáng),而且具有豐富的仿真語(yǔ)句和庫(kù)函數(shù),隨時(shí)可對(duì)系統(tǒng)進(jìn)行仿真模擬,使設(shè)計(jì)者對(duì)整個(gè)工程的結(jié)構(gòu)和功能可行性做出判斷;另外,由于具有類(lèi)屬描述語(yǔ)句和子程序調(diào)用等功能,對(duì)于完成的設(shè)計(jì),在不改變?cè)闯绦虻臈l件下,只需改變類(lèi)屬參量和函數(shù),就能輕易地改變?cè)O(shè)計(jì)的規(guī)模和結(jié)構(gòu)。

      3、簡(jiǎn)易電子琴的設(shè)計(jì)過(guò)程

      根據(jù)系統(tǒng)設(shè)計(jì)要求,系統(tǒng)該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,設(shè)計(jì)采用自頂向下的設(shè)計(jì)方法,通過(guò)按鍵輸入來(lái)控制音響或者自動(dòng)演奏已存入的歌曲。它由樂(lè)曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三部分組成。

      3.1 樂(lè)曲自動(dòng)演奏模塊

      樂(lè)曲自動(dòng)演奏模塊的作用是產(chǎn)生8位發(fā)生控制輸入信號(hào)。當(dāng)進(jìn)行自動(dòng)演奏時(shí),由存儲(chǔ)在此模塊的8位二進(jìn)制數(shù)作為發(fā)聲控制輸入,從而自動(dòng)演奏樂(lè)曲。

      該模塊的VHDL源程序主要由3個(gè)工作進(jìn)程組成,分別為PULSE0,MUSIC和COM1。PULSE0的作用是根據(jù)鍵盤(pán)輸入(自動(dòng)演奏)的值(0或1)來(lái)判斷計(jì)數(shù)器COUNT以及脈沖CLK2的輸出值。部分源程序如下:

      PULSE0:PROCESS(CLK,AUTO)

      --工作進(jìn)程開(kāi)始

      VARIABLE COUNT:INTEGER RANGE 0 TO 8;

      --定義計(jì)數(shù)器變量,值從0到8

      IF AUTO='1'THEN

      --鍵盤(pán)輸入為

      1COUNT:=0;CLK2<='0';--計(jì)數(shù)器值指0,時(shí)鐘信號(hào)為0

      ELSIF(CLK'EVENT AND CLK='1')THEN--時(shí)鐘輸入信號(hào)為1 EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      COUNT:=COUNT+1;--計(jì)數(shù)器加1

      當(dāng)確定了時(shí)鐘信號(hào)輸出的值后,在第二個(gè)PROCESS中就可以由它控制8位發(fā)聲控制輸入信號(hào)了。即CLK2的值為0時(shí),COUNT0為1。最后的COM1便是由前兩個(gè)PROCESS所確定的COUNT0、AUTO和鍵盤(pán)輸入信號(hào)值INDEX2將8位的二進(jìn)制數(shù)轉(zhuǎn)化為音符信號(hào)的輸出,達(dá)到自動(dòng)演奏的目的。部分源程序如下:

      IF AUTO='0'THEN CASE COUNT0 IS WHEN 0=>INDEX0<=“00000100”;--3

      WHEN 4=>INDEX0<=“00010000”;--5 該模塊最主要的用途就是將輸入二進(jìn)制數(shù)轉(zhuǎn)化為發(fā)聲控制輸入,是產(chǎn)生音符的重要步驟,AUTO模塊的源程序符號(hào)編輯圖如圖3-1

      圖3-1 AUTO模塊的符號(hào)編輯圖

      3.2 音調(diào)發(fā)生模塊

      音調(diào)發(fā)生模塊的作用是產(chǎn)生音階的分頻預(yù)置值。當(dāng)8位發(fā)聲控制輸入信號(hào)中的某一位為高電平時(shí),則對(duì)應(yīng)某一音階的數(shù)值將輸出,該數(shù)值即為該音階的分頻預(yù)置值,分頻預(yù)置值控制數(shù)控分頻模塊進(jìn)行分頻,由此得到每個(gè)音階對(duì)應(yīng)的頻率。

      該模塊的唯一輸入信號(hào)INDEX對(duì)應(yīng)就是自動(dòng)模塊中最后的輸出INDEX0,音符顯示信 EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      號(hào)CODE,高低音顯示信號(hào)HIGH和音符分頻系數(shù)都是根據(jù)音符輸入確定的。比如我們自定義INDEX第8位為高電平時(shí),它的分頻系數(shù)則為773Hz,音符顯示信號(hào)為1001111,即是773的二進(jìn)制表示,此時(shí)高低音顯示1表示高音。部分源程序如下: CASE INDEX IS WHEN“00000010”=>TONE0<=912;CODE<=“0010010”;HIGH<='1';--音符第7位為1,分頻數(shù)912Hz,音符顯示為0010010,屬高音 WHEN“01000000”=>TONE0<=1372;CODE<=“0001111”;HIGH<='0';WHEN OTHERS =>TONE0<=2047;CODE<=“0000001”;HIGH<='0';顯然,該模塊最主要的作用就是給音符輸入預(yù)設(shè)頻率值,因?yàn)?,電子琴最終實(shí)現(xiàn)樂(lè)曲演奏就是輸出不同頻率的正弦波,此模塊就是將二進(jìn)制發(fā)聲信號(hào)轉(zhuǎn)化為對(duì)應(yīng)的頻率。

      3.3 數(shù)控分頻模塊

      數(shù)控分頻模塊是對(duì)時(shí)基脈沖進(jìn)行分頻,得到與0、1、2、3、4、5、6、7八個(gè)音符相對(duì)應(yīng)的頻率。FENPIN模塊的源程序符號(hào)編輯圖如圖3-3。

      該模塊主要由4個(gè)工作進(jìn)程組成。首先,根據(jù)系統(tǒng)時(shí)鐘信號(hào)的輸入得到時(shí)基脈沖以及計(jì)數(shù)器的值,而時(shí)鐘信號(hào)在AUTO模塊中便已給出,兩者之間的設(shè)置關(guān)系類(lèi)似于AUTO模塊中第一個(gè)工作進(jìn)程的設(shè)置。第二個(gè)PROCESS是此模塊的核心,即由時(shí)基脈沖值轉(zhuǎn)化為音符的頻率。部分源程序如下:

      VARIABLE COUNT11:INTEGER RANGE 0 TO 2047;--定義頻率計(jì)數(shù)器,從0到2047Hz IF(PRECLK'EVENT AND PRECLK='1')THEN--時(shí)基脈沖為1時(shí)

      IF COUNT11

      COUNT11:=COUNT11+1;FULLSPKS<='1';--計(jì)數(shù)加1,揚(yáng)聲器音頻為ELSE

      COUNT11:=0;FULLSPKS<='0';最后一個(gè)PROCESS則是用來(lái)設(shè)置揚(yáng)聲器輸出信號(hào)的,揚(yáng)聲器信號(hào)由0和1控制,當(dāng)且僅當(dāng)前一個(gè)PROCESS中的FULLSPKS輸出為1時(shí),揚(yáng)聲器才有輸出,再根據(jù)計(jì)數(shù)器取值來(lái)確定輸出是1還是0。部分源程序如下:

      IF(FULLSPKS'EVENT AND FULLSPKS='1')THEN--揚(yáng)聲器音頻信號(hào)為1

      COUNT2:=NOT COUNT2;IF COUNT2='1'THEN EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      SPKS<='1';

      --揚(yáng)聲器輸出為1 ELSE SPK<=’0’;

      3.4 頂層設(shè)計(jì)

      該DIANZIQIN模塊是整個(gè)電子琴設(shè)計(jì)的核心,也是VHDL程序的主程序,前面3個(gè)源程序都是作為子程序分別實(shí)現(xiàn)電子琴的某一功能,而DIANZIQIN模塊則通過(guò)調(diào)用子程序最終實(shí)現(xiàn)樂(lè)曲演奏的目的,奏出美妙的樂(lè)曲。利用VHDL語(yǔ)言COMPONENT將三個(gè)模塊組合起來(lái),其中3個(gè)模塊和DIANZIQIN模塊的輸入輸出是一一對(duì)應(yīng)的,比如AUTO對(duì)應(yīng)HANDTOAUTO,TONE0對(duì)應(yīng)TONE2,SPKS對(duì)應(yīng)SPKOUT等,該模塊的符號(hào)編輯圖如圖3-2。

      圖3-2 DIANZIQIN模塊的符號(hào)編輯圖

      該圖描述的是DIANZIQIN模塊輸入輸出的變量表示,整個(gè)系統(tǒng)的整體組裝設(shè)計(jì)原理圖就是這3幅編輯圖按輸入輸出關(guān)系順序連接而成的。4、系統(tǒng)仿真

      系統(tǒng)仿真是在實(shí)際系統(tǒng)上進(jìn)行實(shí)驗(yàn)研究比較困難時(shí)適用的必不可少的工具,它是指通過(guò)系統(tǒng)模型實(shí)驗(yàn)去研究一個(gè)已經(jīng)存在或正在設(shè)計(jì)的系統(tǒng)的過(guò)程,通俗地講,就是進(jìn)行模型實(shí)驗(yàn)。因而,系統(tǒng)仿真的結(jié)果決定整個(gè)課程設(shè)計(jì)任務(wù)完成的到位程度。

      4.1 時(shí)序仿真 EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      編譯完成后,可以對(duì)所進(jìn)行的設(shè)計(jì)進(jìn)行仿真,下面簡(jiǎn)單介紹一下仿真的步驟。(1)打開(kāi)波形編輯器,在Node菜單中選擇Enter Nodes from SNF項(xiàng),列出所有的信號(hào),選擇所需要的信號(hào),然后畫(huà)出輸入信號(hào)的波形,最后將該文件以.scf的擴(kuò)展名 存盤(pán)。

      (2)在QuartusⅡ菜單中打開(kāi)仿真器窗口,單擊Start按鈕,當(dāng)仿真器結(jié)束工作時(shí),就可以看到仿真的結(jié)果。

      本課程設(shè)計(jì)的仿真平臺(tái)是QuartusⅡ,通過(guò)對(duì)VHDL源程序進(jìn)行編譯檢錯(cuò),然后創(chuàng)建波形文件(后綴名為.scf),加入輸入輸出變量,選擇適用的芯片以及設(shè)定仿真結(jié)束時(shí)間(100us),設(shè)置好輸入初值進(jìn)行仿真,得到仿真波形圖。由于電子琴4個(gè)模塊都是獨(dú)立的程序,可分別對(duì)各個(gè)程序仿真,驗(yàn)證輸入輸出的正確性,但在最終能演奏出樂(lè)曲的則是頂層設(shè)計(jì)模塊。

      (1)樂(lè)曲自動(dòng)演奏模塊的仿真如圖4-1所示。

      圖4-1樂(lè)曲自動(dòng)演奏模塊的仿真圖

      該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK初值設(shè)為0,自動(dòng)演奏AUTO設(shè)為1,鍵盤(pán)輸入信號(hào)INDEX2為00,INDEX0為音符信號(hào)輸出,是8位的二進(jìn)制代碼它根據(jù)COUNT0的值改變而改變。

      (2)音調(diào)發(fā)生模塊的仿真如圖4-2所示。

      圖4-2音調(diào)發(fā)生模塊的仿真圖

      該圖輸入音符信號(hào)INDEX初值為00,輸出是音符顯示信號(hào)CODE為01,高低音 EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      顯示信號(hào)為0,音符的分頻系數(shù)為11111111即2047Hz。

      (3)數(shù)控分頻模塊的仿真如圖4-3所示。

      圖4-3數(shù)控分頻模塊的仿真圖

      該圖輸入系統(tǒng)時(shí)鐘信號(hào)CLK1初值為0(各輸出值都是在時(shí)鐘信號(hào)的下降沿有效),音符分頻系數(shù)TONE1為00100000即1290Hz,驅(qū)動(dòng)揚(yáng)聲器的音頻信號(hào)SPKS輸出為1。

      (4)簡(jiǎn)易電子琴整個(gè)系統(tǒng)的仿真如圖4-4所示。

      圖4=4系統(tǒng)的仿真圖

      該圖輸入系統(tǒng)時(shí)簡(jiǎn)易電子琴整個(gè)鐘信號(hào)CLK32MHZ初值為0,自動(dòng)演奏信號(hào)HANDTOAUTO初值為0,鍵盤(pán)輸入信號(hào)INDEX1為00000000;輸出音符信號(hào)CODE1則為0110000,高低音節(jié)信號(hào)HIGH1變?yōu)?,即高音,音頻信號(hào)SPKOUT即輸出0,輸出為1時(shí)CODE1變?yōu)?110100,這時(shí)出現(xiàn)10ns的延時(shí)。在仿真時(shí)由于系統(tǒng)各方面原因影響,出現(xiàn)延時(shí)屬于正?,F(xiàn)象。EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      4.2 電路功能驗(yàn)證

      在選擇好芯片以及設(shè)置引腳值后,下載源程序(后綴名.sof)到此芯片上,確認(rèn)編程器硬件是否已安裝好。按如下步驟打開(kāi)編程器窗口:在QuartusⅡ菜單中選擇Programmer項(xiàng),點(diǎn)擊Configure項(xiàng)將配置數(shù)據(jù)下載到一個(gè)FLEX器件中。再次對(duì)源程序進(jìn)行編譯導(dǎo)入程序然后運(yùn)行,揚(yáng)聲器發(fā)出初設(shè)的音符3,5音即報(bào)警。手按鍵盤(pán)或撥脈沖開(kāi)關(guān)改變輸入信號(hào)則揚(yáng)聲器發(fā)出對(duì)應(yīng)的頻率的聲音,鍵盤(pán)(開(kāi)關(guān))是與芯片引腳對(duì)應(yīng)相連的。

      4.3 問(wèn)題分析

      在整個(gè)課程設(shè)計(jì)中,不可避免遇到很多難于解決的問(wèn)題,一來(lái)是對(duì)EDA技術(shù)的不太了解,初涉VHDL語(yǔ)言以致很多語(yǔ)法和語(yǔ)言基本結(jié)構(gòu)、算法生疏,運(yùn)用不靈活,在編寫(xiě)源程序上遇到很大難題,而且在編譯運(yùn)行程序時(shí)對(duì)出錯(cuò)的語(yǔ)句理解不到位,難于下手修改錯(cuò)誤語(yǔ)句,這使得在設(shè)計(jì)程序時(shí)遇到很大的阻礙,此外,VHDL語(yǔ)言的數(shù)據(jù)類(lèi)型很容易造成混淆,比如IN STD_LOGIC_VECTOR(7 DOWNTO 0)語(yǔ)句,它有時(shí)既可以認(rèn)為是從7下降到0,也可認(rèn)為是從0上升到7,當(dāng)輸入有多位時(shí),這就容易造成在讀懂仿真波形圖時(shí)讀位數(shù)倒置,使仿真現(xiàn)象與理論結(jié)果相出入。EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      在完成電路驗(yàn)證這一步時(shí),對(duì)頻率的選擇也是一大難點(diǎn),有的設(shè)計(jì)項(xiàng)目對(duì)頻率的要求很高,需要大頻率元件才能滿(mǎn)足設(shè)計(jì)需求,若頻率元件選擇不恰當(dāng),將嚴(yán)重影響設(shè)計(jì)結(jié)果甚至沒(méi)有結(jié)果輸出。對(duì)于設(shè)計(jì)電子琴時(shí),由于要求輸出不同頻率的聲音,頻率變化范圍大,故需要一個(gè)12MHz的元件,對(duì)于小于這一值的頻率不足以滿(mǎn)足電路需求,仿真時(shí)只有一堆雜音輸出。

      在對(duì)于設(shè)計(jì)時(shí)遇到的不同問(wèn)題時(shí),首先應(yīng)該理解問(wèn)題關(guān)鍵所在,因?yàn)橛谜Z(yǔ)言編寫(xiě)程序需要仔細(xì)認(rèn)真的態(tài)度,一點(diǎn)點(diǎn)錯(cuò)誤漏洞將導(dǎo)致整個(gè)源程序無(wú)法編譯運(yùn)行,阻礙下一步工作完成進(jìn)度。、結(jié)束語(yǔ)

      通過(guò)這次VHDL課程設(shè)計(jì),不僅增強(qiáng)了我們的實(shí)踐動(dòng)手能力,也讓我們對(duì)課堂上所學(xué)到的理論知識(shí)的理解加深了許多,這給我們提供了一個(gè)在學(xué)習(xí)生活中很難得的理論聯(lián)系實(shí)際的機(jī)會(huì)。能夠借此機(jī)會(huì)了解到部分EDA技術(shù)的知識(shí)和學(xué)習(xí)運(yùn)用其中一種硬件描述語(yǔ)言VHDL編程實(shí)現(xiàn)各種常用器件的功能,這是在哪堂講課上都得不到的一筆財(cái)富。

      另一方面我們也發(fā)現(xiàn)了在平時(shí)學(xué)習(xí)過(guò)程中難于發(fā)現(xiàn)的許多缺點(diǎn)跟不足。比如實(shí)踐機(jī)會(huì)過(guò)少,所學(xué)的理論知識(shí)不能靈活運(yùn)用,在遇到實(shí)際的問(wèn)題時(shí)無(wú)法正確處理;再者在課堂上獲得的專(zhuān)業(yè)知識(shí)過(guò)于淺顯,很多的有關(guān)基本操作原理、操作方法都理解不了;課外知識(shí)了解的也過(guò)少,導(dǎo)致在課程設(shè)計(jì)初期,面對(duì)完全陌生的設(shè)計(jì)課題無(wú)從下手,不知所措。這就提醒我們?cè)谄綍r(shí)的學(xué)習(xí)生活中不能一味埋頭于面前的課本知識(shí),畢竟當(dāng)今社會(huì)競(jìng)爭(zhēng)越發(fā)激烈,而學(xué)校能教授的東西有限,要想在人才市場(chǎng)中脫穎而出就只能靠我們自己。當(dāng)然,在學(xué)習(xí)之余我們更應(yīng)該積極參加各種有關(guān)專(zhuān)業(yè)知識(shí)的實(shí)踐活動(dòng)和比賽,鞏固所學(xué)理論,多注意培養(yǎng)初步的實(shí)際工作能力和專(zhuān)業(yè)技術(shù)能力,這樣在以后的工作崗位上不會(huì)顯得那么倉(cāng)促與生疏。

      參考文獻(xiàn)

      [1] 辛春艷.VHDL硬件描述語(yǔ)言.北京:國(guó)防工業(yè)出版社,2002 [2] 甘歷.VHDL應(yīng)用與開(kāi)發(fā)實(shí)踐.北京:科學(xué)出版社,2003 [3] VHDL Language Reference Guide,Alde Inc.Henderson NV USA,1999 [4] 齊洪喜,陸穎.VHDL電路設(shè)計(jì)實(shí)用教程.北京:清華大學(xué)出版社,2004 [5] 潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程.北京:科學(xué)出版社,2002 EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      附錄1:樂(lè)曲自動(dòng)演奏源程序清單

      --程序名稱(chēng):AUTO.VHD--程序功能:采用VHDL語(yǔ)言編程產(chǎn)生8位發(fā)聲控制輸入信號(hào)。

      LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY AUTO IS

      PORT(CLK:

      IN STD_LOGIC;

      --系統(tǒng)時(shí)鐘信號(hào)

      AUTO:

      IN STD_LOGIC;

      --鍵盤(pán)輸入/自動(dòng)演奏

      CLK2: BUFFER STD_LOGIC;

      --時(shí)鐘輸出

      INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      --鍵盤(pán)輸入信號(hào)

      INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--音符信號(hào)輸出 END AUTO;ARCHITECTURE BEHAVIORAL OF AUTO IS SIGNAL COUNT0:INTEGER RANGE 0 TO 31;--定義信號(hào)計(jì)數(shù)器,有32個(gè)信號(hào)元素 BEGIN PULSE0:PROCESS(CLK,AUTO)

      --PULSE0工作進(jìn)程開(kāi)始

      VARIABLE COUNT:INTEGER RANGE 0 TO 8;

      --定義變量計(jì)數(shù)器,從0到8 BEGIN

      IF AUTO='1'THEN

      --鍵盤(pán)輸入為1

      COUNT:=0;CLK2<='0';

      --計(jì)數(shù)器值為0,時(shí)鐘信號(hào)2幅值為0

      ELSIF(CLK'EVENT AND CLK='1')THEN

      --輸入的時(shí)鐘信號(hào)為其他值

      COUNT:=COUNT+1;

      --計(jì)數(shù)器加1即為1

      IF COUNT=4 THEN

      CLK2<='1';

      ELSIF COUNT=8 THEN

      CLK2<='0';COUNT:=0;END IF;END IF;END PROCESS;MUSIC:PROCESS(CLK2)

      --MUSIC工作進(jìn)程開(kāi)始 BEGIN

      IF(CLK2'EVENT AND CLK2='1')THEN

      --時(shí)鐘信號(hào)2為1

      IF(COUNT0=31)THEN

      --計(jì)數(shù)器值為31

      COUNT0<=0;

      --計(jì)數(shù)器清0 ELSE EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      COUNT0<=COUNT0+1;END IF;END IF;END PROCESS;COM1:PROCESS(COUNT0,AUTO,INDEX2)BEGIN IF AUTO='0'THEN

      --鍵盤(pán)輸入為0 CASE COUNT0 IS

      --由計(jì)數(shù)器從0到31的取值判斷音符信號(hào)的8位二進(jìn)制數(shù)

      WHEN 0=>INDEX0<=“00000100”;

      --3 WHEN 1=>INDEX0<=“00000100”;

      --3 WHEN 2=>INDEX0<=“00000100”;

      WHEN 3=>INDEX0<=“00000100”;

      WHEN 4=>INDEX0<=“00010000”;

      WHEN 5=>INDEX0<=“00010000”;

      WHEN 6=>INDEX0<=“00010000”;

      WHEN 7=>INDEX0<=“00100000”;

      WHEN 8=>INDEX0<=“10000000”;

      WHEN 9=>INDEX0<=“10000000”;

      WHEN 10=>INDEX0<=“10000000”;

      WHEN 11=>INDEX0<=“00000100”;

      WHEN 12=>INDEX0<=“00000010”;

      WHEN 13=>INDEX0<=“00000010”;

      WHEN 14=>INDEX0<=“00000001”;

      WHEN 15=>INDEX0<=“00000001”;

      WHEN 16=>INDEX0<=“00010000”;

      WHEN 17=>INDEX0<=“00010000”;

      WHEN 18=>INDEX0<=“00001000”;

      WHEN 19=>INDEX0<=“00001000”;

      WHEN 20=>INDEX0<=“00001000”;

      WHEN 21=>INDEX0<=“00000100”;

      WHEN 22=>INDEX0<=“00000010”;

      WHEN 23=>INDEX0<=“00000010”;

      WHEN 24=>INDEX0<=“00010000”;

      WHEN 25=>INDEX0<=“00010000”;

      WHEN 26=>INDEX0<=“00001000”;

      WHEN 27=>INDEX0<=“00001000”;

      WHEN 28=>INDEX0<=“00000100”;

      WHEN 29=>INDEX0<=“00000100”;

      WHEN 30=>INDEX0<=“00000010”;

      WHEN 31=>INDEX0<=“00000010”;WHEN OTHERS=>NULL;END CASE;ELSE INDEX0<=INDEX2;

      END IF;END PROCESS;

      --3--3--5--5--5--6--8--8--8--3--2--2--1--1--5--5--4--4--4--3--2--2--5--5--4--4--3--3--2--2

      --將音符信號(hào)0的值賦給音符信號(hào)2

      EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      END BEHAVIORAL;

      附錄2:音調(diào)發(fā)生源程序清單

      --程序名稱(chēng):TONE.VHD--程序功能:采用VHDL語(yǔ)言編程產(chǎn)生音階的分頻預(yù)置值。

      LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TONE IS PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      --音符輸入信號(hào)

      CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--音符顯示信號(hào)

      HIGH: OUT STD_LOGIC;

      --高低音顯示信號(hào)

      TONE0:OUT INTEGER RANGE 0 TO 2047);

      --音符的分頻系數(shù) END TONE;ARCHITECTURE ART OF TONE IS BEGIN SEARCH:PROCESS(INDEX)

      BEGIN CASE INDEX IS WHEN“00000001”=>TONE0<=773;CODE<=“1001111”;HIGH<='1';

      --分頻系數(shù)773Hz,音符顯示1001111,顯示低音

      WHEN“00000010”=>TONE0<=912;CODE<=“0010010”;HIGH<='1';WHEN“00000100”=>TONE0<=1036;CODE<=“0000110”;HIGH<='1';WHEN“00001000”=>TONE0<=1116;CODE<=“1001100”;HIGH<='1';WHEN“00010000”=>TONE0<=1197;CODE<=“0100100”;HIGH<='1';WHEN“00100000”=>TONE0<=1290;CODE<=“0100000”;HIGH<='0';WHEN“01000000”=>TONE0<=1372;CODE<=“0001111”;HIGH<='0';WHEN“10000000”=>TONE0<=1410;CODE<=“0000000”;HIGH<='0';WHEN OTHERS =>TONE0<=2047;CODE<=“0000001”;HIGH<='0';END CASE;END PROCESS;END ART;EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      附錄3:數(shù)控分頻源程序清單--程序名稱(chēng):FENPIN.VHD--程序功能:采用VHDL語(yǔ)言編程對(duì)時(shí)基脈沖進(jìn)行分頻,得到8個(gè)音符相對(duì)應(yīng)的頻率。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FENPIN IS PORT(CLK1: IN STD_LOGIC;

      TONE1: IN INTEGER RANGE 0 TO 2047;--系統(tǒng)時(shí)鐘信號(hào)

      SPKS: OUT STD_LOGIC);

      --音符分頻系數(shù)

      END ENTITY FENPIN;

      --驅(qū)動(dòng)揚(yáng)聲器的音頻信號(hào) ARCHITECTURE ART OF FENPIN IS

      SIGNAL PRECLK:STD_LOGIC;

      --定義時(shí)基脈沖信號(hào)

      SIGNAL FULLSPKS:STD_LOGIC;BEGIN PROCESS(CLK1)VARIABLE COUNT:INTEGER RANGE 0 TO 8;

      --定義變量計(jì)數(shù)器,從0到8 BEGIN IF(CLK1'EVENT AND CLK1='1')THEN

      --據(jù)時(shí)鐘信號(hào)為1時(shí)

      COUNT:=COUNT+1;

      --判斷計(jì)數(shù)器取值為1 IF COUNT=2 THEN PRECLK<='1';ELSIF COUNT=4 THEN

      --若計(jì)數(shù)器計(jì)4 PRECLK<='0';COUNT:=0;

      --時(shí)基脈沖為0,計(jì)數(shù)器清零 END IF;END IF;END PROCESS;PROCESS(PRECLK,TONE1)VARIABLE COUNT11:INTEGER RANGE 0 TO 2047;

      --定義變量頻率計(jì)數(shù)器11,從0 到2047Hz BEGIN

      IF(PRECLK'EVENT AND PRECLK='1')THEN

      --PRECLK脈沖上升沿觸發(fā)

      IF COUNT11

      --若計(jì)數(shù)器11值小于音符信號(hào)1

      COUNT11:=COUNT11+1;FULLSPKS<='1';

      --計(jì)數(shù)器加1,音頻信號(hào)為1

      ELSE

      COUNT11:=0;FULLSPKS<='0';END IF;END IF;EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      END PROCESS;PROCESS(FULLSPKS)

      --音頻信號(hào)輸出進(jìn)程開(kāi)始

      VARIABLE COUNT2:STD_LOGIC:='0';

      --定義變量計(jì)數(shù)器2,初值為0 BEGIN IF(FULLSPKS'EVENT AND FULLSPKS='1')THEN

      --音頻信號(hào)輸出上升沿有效時(shí) COUNT2:=NOT COUNT2;IF COUNT2='1'THEN SPKS<='1';ELSE SPKS<='0';END IF;END IF;END PROCESS;END ART;EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      附錄4:頂層設(shè)計(jì)源程序清單

      --程序名稱(chēng):DIANZIQIN.VHD--程序功能:采用VHDL語(yǔ)言編寫(xiě)主程序調(diào)用3個(gè)子程序,實(shí)現(xiàn)樂(lè)曲演奏的功能。

      LIBRARY IEEE;

      USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DIANZIQIN IS PORT(CLK32MHZ: IN STD_LOGIC;

      --系統(tǒng)時(shí)鐘信號(hào)

      HANDTOAUTO: IN STD_LOGIC;

      --鍵盤(pán)輸入/自動(dòng)演奏信號(hào)

      CODE1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--音符顯示信號(hào)

      INDEX1: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      --鍵盤(pán)輸入信號(hào)

      HIGH1: OUT STD_LOGIC;

      --高低音節(jié)信號(hào)

      SPKOUT: OUT STD_LOGIC);

      --音頻信號(hào) END;ARCHITECTURE ART OF DIANZIQIN IS COMPONENT AUTO

      --引用 AUTO元件 PORT(CLK: IN STD_LOGIC;

      AUTO: IN STD_LOGIC;

      --輸入自動(dòng)演奏信號(hào)

      INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      --輸入8位控制信號(hào)

      INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

      --輸出8位的音符 END COMPONENT;COMPONENT TONE

      --引用TONE元件 PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

      CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

      HIGH: OUT STD_LOGIC;

      TONE0: OUT INTEGER RANGE 0 TO 2047);END COMPONENT;COMPONENT FENPIN

      --引用FENPIN元件 PORT(CLK1: IN STD_LOGIC;

      TONE1: IN INTEGER RANGE 0 TO 2047;

      SPKS: OUT STD_LOGIC);END COMPONENT;SIGNAL TONE2:INTEGER RANGE 0 TO 2047;

      --定義主程序音調(diào)頻率信號(hào) SIGNAL INDX:STD_LOGIC_VECTOR(7 DOWNTO 0);

      --定義8位的音符信號(hào) BEGIN U0:AUTO PORT MAP(CLK=>CLK32MHZ,INDEX2=>INDEX1,INDEX0=>INDX,AUTO=>HANDTOAUTO);

      --調(diào)用自動(dòng)演奏模塊 EDA技術(shù)實(shí)用教程課程設(shè)計(jì)

      U1:TONE PORT MAP(INDEX=>INDX,TONE0=>TONE2,CODE=>CODE1,HIGH=>HIGH1);--調(diào)用音調(diào)發(fā) 生模塊

      U2:FENPIN PORT MAP(CLK1=>CLK32MHZ,TONE1=>TONE2,SPKS=>SPKOUT);END ART;

      --調(diào)用數(shù)控分頻模塊

      第三篇:EDA課程設(shè)計(jì) 電子琴

      簡(jiǎn)易電子琴的設(shè)計(jì)和實(shí)現(xiàn)

      ----結(jié)題報(bào)告

      學(xué)號(hào):110342241

      姓名:章譯文

      一.設(shè)計(jì)要求

      1.能發(fā)出1234567基本音。

      2.能自動(dòng)播放《偶像萬(wàn)萬(wàn)歲》和《梁?!贰?.能在數(shù)碼管上顯示彈奏時(shí)的音名。

      二.設(shè)計(jì)原理分析

      1.音階的獲得

      系統(tǒng)要求要求用7個(gè)按鍵控制發(fā)聲,我們用7個(gè)鍵盤(pán)來(lái)控制產(chǎn)生低音(或中音)段的7個(gè)音階頻率。所有的音名頻率都是通過(guò)一個(gè)基準(zhǔn)頻率經(jīng)過(guò)分頻得到的。但部分分頻過(guò)大的音頻直接輸出給揚(yáng)聲器,頻率信號(hào)脈沖的占空比會(huì)非常窄,不能驅(qū)動(dòng)揚(yáng)聲器工作。于是,我們?cè)O(shè)計(jì)了一個(gè)“帶有預(yù)置數(shù)的計(jì)數(shù)器”來(lái)簡(jiǎn)化整個(gè)設(shè)計(jì)過(guò)程。將原頻率分頻成期望值的2倍頻率信號(hào)。再通過(guò)二分頻,驅(qū)動(dòng)揚(yáng)聲器工作。

      簡(jiǎn)易電子琴控制流程圖

      2.MUSICAL_NOTE內(nèi)部電路

      MUSICAL_NOTE內(nèi)部電路

      使用MUSICAL_NOTE電路,實(shí)現(xiàn)初值可變的計(jì)數(shù)器,并對(duì)音階實(shí)現(xiàn)二分頻,使電子琴實(shí)現(xiàn)正常發(fā)音。

      按鍵播放部分電路

      3.自動(dòng)播放功能的實(shí)現(xiàn)

      自動(dòng)播放部分電路

      Hebing.mif文件(偶像萬(wàn)萬(wàn)歲&梁祝)

      歌曲長(zhǎng)度為352位,利用三個(gè)74261設(shè)計(jì)0~352的計(jì)數(shù)器,自動(dòng)尋址,將音頻導(dǎo)入lpm_rom,與MUSICAL_NOTE相互作用,實(shí)現(xiàn)自動(dòng)播放。

      按鍵除顫電路原理圖

      作為機(jī)械開(kāi)關(guān)的鍵盤(pán),在按鍵操作時(shí),機(jī)械觸點(diǎn)的彈性及電壓跳動(dòng)等原因,再觸點(diǎn)閉合或者開(kāi)啟的瞬間會(huì)出現(xiàn)電壓的抖動(dòng),如果不進(jìn)行處理就會(huì)造成誤操作。按鍵去抖動(dòng)的關(guān)鍵在于提取穩(wěn)定的低電平狀態(tài),濾去前沿后沿的抖動(dòng)毛刺。4.在數(shù)碼管上顯示彈奏時(shí)的音名

      顯示部分電路圖

      Display內(nèi)部電路

      電路中的74161是16進(jìn)制的計(jì)數(shù)器,它的低三位接到3—8譯碼器模塊74138的地址輸入端,這樣就可以實(shí)現(xiàn)74138的8個(gè)輸出端輪流輸出低電平,恰好用來(lái)控制“位碼”DIG7~DIG0。LPM_MUX是QuartusⅡ中的宏模塊,用來(lái)實(shí)現(xiàn)多位的“多選一”,它的數(shù)據(jù)位數(shù)可以以及數(shù)據(jù)的數(shù)量可以任意設(shè)定。

      電路中使用了與非門(mén),實(shí)現(xiàn)發(fā)音與現(xiàn)實(shí)同時(shí)實(shí)現(xiàn),在此要注意的是,因?yàn)槭褂昧伺c非門(mén),靜態(tài)字符現(xiàn)實(shí)數(shù)碼管管腳的設(shè)定值應(yīng)該與原值相反。

      三.設(shè)計(jì)原理圖

      簡(jiǎn)易電子琴原理圖

      根據(jù)以上分析,將三個(gè)模塊組合,便得到了簡(jiǎn)易電子琴的整體設(shè)計(jì)。在整體設(shè)計(jì)的過(guò)程中,要注意三個(gè)模塊之間的關(guān)系,使其能夠相互作用,正常發(fā)音和顯示。

      四.實(shí)驗(yàn)總結(jié) 在這三天的實(shí)驗(yàn)過(guò)程中,通過(guò)對(duì)于實(shí)驗(yàn)?zāi)康牡姆治?,有目?biāo)的查找資料,研讀教材,在分清楚模塊的基礎(chǔ)上,寫(xiě)下了實(shí)驗(yàn)計(jì)劃,規(guī)劃好時(shí)間,確定每天要做的事。在實(shí)驗(yàn)的第一天,實(shí)現(xiàn)了按鍵發(fā)音,同時(shí),也基本弄清楚了自動(dòng)播放的原理,有了設(shè)計(jì)思路,第二天上午,完成了自動(dòng)循環(huán)播放的功能,下午在同學(xué)的幫助下,確定了數(shù)碼管顯示的基本思路,通過(guò)對(duì)于以前知識(shí)的復(fù)習(xí)和查找,成功實(shí)現(xiàn)了數(shù)碼管的顯示功能。

      在實(shí)驗(yàn)的過(guò)程中,也遇到很多的困難。在自動(dòng)播放的時(shí)候,由于沒(méi)有修改hebing.mif的進(jìn)制,音樂(lè)總不能正常播放。還有就是在數(shù)碼管顯示的時(shí)候,一開(kāi)始沒(méi)有弄清與非門(mén)的作用,顯示的數(shù)字總是反著的。后來(lái)經(jīng)過(guò)冷靜的分析,在老師和同學(xué)的幫助下,成功完成了電子琴的設(shè)計(jì),實(shí)現(xiàn)了所有的功能。當(dāng)然,設(shè)計(jì)也還有很多可以完善和改進(jìn)的地方,在以后的學(xué)習(xí)過(guò)程中,我會(huì)更加用心,多做,多思考。

      這次課程設(shè)計(jì),我受益匪淺,這種認(rèn)真研讀,查找資料,動(dòng)手操作的學(xué)習(xí)方式,應(yīng)該貫徹到每一門(mén)課程的學(xué)習(xí),也應(yīng)該貫徹到我們的生活中。一直保持這樣的方式,不管做什么事,都會(huì)取得很好的結(jié)果。

      第四篇:電子琴 課程設(shè)計(jì)報(bào)告

      單片機(jī)課程設(shè)計(jì)報(bào)告

      題目:

      電子琴

      設(shè)計(jì)者1:

      藍(lán) 琴

      負(fù)責(zé)任務(wù):

      硬件制作

      專(zhuān)業(yè)班級(jí)/學(xué)號(hào):

      應(yīng)用電子技術(shù)0906010136

      設(shè)計(jì)者2:

      羅炎華

      負(fù)責(zé)任務(wù):

      軟件編程

      專(zhuān)業(yè)班級(jí)/學(xué)號(hào):

      應(yīng)用電子技術(shù)0906010423

      指導(dǎo)教師1:

      陳玉瓊

      答辯時(shí)間:

      2011-6-23

      目錄

      一、選題的背景.......................................................................................................................3

      選題的來(lái)源、意義和目的:...................................................................................................3 課題承擔(dān)人員及分工說(shuō)明:...................................................................................................3

      二、課題總體設(shè)計(jì)說(shuō)明...........................................................................................................3

      1、總體開(kāi)發(fā)計(jì)劃和課題所達(dá)到的功能目標(biāo)和技術(shù)指標(biāo):.................................................3

      2、劃課題總體設(shè)計(jì)方案,比較幾個(gè)備選方案,確定最終方案.........................................3 系統(tǒng)功能框圖...........................................................................................................................4

      三、硬件設(shè)計(jì)說(shuō)明...................................................................................................................4

      1、硬件總體設(shè)計(jì)方案.............................................................................................................4

      四、軟件設(shè)計(jì)說(shuō)明...................................................................................................................6

      1、軟件總體設(shè)計(jì)方案.............................................................................................................6

      五、軟硬件調(diào)試說(shuō)明...............................................................................................................6

      1、硬件性能測(cè)試.....................................................................................................................6

      2、軟件性能測(cè)試.....................................................................................................................7

      六、課題開(kāi)發(fā)總結(jié)...................................................................................................................7

      1、課題的任務(wù)完成情況.........................................................................................................7

      2、硬件宏觀上的設(shè)計(jì)要點(diǎn).....................................................................................................7

      3、軟件宏觀上的設(shè)計(jì)要點(diǎn).....................................................................................................7

      七、用戶(hù)操作說(shuō).......................................................................................................................7

      八、參考資料...........................................................................................................................7

      九、附件...................................................................................................................................8

      1、硬件設(shè)計(jì)的總電路原理圖、PCB版圖............................................................................8

      2、元器件清單(器件名稱(chēng)、型號(hào)、在原理圖中的編號(hào))...............................................10

      3、硬件電路板外觀圖片、PROTEUS仿真效果圖............................................................11 源程序代碼.............................................................................................................................12

      一、選題的背景

      選題的來(lái)源、意義和目的:

      選題來(lái)源:對(duì)定時(shí)器資源的使用——音樂(lè)盒的控制小組成員均對(duì)音樂(lè)盒有興趣。選題意義:自學(xué)矩陣式按鍵。

      選題目的:實(shí)現(xiàn)各按鍵對(duì)應(yīng)音階音頻輸出,數(shù)碼管顯示相應(yīng)的音階。

      課題承擔(dān)人員及分工說(shuō)明:

      羅炎華具有較強(qiáng)的邏輯能力,熟悉匯編語(yǔ)言。藍(lán)琴據(jù)有較強(qiáng)的動(dòng)手能力,熟悉電子元件

      二、課題總體設(shè)計(jì)說(shuō)明

      1、總體開(kāi)發(fā)計(jì)劃和課題所達(dá)到的功能目標(biāo)和技術(shù)指標(biāo):

      5X5矩陣式按鍵,其中21個(gè)鍵控制21個(gè)音階,4個(gè)按鍵控制點(diǎn)陣的顯示,每個(gè)音階音頻輸出通過(guò)功放放大,同時(shí)數(shù)碼管顯示音階。

      2、劃課題總體設(shè)計(jì)方案,比較幾個(gè)備選方案,確定最終方案

      硬件:

      方案一 :將包含單片機(jī)控制,數(shù)碼管顯示,點(diǎn)陣顯示,矩陣式按鍵,功 放模塊的電路制作在一塊PCB圖上。

      方案二:將單片機(jī)控制,數(shù)碼管顯示,點(diǎn)陣顯示,矩陣式按鍵,功放各模 塊分開(kāi)制作,用杜邦先連接。

      方案三:?jiǎn)纹瑱C(jī)控制模塊采用單片機(jī)學(xué)習(xí)板,分有源模塊和無(wú)源模塊制作。因制PCB材料缺乏最終確定方案三

      軟件:

      方案一:通過(guò)單片機(jī)控制,矩陣按鍵,來(lái)產(chǎn)生不同的音階,后通過(guò)數(shù)碼顯示不同的音階,還四個(gè)按鍵,來(lái)播放不同的音樂(lè)。

      方案二:通過(guò)單片機(jī)控制,矩陣按鍵,來(lái)產(chǎn)生不同的音階,后通過(guò)數(shù)碼管顯示不同的音階,還四個(gè)按鍵,控制點(diǎn)陣,顯示我們需要的信 最后確定工作方案二

      系統(tǒng)功能框圖

      三、硬件設(shè)計(jì)說(shuō)明

      1、硬件總體設(shè)計(jì)方案

      (1)硬件設(shè)計(jì)目標(biāo)

      單片機(jī)控制部分由51單片機(jī)學(xué)習(xí)板代替。數(shù)碼管點(diǎn)陣顯示,音頻功放PCB板制作,按鍵面包板制作,為了資源的重復(fù)使用各模塊分開(kāi)制作。(2)硬件功能模塊劃分單片機(jī)控制

      ? 數(shù)碼管顯示

      查詢(xún)相關(guān)資料了解4X數(shù)碼管,74LS04的各引腳功能,按要求連接。本設(shè)計(jì)中用到的是共陽(yáng)數(shù)碼管,74LS04也可以用9012三極管代替。

      ? 點(diǎn)陣顯示

      用數(shù)字或模擬萬(wàn)用表測(cè)量點(diǎn)陣,紅表筆接一端,黑表筆接一端,有點(diǎn)亮的紅表筆接的是行用數(shù)字表示,黑表筆接的是列用字母表示,測(cè)得結(jié)果如圖示。按要求連接。

      ? 矩陣按鍵

      用數(shù)字或模擬萬(wàn)用表測(cè)量按鍵,紅表筆接一端,黑表筆接一端,按下按鍵觀察是否導(dǎo)通,選擇能導(dǎo)通的兩引腳按一定的規(guī)律連接。

      ? 音頻功放

      這部分也可以用其他的功放電路代替,如TDA2030A。

      3)主控芯片和關(guān)鍵元器件的選型、接口和連接方式定義 主控芯片:STC89C51RC 關(guān)鍵元件的選型:共陽(yáng)4X數(shù)碼管,74LS245,74LS04,8X8紅色點(diǎn)陣GYXM-1538ASR 接口:P0.0-P0.4矩陣按鍵列口,P0.5音頻輸出P2.0-P2.4矩陣式按鍵行口,P2.5-P2.7數(shù)碼管位選,P3口點(diǎn)陣列口,P1口數(shù)碼管段選,點(diǎn)陣行口。

      四、軟件設(shè)計(jì)說(shuō)明

      1、軟件總體設(shè)計(jì)方案

      通過(guò)單片機(jī)控制,矩陣按鍵,來(lái)產(chǎn)生不同的音階,后通過(guò)數(shù)碼管顯示不同的音階,還四個(gè)按鍵,控制點(diǎn)陣,顯示我們需要的信(1)軟件設(shè)計(jì)目標(biāo) 產(chǎn)生21個(gè)音階

      (2)軟件功能模塊劃分

      按鍵一個(gè)模塊,產(chǎn)生音階一個(gè)模塊,數(shù)碼管顯示一個(gè)模塊,點(diǎn)陣一個(gè)模塊

      2、軟件設(shè)計(jì)

      開(kāi)始否判斷有無(wú)鍵按下是判斷是否為音階按鍵否漢字顯示按鍵是數(shù)碼管顯示其音階號(hào),并放出音階點(diǎn)陣顯示相應(yīng)的按鍵是結(jié)束

      五、軟硬件調(diào)試說(shuō)明

      1、硬件性能測(cè)試

      按下相應(yīng)的按鍵蜂鳴器或功放放出相應(yīng)的音階,同時(shí)數(shù)碼管顯示相應(yīng)的音階數(shù)或點(diǎn)陣顯示相應(yīng)的漢字。

      2、軟件性能測(cè)試

      按下按鍵,看是否發(fā)出相應(yīng)的音階的聲音,同時(shí)看一下,數(shù)碼管,顯示的是否正確,按下22.23.24.25鍵看是否點(diǎn)陣有顯示

      六、課題開(kāi)發(fā)總結(jié)

      1、課題的任務(wù)完成情況:課題任務(wù)基本完成,與預(yù)期的大體符合。但作品性能有待提高,存在著噪音較大,反應(yīng)時(shí)間較長(zhǎng),接線復(fù)雜,外觀不完美的缺點(diǎn)。其優(yōu)點(diǎn)是操作簡(jiǎn)單,形象直觀。

      2、硬件宏觀上的設(shè)計(jì)要點(diǎn): 設(shè)計(jì)要點(diǎn)在數(shù)碼管顯示,點(diǎn)陣顯示,及音頻功放,注意音頻功放的散熱問(wèn)題,性能基本達(dá)到,但線路布局有待完善,點(diǎn)陣的移引腳有被燒壞導(dǎo)致不正常顯示。

      3、軟件宏觀上的設(shè)計(jì)要點(diǎn):

      按鍵掃描,同時(shí)要確定是那個(gè)按鍵按下,后發(fā)出相應(yīng)的音階,同時(shí)在數(shù)碼管顯示也要同步。編譯工具:用Protues,仿真,來(lái)調(diào)試程序,必要時(shí)調(diào)用Debug存在:反映比較慢的問(wèn)題

      七、用戶(hù)操作說(shuō)

      各模塊上電后以上左面接線為標(biāo)準(zhǔn),從右到左第一排按鍵分別為低音:1,2,3,4,5; 從右到左第二排按鍵分別為低音6,7中音:1,2,3;從右到左第三排按鍵分別為中音:4,5,6,7,高音:1;從右到左第四排各按鍵分別為高音:2,3,4,5,6;從左到右第四排各按鍵分別為高音:7,“大”字顯示,“中”字顯示,“小”字顯示,“大,中,小”輪流顯示。

      八、參考資料

      單片機(jī)初級(jí)教程 張迎新 等編著

      百度圖片:http://image.baidu.com

      九、附件

      1、硬件設(shè)計(jì)的總電路原理圖、PCB版圖

      數(shù)碼管顯示

      單片機(jī)控制

      點(diǎn)陣顯示

      功放

      按鍵

      2、元器件清單(器件名稱(chēng)、型號(hào)、在原理圖中的編號(hào))

      STC8951RC 單片機(jī)

      1個(gè) 單片機(jī)插槽

      1個(gè) 4X共陽(yáng)數(shù)碼管

      1個(gè) 8X8紅色點(diǎn)陣GYXM-1538ASR 1個(gè) 74LS245

      1個(gè) 74LS04

      1個(gè) 按鍵

      50個(gè) 14腳插槽

      1個(gè) 20腳插槽

      1個(gè) 470歐姆點(diǎn)陣

      8個(gè) TDA2030A

      1個(gè) 100UF電解電容

      2個(gè) 0.1UF電容

      2個(gè) 22 UF電解電容

      1個(gè) 22K電阻

      2個(gè) N4001

      2個(gè) 喇叭

      1個(gè)

      3、硬件電路板外觀圖片、PROTEUS仿真效果圖

      源程序代碼

      row equ 30h dot equ 31h org 00h ljmp key org 30h key: mov r0,#01h mov r2,#0feh mov r1,#00h mov r5,#60 start0: mov r7,#255 mov a,r2 mov p2,a jnb p0.0,start1 inc r0 jnb p0.1,start1 inc r0 jnb p0.2,start1 inc r0 jnb p0.3,start1 inc r0 jnb p0.4,start1 inc r0 rl a mov r2,a inc r1

      cjne r1,#5,start0 sjmp key start1: jnb p0.0,$;在p0口時(shí)候?qū)Χ丝诘呐袛?/p>

      jnb p0.1,$ jnb p0.2,$ jnb p0.3,$ jnb p0.4,$ cjne r0,#16h,lp5 ljmp start5 lp5: cjne r0,#17h,lp6 ljmp start6 lp6: cjne r0,#18h,lp7 ljmp start7 lp7: cjne r0,#19h,lp4 ljmp start8 lp4: mov dptr,#tab mov a,r0 movc a,@a+dptr mov r3,a setb p0.5 acall del20 mov r3,a clr p0.5 mov r3,#5fh acall del20 djnz r7,start1 setb p0.5 mov a,r0;判斷是否是低位

      anl a,#0f8h cjne a,#0,lp1 ljmp start2 lp1: cjne r0,#0fh,lp3 ljmp start4 lp3: mov a,r0;判斷是否是中位

      anl a,#0f0h cjne a,#0,lp2 ljmp start3

      lp2: mov a,r0;判斷是否是高位

      anl a,#0a0h cjne a,#0,start0 ljmp start4 start2: mov dptr,#table;低音的數(shù)碼管顯示

      mov p1,#0bfh clr p2.6 clr p2.7 acall del20 mov p2,#0ffh mov a,r0 movc a,@a+dptr mov p1,a clr p2.5 acall del20 mov p2,#0ffh djnz r5,start2 ljmp key start3: mov dptr,#table mov p1,#0bfh clr p2.5 clr p2.7 acall del20 mov p2,#0ffh mov a,r0 subb a,#7 movc a,@a+dptr mov p1,a clr p2.6 acall del20 mov p2,#0ffh djnz r5,start3 ljmp key start4: mov dptr,#table mov p1,#0bfh clr p2.5 clr p2.6 acall del20 mov p2,#0ffh mov a,r0 subb a,#14 movc a,@a+dptr mov p1,a clr p2.7 acall del20 mov p2,#0ffh djnz r5,start4 ljmp key

      start5: setb p0.5

      ;中音的數(shù)碼管顯示;高音的數(shù)碼管顯示14

      mov r6,#050h m2: mov dptr,#mm mov row,#01h mov dot,#00h mov r7,#08h m1: mov r3,#050h mov a,row mov p1,a rl a mov row,a mov a,dot movc a,@a+dptr mov p3,a lcall del20 inc dot djnz r7,m1 djnz r6,m2 ljmp key start6: setb p0.5 mov r6,#050h q1: mov dptr,#qq mov row,#01h mov dot,#00h mov r7,#08h q2: mov r3,#050h mov a,row mov p1,a rl a mov row,a mov a,dot movc a,@a+dptr mov p3,a lcall del20 inc dot djnz r7,q2 djnz r6,q1 ljmp key start7: setb p0.5 mov r6,#050h ww1: mov dptr,#ww mov row,#01h mov dot,#00h mov r7,#08h ww2: mov r3,#050h

      mov a,row mov p1,a rl a mov row,a mov a,dot movc a,@a+dptr mov p3,a lcall del20 inc dot djnz r7,ww2 djnz r6,ww1 ljmp key start8: setb p0.5 mov dptr,#ff mov r5,#3 hh: mov r6,#050h ff1:

      mov row,#01h mov dot,#00h mov r7,#08h ff2: mov r3,#050h mov a,row mov p1,a rl a mov row,a mov a,dot movc a,@a+dptr mov p3,a lcall del20 inc dot djnz r7,ff2 djnz r6,ff1 mov a,dpl

      add a,#8 mov dpl,a mov a,dph addc a,#0 mov dph,a djnz r5,hh ljmp key tab: db 5fh,55h,4ch,48h,40h,39h,33h,30h,2bh,26h,24h,20h,1ch,19h,18h,15h,13h,12h,10h,0eh,0dh db 0ffh,0ffh,0ffh,0ffh table: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h

      mm: db 0f7h,0f7h,80h,0f7h,0ebh,0ddh,0beh,0ffh qq: db 0ffh,0efh,0efh,1h,6dh,1h,0efh,0efh ww: db 0efh,0efh,0c7h,0abh,06dh,0efh,0e7h,0efh ff: db 0f7h,0f7h,80h,0f7h,0ebh,0ddh,0beh,0ffh db 0ffh,0efh,0efh,1h,6dh,1h,0efh,0efh db 0efh,0efh,0c7h,0abh,06dh,0efh,0e7h,0efh del20: mov r4,#05h del4:nop

      djnz r4,del4 djnz r3,del20 ret end 17

      第五篇:微機(jī)原理課程設(shè)計(jì)-電子琴設(shè)計(jì)

      簡(jiǎn)單的電子琴設(shè)計(jì)

      前言

      本實(shí)驗(yàn)是利用微機(jī)原理試驗(yàn)箱、8255芯片、8254芯片、鍵盤(pán)、揚(yáng)聲器等硬件設(shè)備,設(shè)計(jì)簡(jiǎn)易電子琴。

      首先利用了編程程序,編輯了8255芯片控制字, 對(duì)其進(jìn)行初始化,使其工作在方式0,即基本輸入輸出狀態(tài),將8255的A端口設(shè)置為輸出,C端口進(jìn)行,經(jīng)CPU運(yùn)算后, 輸出到8254芯片的A端口中,由此實(shí)現(xiàn)對(duì)其的初始化。

      將8254芯片設(shè)置為工作在方式3,即輸出對(duì)稱(chēng)方波狀態(tài)。A端口為輸入,“OUT”指令可將輸出對(duì)應(yīng)一定頻率的方波送到揚(yáng)聲器中,由此實(shí)現(xiàn)發(fā)聲。本實(shí)驗(yàn)通過(guò)頻率大小控制發(fā)出聲音的高低,通過(guò)對(duì)延時(shí)程序的調(diào)用控制發(fā)出聲音的長(zhǎng)短。并通過(guò)所編程序?qū)崿F(xiàn)對(duì)鍵盤(pán)的重復(fù)掃描,重而可以彈奏多個(gè)音符的試驗(yàn)?zāi)康摹?/p>

      關(guān)鍵字: 編程、工作方式、運(yùn)算

      簡(jiǎn)單的電子琴設(shè)計(jì)

      一、設(shè)計(jì)題目:

      簡(jiǎn)易電子琴設(shè)計(jì)

      二、設(shè)計(jì)內(nèi)容:

      實(shí)驗(yàn)電路如圖16-1,8253的CLK0接1MHZ時(shí)鐘,GATE0接8255的PA1,OUT0和8255的PA0接到與門(mén)的兩個(gè)輸入端,K8跳線連接喇叭,編程使計(jì)算機(jī)的數(shù)字鍵1、2、3、4、5、6、7作為電子琴按鍵,按下即發(fā)出相應(yīng)的音階。

      三、設(shè)計(jì)目的:

      1、通過(guò)8253產(chǎn)生不同的頻率信號(hào),使PC機(jī)成為簡(jiǎn)易電子琴。

      2、了解利用8255和8253產(chǎn)生音樂(lè)的基本方法。

      3、通過(guò)課程設(shè)計(jì)使學(xué)生更進(jìn)一步掌握微機(jī)原理及應(yīng)用課程的有關(guān)知識(shí),提高應(yīng)用微機(jī)解決問(wèn)題的能力,加深對(duì)微機(jī)應(yīng)用的理解。通過(guò)查閱資料,結(jié)合所學(xué)知識(shí)進(jìn)行軟、硬件的設(shè)計(jì),使學(xué)生初步掌握應(yīng)用微機(jī)解決問(wèn)題的步驟及方法。為以后學(xué)生結(jié)合專(zhuān)業(yè)從事微機(jī)應(yīng)用設(shè)計(jì)奠定基礎(chǔ)。

      四、設(shè)計(jì)要求:

      1.可以彈出7個(gè)音階。2.彈奏簡(jiǎn)短音樂(lè)。

      3.通過(guò)改變鍵盤(pán)輸入來(lái)改變8254輸出頻率,實(shí)現(xiàn)揚(yáng)聲器發(fā)音

      五、編程提示:

      1、利用8255的PA0口來(lái)施加控制信號(hào)給與門(mén),用來(lái)控制揚(yáng)聲器的開(kāi)關(guān)狀態(tài)。再利用設(shè)置不同的計(jì)數(shù)值,使8253產(chǎn)生不同頻率的波形,使揚(yáng)聲器產(chǎn)生不同頻率的音調(diào),達(dá)到類(lèi)似與音階的高低音變換。對(duì)于音樂(lè),每個(gè)音階都有確定的頻率。各音階標(biāo)稱(chēng)頻率值: 音 階2 3 4 5 6 7 1* 低頻率(單位:Hz)262 294 330 347 392 440 494 524 高頻率(單位:Hz)524 588 660 698 784 880 988 1048

      簡(jiǎn)單的電子琴設(shè)計(jì)

      六、設(shè)計(jì)原程序及注解

      ;*******************************;;* 電子琴實(shí)驗(yàn) *;;*******************************;

      data segment io8255a equ 288h io8255b equ 28bh io8253a equ 280h io8253b equ 283h table dw 524,588,660,698,784,880,988,1048;高音的;table dw 262,294,330,347,392,440,494,524;低音的 msg db 'Press 1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$' data ends

      code segment assume cs:code,ds:data start: mov ax,data mov ds,ax

      mov dx,offset msg mov ah,9 int 21h;顯示提示信息 sing: mov ah,7 int 21h;從鍵盤(pán)接收字符,不回顯 cmp al,1bh je finish;若為ESC鍵,則轉(zhuǎn)finish cmp al,'1' jl sing cmp al,'8' jg sing;若不在'1'-'8'之間轉(zhuǎn)sing

      sub al,31h shl al,1;轉(zhuǎn)為查表偏移量 mov bl,al;保存偏移到bx mov bh,0

      mov ax,4240H;計(jì)數(shù)初值 = 1000000 / 頻率, mov dx,0FH div word ptr[table+bx] mov bx,ax

      保存到AX 3

      簡(jiǎn)單的電子琴設(shè)計(jì)

      mov dx,io8253b;設(shè)置8253計(jì)時(shí)器0方式3, 先讀寫(xiě)低字節(jié), 再讀寫(xiě)高字節(jié)

      mov al,00110110B out dx,al

      mov dx,io8253a mov ax,bx out dx,al;寫(xiě)計(jì)數(shù)初值低字節(jié)

      mov al,ah out dx,al;

      mov dx,io8255b;mov al,10000000B out dx,al

      mov dx,io8255a mov al,03h out dx,al;call delay;mov al,0h out dx,al;

      jmp sing finish: mov ax,4c00h int 21h

      delay proc near;push cx push ax mov ax,15 x1: mov cx,0ffffh x2: dec cx jnz x2 dec ax jnz x1 pop ax pop cx ret delay endp code ends end start

      寫(xiě)計(jì)數(shù)初值高字節(jié) 設(shè)置8255 A口輸出 置PA1PA0 = 11(開(kāi)揚(yáng)聲器)延時(shí) 置PA1PA0 = 00(關(guān)揚(yáng)聲器)延時(shí)子程序 4

      簡(jiǎn)單的電子琴設(shè)計(jì)

      七、程序流程圖:

      八、硬件連線圖

      簡(jiǎn)單的電子琴設(shè)計(jì)

      九、實(shí)驗(yàn)結(jié)果

      連接完線路后啟動(dòng)電路開(kāi)關(guān),然后運(yùn)行程序,就會(huì)出現(xiàn)提示界面,然后鍵盤(pán)輸入數(shù)字即可有相應(yīng)音階音樂(lè)從喇叭處播放。

      十、實(shí)驗(yàn)中遇到了的問(wèn)題及解決方法

      在實(shí)驗(yàn)中遇到了很多問(wèn)題其主要是代碼的編譯類(lèi)錯(cuò)誤,在通過(guò)網(wǎng)上查閱相關(guān)資料以及在老師同學(xué)幫助下這些困難都迎刃而解了。才使程序完美運(yùn)行。6

      簡(jiǎn)單的電子琴設(shè)計(jì)

      總 結(jié)

      這是一次成功的實(shí)訓(xùn),也是應(yīng)值得遠(yuǎn)記住的一次實(shí)訓(xùn),在這次實(shí)訓(xùn)中我充分感受到了集體的力量,在我組組員的共同努力下,我們的電子琴程序從無(wú)到有、功能從弱到強(qiáng),一步步的走向成功,同時(shí)也感謝陳老師給我這樣一次鍛煉的機(jī)會(huì),讓我的人生經(jīng)歷有豐富了一些并且這段經(jīng)歷將成為我生活中一段寶貴的精神財(cái)富。

      參考文獻(xiàn):

      1、《8088/8086匯編語(yǔ)言程序設(shè)計(jì)》中央廣播電視大學(xué)出版社

      2、《微機(jī)原理與接口技術(shù)》北京航空航天大學(xué)出版社

      3、《微型計(jì)算機(jī)原理與匯編語(yǔ)言》電子工業(yè)出版社

      4、《微機(jī)原理與應(yīng)用》大連理工大學(xué)出版社

      5、《現(xiàn)代微機(jī)原理與接口技術(shù)》電子工業(yè)出版社

      下載EDA_電子琴課程設(shè)計(jì)word格式文檔
      下載EDA_電子琴課程設(shè)計(jì).doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        智力競(jìng)賽搶答器_eda_課程設(shè)計(jì)_報(bào)告電路圖 - 副本(大全)

        燕 山 大 學(xué) EDA課程設(shè)計(jì)報(bào)告書(shū) 智力競(jìng)賽搶答器 姓名:李學(xué)森 班級(jí):08電子信息工程3班 學(xué)號(hào):080104020063 成績(jī): 一、設(shè)計(jì)題目:智力競(jìng)賽搶答器 二、設(shè)計(jì)要求: 1 .五人參賽每人一個(gè)......

        簡(jiǎn)易電子琴課程設(shè)計(jì)my.(共5篇)

        武漢理工大學(xué)《模擬電子技術(shù)基礎(chǔ)》課程設(shè)計(jì)說(shuō)明書(shū) 課程設(shè)計(jì)任務(wù)書(shū) 學(xué)生姓名: 尹龍劍 專(zhuān)業(yè)班級(jí): 電信1005班 指導(dǎo)教師: 王緒國(guó) 工作單位: 信息工程學(xué)院 題 目: 簡(jiǎn)易電子琴電路的......

        數(shù)字電子EDA課程設(shè)計(jì)八音電子琴

        燕山大學(xué)EDA課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告院系:信息科學(xué)與工程學(xué)院姓名: 班級(jí): 學(xué)號(hào): 日期: [實(shí)驗(yàn)名稱(chēng)] 八音電子琴 [實(shí)驗(yàn)要求] 1.能發(fā)出1.2.3.4.5.6.7.i八個(gè)音2.用按鍵作為鍵盤(pán)......

        微機(jī)原理及應(yīng)用 電子琴課程設(shè)計(jì)

        科技學(xué)院 微機(jī)原理及應(yīng)用 課 程 設(shè) 計(jì) 設(shè)計(jì)名稱(chēng): 設(shè)計(jì)模擬電子琴 模擬 指導(dǎo)老師: 指導(dǎo)老師: ----- 設(shè)計(jì)者姓名: ----- 專(zhuān)業(yè)班級(jí):自動(dòng)化 學(xué) 號(hào):---------- 設(shè)計(jì)時(shí)間: 2012.6 摘 要:......

        單片機(jī)課程設(shè)計(jì)——電子琴[小編推薦]

        單片機(jī)課程設(shè)計(jì)————電子琴 可演奏的電子琴 摘要:隨著社會(huì)的發(fā)展進(jìn)步,音樂(lè)逐漸成為我們生活中很重要的一部分,有人曾說(shuō)喜歡音樂(lè)的人不會(huì)向惡。我們都會(huì)抽空欣賞世界名曲,作為......

        模電課程設(shè)計(jì)——簡(jiǎn)易電子琴的制作

        課 程 設(shè) 計(jì) 報(bào) 告 題 目 : 簡(jiǎn)易電子琴電路的制作 課 程 名 稱(chēng) : 模擬電子技術(shù) 院 部 名 稱(chēng) : 專(zhuān) 業(yè) : 班 級(jí) : 學(xué) 生 姓 名 : 學(xué) 號(hào) : 課程設(shè)計(jì)地點(diǎn): 課程設(shè)計(jì)學(xué)時(shí): 指 導(dǎo)......

        EDA_通信_(tái)實(shí)驗(yàn)指導(dǎo)書(shū)(5篇)

        《EDA技術(shù)與VHDL》課程實(shí)驗(yàn)指導(dǎo)書(shū) 專(zhuān)業(yè):通信工程 電子信息工程學(xué)院 編制 2013年9月目 錄 實(shí)驗(yàn)一組合電路的設(shè)計(jì) .............................................................

        電子琴教學(xué)

        電子琴教學(xué) 電子琴是近年來(lái)隨著電子工業(yè)的迅速發(fā)展而興起的一種新型電聲樂(lè)器。這種樂(lè)器發(fā)展非常迅速,從電器結(jié)構(gòu)講,它經(jīng)歷了三個(gè)階段:第一代電子琴采用分離元件電子振蕩器電......