已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字系统与逻辑设计实验-电子节拍器电子节拍器的设计与实现一 设计课题的任务要求设计并实现一个具有声光显示的电子节拍器。 基本要求: 1、 速度在 40120 次/分钟范围内连续可调,通过 2 个按键进行速度调节,一个用来增 加,一个用来减少,当长按按键时,按 5 次/秒的速度连续增加或减少,用 3 个数码 管显示当前速度。 2、 节拍有 1/4、2/4、3/4、4/4、3/8、6/8 可选,通过一个按键选择,用 2 个数码管显示。 3、 通过一个按键开始和停止打节拍,开始后按照设置好的节拍和速度打节拍。 4、 要求有声音和灯光提示,声音要有强弱区别,灯光可用不同颜色的发光二极管表示 强弱。 提高要求: 1、 通过一个按键选择时值(节奏类型),并在用点阵显示,如下图。 2、 实现在无节奏型的情况下,用点阵计时,点阵的显示从0到9,时间间隔为一秒,从而帮助使用者学习乐理知识。二 系统设计(设计思路,总体框图,分块设计)1. 设计思路 程序分为输入模块,分频模块,中央控制模块和显示模块四大模块,其中显示模块又可细分为数码管显示,点阵显示,LED灯亮灯显示和蜂鸣器发声四个部分。输入有reset(复位键),st(开关键),tn(调速键),tk(调节拍键),tj(调节奏键)五个键。利用三个数码管显示速率,两个数码管显示节拍型,使用点阵显示节奏型,无节奏时点阵显示0到9的计时(时间间隔为1秒)。对于开关,速率,节拍,节奏的调节,使用5HZ的时钟信号进行防抖和控制调节的速度。利用取余函数将节拍器的速率的个十百位数字分别提取出来,并通过扫描显示将节拍器的速率和节拍型显示出来。LED灯和点阵的信号依据节奏和节拍型确定,先考虑节奏型,分列出各个节奏型的信号,如果无节奏型再考虑节拍型,确定节拍型的信号。最后蜂鸣器的信号由红灯信号与250HZ高频相乘所得信号和绿灯信号与500HZ高频相乘所得信号共同合成。2总体框图(1)系统顶层框图 系统复位蜂鸣器发声电路数码管显示电路点阵显示电路LED灯显示电路 节拍器中心控制电路(2)系统对外接口图蜂鸣器LED显示数码管扫描显示点阵显示节奏选择键st节拍选择键st速率调节键tn开关键st复位键Reset节拍控制器 (3)逻辑划分方框图n , kclk500,clk250,clk1clk2,clk4,clk8frow ,listb ,cr ,g gclk5clk控制器分频器时钟时钟蜂鸣器LED灯数码管点阵tjtktnstreset防抖复位键调速键节拍选择键节奏选择键开关键noyes无节奏型节奏选择键?noyes节奏型1节奏选择键?noyes节奏型2节奏选择键?noyes节奏型4节奏选择键?noyes节奏型3节奏选择键?noyes节奏型5节奏选择键?(4)逻辑流程图(由于状态先由有无节奏型确定,无节奏型时再看节拍型,为了使图形简洁美观,避免画图时线条过多和交叉,此处将逻辑流程图分为两个部分,当从有节奏型转换为无节奏型时,状态转入先前的节拍型,而非默认的40HZ的1/4拍)节奏型间的转换: noyes1/4拍节拍键?noyes2/4拍节拍键?noyes3/4拍节拍键?noyes4/4拍节拍键?noyes3/8拍节拍键?noyes6/8拍节拍键?节拍内的转换:(5)MDS图节奏间的转移(其中0为无节奏,转移条件为节奏选择键输入tj):101010101010012345节拍间的转移(转移条件为节拍选择键输入tk):1010101010100102030405063. 分块设计(1) 分频模块:分频模块可以细分为两个部分,一个是与速率,节拍无关的普 通分频,一个是与其有关的分频分频比的计算:待得信号单位时长 / 基础信号单位时长第一部分:需要分出的信号有clk500(用于蜂鸣器高音合成)clk250(用于蜂鸣器低音合成)clk5(用于调速,选节拍,选节奏的防抖和控制其变化速度)clk1(用于无节奏时控制计时器在0到9间转换) 第二部分:需要分出的信号有 clk8(八分音符信号)clk4(四分音符信号)clk2(二分音符信号)(2) 调速,选拍,选节奏模块对于速率,拍子和节奏的选择,各使用一个按钮输入,通过循环实现重复选择。由于按钮输入时在上升沿有毛刺出现,为了防抖,引入5HZ的信号clk5,由clk5的上升沿决定是否变化。同时,clk5的引入控制了变化的速度。(3) 数码管显示模块此模块共用到五个数码管,其中三个显示速率,两个显示节拍类型,通过引入clk250实现数码管的扫描显示。节拍的显示可以通过k的值(6种情况)直接使用case语句分类输出。而速率的显示由于速率从每分钟40次到每分钟120次,中间共有81种情况,不可能直接依据其值n进行分类,写出每一种情况对应的数码管扫描输出。所以需要提前把速率的每一个数位上的数字提取出来,便于输出。提取每一位的数字可以利用取余函数rem, 具体如下: c3=n rem 10; c2=(n-c3) rem 100)/10; c1=(n-c2*10-c3)/100;(4) 点阵显示模块实验室提供的点阵是8乘8的行扫描点阵。点阵模块在此要实现两个功能能,一是在无节奏普通节拍的情况下实现从0到9的时钟计时(两个数字时间间隔为1秒),第二则是在有节奏型的情况下,将节奏型的符号显示在点阵上。为了实现此两个功能,要引入一个变量p来进行区分:当无节奏型(j=1)时,p在0到9间转换,实现计时功能;当有节奏型(j!=1)时,p=j+8,用于显示节奏符号的情况。实际上,点阵显示共有15种状态(10+5)。 (5) LED灯显示模块LED灯采用两个不同颜色的灯输出,一红一黄,分别代表强弱拍。根据有无节奏类型和节拍类型,可先确定一个基本的信号,以下以3/4拍为例,则基本信号为四分音符信号clk4,再通过引入计数变量y1,y1在clk4的上升沿出现时发生变化,且在0到2间变化,若y1对3取余为0,则将基本信号赋值给红灯输出,否则将信号赋值给绿灯输出,从而实现信号的抽取(注意将此处得到的信号与普通分频得到的信号加以区分,占空比不为50%)。其余的节奏和节拍均可用类似的方法抽取出LED红绿灯的信号。(6) 蜂鸣器发声模块蜂鸣器的声是实现在LED灯显示的基础上的,由于LED的红灯亮时,蜂鸣器发出声调较低的响声(强音),当LED绿灯亮时发出声调较高的响声(弱音),蜂鸣器和LED间有明显的同步关系,则蜂鸣器的具体实现为:将LED红灯信号与次高频信号相乘,将LED绿灯信号与高频信号相乘,再将两者相加,赋值给蜂鸣器。实现语句可写为: clkf4-3-1-0,然后再循环。由于每个数码管闪烁的频率为50hz,所以人眼无法分辨出来,实现每个管的稳定显示。对单个数码管的分析:b控制单个数码管7个管脚的亮灭,且为高电平有效。从图中可以看到:当n=40,k=1的时候,b表示的数字依次为0-4- 0-1-4,表示速率为40hz每分钟和节拍型为1/4拍;当n=41,k=2的时候,b表示的数字依次为0-4-1-2-4,表示表示速率为41hz每分钟和节拍型为2/4拍。综合分析:当复位键reset输入信号为1时,用于扫描计数的q_tem值一直为0,所以c中一直是数码管5亮,亮的时间延长。Reset值对b的输出值无影响。 4.红绿灯输出,蜂鸣器输出部分仿真总体分析:从图中开始部分可以看出,当开关键输入为1且clk5的上升沿到来时,开关信号才输入有效,所以第二次开关键输入为1而无clk1的上升沿到来时,红绿灯蜂鸣器均有输出,不发生改变;末尾处开关输入为1且有上升沿,从“开”的状态转换为“关”状态,输出均为0。 红绿灯输出信号分析:开始时,k=1,p=1或p=5,由于p10,为普通节拍型1/4拍,所以红灯信号等于时钟信号clk4; 然后,k=2,p=0,由于p10,为普通节拍型2/4拍,红绿信号单位置1时长与clk4的单位置1时长相等,且交替置1,表示红绿灯每次亮灯时长与clk4的单位高电平时长一致,且红绿灯交替闪烁; 然后,k=5,p=1,由于p10,为节奏型。从图中可以看到,红灯信号的单位置1时长与clk4单位高电平时长一致,绿灯信号单位置1时长与clk8单位高电平时长一致,且置1的顺序为红绿绿。则此时表示的节奏型为四分音符时长强拍八分音符时长弱拍八分音符时长弱拍,即“红空空绿空绿空”“强空空弱空弱空”的节奏型。蜂鸣器分析:蜂鸣器的信号由红灯信号与clk250相乘加上绿灯信号与clk250相乘所得。所以从图上可以看到,当红灯信号为1时,蜂鸣器等于信号clk250,当绿灯信号为1时,蜂鸣器等于信号clk500,否则蜂鸣器信号为0。四 源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jiepaiqi isport(clk,st,tn,tk,tj,reset:in std_logic; b:out std_logic_vector(6 downto 0); c:out std_logic_vector(5 downto 0); r_out,g_out,f_out:out std_logic; row:out std_logic_vector(7 downto 0); list:out std_logic_vector(7 downto 0) );end jiepaiqi;architecture a of jiepaiqi is signal n:integer range 40 to 120; signal k:integer range 1 to 6; signal clk500,clk250, clk5, clk1,clk8,clk4,clk2,clk48,clkr,clkg,clkf,clkst:std_logic; signal tem500:integer range 0 to 49999; signal tem5:integer range 0 to 24; signal tem1:integer range 0 to 124; signal q_tem:integer range 0 to 4; signal c1:integer range 0 to 1; signal c2,c3:integer range 0 to 9; signal tem8:integer range 0 to 18749999; signal k1:integer range 0 to 7; signal y1:integer range 0 to 5; signal y2:integer range 0 to 5; signal y3:integer range 0 to 3; signal y4:integer range 0 to 2; signal r,g,f:std_logic; signal j:integer range 1 to 6; signal p:integer range 0 to 14; signal p_tem:integer range 0 to 5; begin p1:process(reset,clk) -clk分频,得500HZ信号clk500 begin if reset=1then tem500=0; elsif (clkevent and clk=1)then if tem500=49999 then tem500=0;clk500=not clk500; else tem500=tem500+1; end if; end if; end process p1; p2:process(reset,clk500) -clk500分频,得250HZ信号clk250 begin if reset=1then clk250=0; elsif (clk500event and clk500=1)then clk250=not clk250; end if; end process p2; p3:process(reset,clk250) -clk250分频,得5HZ信号clk5 begin if reset=1then tem5=0; elsif (clk250event and clk250=1)then if tem5=24 then tem5=0;clk5=not clk5; else tem5=tem5+1; end if; end if; end process p3; p4:process(reset,clk250) -clk250分频,得1HZ信号clk1 begin if reset=1then tem1=0; elsif (clk250event and clk250=1)then if tem1=124 then tem1=0;clk1=not clk1; else tem1=tem1+1; end if; end if; end process p4; p5:process(reset,clk5,tn) -调速率n begin if reset=1then n=40; elsif (tn=1 )then -防抖 if (clk5event and clk5=1) then if (n=120) then n=40; else n=n+1; end if; end if; end if; end process p5; p6:process(tk,reset,clk5) -调节拍型k begin if reset=1then k=1; elsif (tk=1)then -防抖 if (clk5event and clk5=1) then if k=6 then k=1; else k=k+1; end if; end if; end if; end process p6; p7:process(tj,reset,clk5) -调节奏型j begin if reset=1then j=1; elsif (tj=1)then -防抖 if (clk5event and clk5=1) then if j=6 then j=1; else j=j+1; end if; end if; end if; end process p7; p8:process(reset,n,k,clk250) -数码管扫描显示 begin if (clk250event and clk250=1)then if reset=1then q_tem=0; elsif q_tem=4 then q_tem=0; else q_tem=q_tem+1; end if; c3=n rem 10; -提取速率的个十百位数字 c2=(n-c3) rem 100)/10; c1cbbbcbbbbbbbbbbb cbbbbbbbbbbbcbbbbbbbcbbbbbbb9) then p=0; elsif (clk1event and clk1=1)then if p=9 then p=0; else p=p+1; end if; end if; else p=j+8; end if; if (clk250event and clk250=1)then if reset=1then p_tem=0; elsif p_tem=5 then p_tem=0; else p_temrowlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistrowlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistrowlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistrowlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistrowlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistrowlistlistlistlistlistlist=00000000; end case; end case; end if;end process p9; p10:process(reset,clk,n) -依据n值,从clk分出8分音符间隔信号clk8 begin if reset=1then tem8=0; elsif (clkevent and clk=1)then if tem8=750000000/n-1 then tem8=0;clk8=not clk8; else tem8=tem8+1; end if; end if; end process p10; p11:process(clk8) -从clk8分出四分音符间隔信号clk4 begin if (clk8event and clk8=1)then clk4=not clk4; end if; end process p11; p12:process(clk4) -从clk4分出二分音符间隔信号clk2 begin if (clk4event and clk4=1)then clk2clk48=clk4;k1clk48=clk4;k1clk48=clk4;k1clk48=clk4;k1clk48=clk8;k1clk48=clk8;k1clk48=clk4;k1=1; end case; if (reset=1 or st=1) then y3=0; elsif (clk8event and clk8=1)then if y3=3 then y3=0; else y3=y3+1; end if; end if; if (reset=1 or st=1) then y4=0; elsif (clk8event and clk8=1)then if y4=2 then y4=0; else y4=y4+1; end if; end if; if (reset=1 or st=1) then y1=0; elsif (clk48event and clk48=1)then if y1=k1-1 then y1=0;y2=y1 rem k1; else y1=y1+1;y2clkr=clk2;clkgclkr=clk4;clkgclkr=clk8;clkg if y32 then clkr=clk4;clkg=0; else clkg=clk8;clkr if y42 then clkr=clk4;clkg=0; else clkg=clk8;clkr -节拍型的红绿灯信号赋值(从基本信号clk48抽取) if y2=0 then clkr=clk48;clkg=0; else clkg=clk48;clkr=0; end if; end case; end process p13; p14:process(st,clk5,clk500,clk250,clkr,clkg) -蜂鸣器输出赋值 begin if (st=1)then -开关防抖 if (clk5event and clk5=1)then clkst=not clkst; end if; end if; if clkst=1 then clkf=(clkr and clk250) or (clkg and clk500);f=clkf;r=clkr;g=clkg; else clkf=0;r=0;g=0; end if; end process p14; r_out=r;g_out=g;f_out=clkf; -信号给输出红绿灯及蜂鸣器输出端口赋值end a;五 功能说明及资源利用情况1. 功能说明本次实验所写程序完成的基本功能如下:(1)速度在 40120 次/分钟范围内连续可调,通过1个按键进行速度调节,用来增 加速率,当长按按键时,按 5 次/秒的速度连续增加,当速率达到120时循环增加回到40,用 3 个数码 管显示当前速度。( 2)节拍有 1/4、2/4、3/4、4/4、3/8、6/8 可选,通过一个按键选择,用 2 个数码管显示。 (3)可以使用一个按键开始和停止打节拍,开始后按照设置好的节拍和速度打节拍。( 4)通过蜂鸣器发声和LED灯光来表示节奏和节拍,声音有强弱区别,灯光用红色和绿色两种发光二极管对应表示 强弱。 (6/8拍的声音仅有强弱,没有设定次强;6/8的发光二极管仅有两色,与声音的强弱相对应)完成的提高功能有以下两个:(1)通过一个按键选择时值(节奏类型),并在用点阵显示,如下图。 节奏型的选择共设有以上图中的1,2,4,5,6共五种选择,当节奏型为无时,节拍器为普通节拍型(见基本功能)(2)在无节奏型的情况下,用点阵计时,点阵的显示从0到9,时间间隔为一秒。对于乐理不太了解的使用者,可以根据计时器来对比各种节拍,节奏型发声的时间间隔,从而学习乐理知识。(何为1/4, 2/4, 3/4, 4/4, 3/8, 6/8拍,以4为“分母”的拍子和以8为“分母”的拍子
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年电影制片方与编剧前期创作合同
- 金华2024年浙江金华兰溪市部分医疗机构招聘编外工作人员8人笔试历年典型考点(频考版试卷)附带答案详解版
- 外汇经纪业务模式优化-洞察分析
- 2023年-2024年项目部治理人员安全培训考试题及参考答案(模拟题)
- 2023年-2024年员工三级安全培训考试题答案全套
- 图例视觉引导-洞察分析
- 学校教工团支部书记岗位职责
- 施工项目部关键岗位人员任职条件及主要职责
- 地铁站施工安全保证措施
- 安全施工会议纪要范文
- 江苏科技大学高等数学期末考试试卷(含答案)
- 英语介绍家乡省份江西
- 建设工程见证取样管理规范
- 中国成人血脂异常防治指南解读
- 医学专家谈灵芝孢子粉课件
- 弹性力学19年 吴家龙版学习通超星课后章节答案期末考试题库2023年
- 有没有租学位的协议书
- 住宅小区绿化管理规定
- 土建工程定额计价之建筑工程定额
- 2022年7月云南省普通高中学业水平考试物理含答案
- 学校安全工作汇报PPT
评论
0/150
提交评论