EDA - 电子琴课程设计(3)

2019-08-31 11:29

措。这就提醒我们在平时的学习生活中不能一味埋头于面前的课本知识,毕竟当今社会竞争越发激烈,而学校能教授的东西有限,要想在人才市场中脱颖而出就只能靠我们自己。当然,在学习之余我们更应该积极参加各种有关专业知识的实践活动和比赛,巩固所学理论,多注意培养初步的实际工作能力和专业技术能力,这样在以后的工作岗位上不会显得那么仓促与生疏。

附录1:乐曲自动演奏源程序清单

--程序名称:AUTO.VHD

--程序功能:采用VHDL语言编程产生8位发声控制输入信号。

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; --系统时钟信号

AUTO: IN STD_LOGIC; --键盘输入/自动演奏 CLK2: BUFFER STD_LOGIC; --时钟输出

INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘输入信号 INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --音符信号输出 END AUTO;

ARCHITECTURE BEHAVIORAL OF AUTO IS

SIGNAL COUNT0:INTEGER RANGE 0 TO 31; --定义信号计数器,有32个信号元素 BEGIN

PULSE0:PROCESS(CLK,AUTO) --PULSE0工作进程开始

VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定义变量计数器,从0到8 BEGIN

IF AUTO='1'THEN --键盘输入为1

COUNT:=0;CLK2<='0'; --计数器值为0,时钟信号2幅值为0 ELSIF(CLK'EVENT AND CLK='1')THEN --输入的时钟信号为其他值 COUNT:=COUNT+1; --计数器加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工作进程开始 BEGIN

IF(CLK2'EVENT AND CLK2='1')THEN --时钟信号2为1 IF(COUNT0=31)THEN --计数器值为31 COUNT0<=0; --计数器清0 ELSE

COUNT0<=COUNT0+1; END IF;

END IF;

END PROCESS;

COM1:PROCESS(COUNT0,AUTO,INDEX2) BEGIN

IF AUTO='0'THEN --键盘输入为0

CASE COUNT0 IS --由计数器从0到31的取值判断音符信号的8位二进制数 WHEN 0=>INDEX0<=\ --3 WHEN 1=>INDEX0<=\ --3 WHEN 2=>INDEX0<=\ --3 WHEN 3=>INDEX0<=\ --3 WHEN 4=>INDEX0<=\ WHEN 5=>INDEX0<=\ WHEN 6=>INDEX0<=\ WHEN 7=>INDEX0<=\ WHEN 8=>INDEX0<=\ WHEN 9=>INDEX0<=\ WHEN 10=>INDEX0<=\ WHEN 11=>INDEX0<=\ WHEN 12=>INDEX0<=\ WHEN 13=>INDEX0<=\ WHEN 14=>INDEX0<=\ WHEN 15=>INDEX0<=\ WHEN 16=>INDEX0<=\ WHEN 17=>INDEX0<=\ WHEN 18=>INDEX0<=\ WHEN 19=>INDEX0<=\ WHEN 20=>INDEX0<=\ WHEN 21=>INDEX0<=\ WHEN 22=>INDEX0<=\ WHEN 23=>INDEX0<=\ WHEN 24=>INDEX0<=\ WHEN 25=>INDEX0<=\ WHEN 26=>INDEX0<=\ WHEN 27=>INDEX0<=\ WHEN 28=>INDEX0<=\ WHEN 29=>INDEX0<=\ WHEN 30=>INDEX0<=\ WHEN 31=>INDEX0<=\WHEN OTHERS=>NULL; END CASE;

ELSE INDEX0<=INDEX2; END IF;

END PROCESS;

END BEHAVIORAL;

--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 --将音符信号0的值赋给音符信号2 附录2:音调发生源程序清单

--程序名称:TONE.VHD

--程序功能:采用VHDL语言编程产生音阶的分频预置值。

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); --音符输入信号 CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --音符显示信号 HIGH: OUT STD_LOGIC; --高低音显示信号 TONE0:OUT INTEGER RANGE 0 TO 2047); --音符的分频系数 END TONE;

ARCHITECTURE ART OF TONE IS BEGIN

SEARCH:PROCESS(INDEX) BEGIN

CASE INDEX IS

WHEN\ --分频系数773Hz,音符显示1001111,显示低音

WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\WHEN OTHERS =>TONE0<=2047;CODE<=\END CASE; END PROCESS; END ART;

附录3:数控分频源程序清单

--程序名称:FENPIN.VHD

--程序功能:采用VHDL语言编程对时基脉冲进行分频,得到8个音符相对应的频率。 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; --系统时钟信号 SPKS: OUT STD_LOGIC); --音符分频系数

END ENTITY FENPIN; --驱动扬声器的音频信号 ARCHITECTURE ART OF FENPIN IS

SIGNAL PRECLK:STD_LOGIC; --定义时基脉冲信号 SIGNAL FULLSPKS:STD_LOGIC; BEGIN

PROCESS(CLK1)

VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定义变量计数器,从0到8 BEGIN

IF(CLK1'EVENT AND CLK1='1')THEN --据时钟信号为1时 COUNT:=COUNT+1; --判断计数器取值为1 IF COUNT=2 THEN PRECLK<='1';

ELSIF COUNT=4 THEN --若计数器计4

PRECLK<='0';COUNT:=0; --时基脉冲为0,计数器清零 END IF; END IF;

END PROCESS;

PROCESS(PRECLK,TONE1)

VARIABLE COUNT11:INTEGER RANGE 0 TO 2047; --定义变量频率计数器11,从0 到2047Hz BEGIN

IF(PRECLK'EVENT AND PRECLK='1')THEN --PRECLK脉冲上升沿触发 IF COUNT11

COUNT11:=0;FULLSPKS<='0'; END IF; END IF;

END PROCESS;

PROCESS(FULLSPKS) --音频信号输出进程开始

VARIABLE COUNT2:STD_LOGIC:='0'; --定义变量计数器2,初值为0 BEGIN

IF(FULLSPKS'EVENT AND FULLSPKS='1')THEN --音频信号输出上升沿有效时 COUNT2:=NOT COUNT2; IF COUNT2='1'THEN SPKS<='1'; ELSE

SPKS<='0'; END IF; END IF;

END PROCESS;


EDA - 电子琴课程设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:c++作业题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: