北邮数电实验电子琴

北邮数电实验电子琴
北邮数电实验电子琴

VHDL硬件描述语言程序设计简易电子琴演奏器

姓名:chi

目录

一、设计课题的任务要求 ............................................................. 错误!未定义书签。

二、系统设计................................................................................. 错误!未定义书签。

三、仿真波形及波形分析 ............................................................. 错误!未定义书签。

四、源程序..................................................................................... 错误!未定义书签。

五、功能说明................................................................................. 错误!未定义书签。

六、元器件清单及资源利用情况 ................................................. 错误!未定义书签。

七、故障及问题分析 ..................................................................... 错误!未定义书签。

八、总结和结论 ............................................................................. 错误!未定义书签。

一、设计课题的任务要求

基本要求:

1、用8×8点阵显示“1 2 3 4 5 6 7”七个音符构成的电子琴键盘。其中点阵的第一列

用一个LED点亮表示音符“1”,第二列用二个LED点亮表示音符“2”,依此类推,如下图所示。

图1 点阵显示的电子琴键盘

2、用BTN1~BTN7七个按键模拟电子琴手动演奏时的“1 2 3 4 5 6 7”七个音符。当某

个按键按下时,数码管显示相应的音符,点阵上与之对应的音符显示列全灭,同时蜂鸣器演奏相应的声音;当按键弹开时数码管显示的音符灭掉,点阵显示恢复,蜂鸣器停止声音的输出。下图所示为按下BTN3按键时点阵的显示情况。

图2 按键按下后的点阵显示

3、由拨码开关切换选择高、中、低音,并用数码管进行相应的显示。

4、通过按键BTN0进行复位,控制点阵显示图1的初始状态。

提高要求:

1、可通过一个拨码开关进行手动/自动演奏的切换,并与点阵显示配合增加自动演奏

乐曲的功能。

2、增加手动演奏的音符存储、播放功能。

二、系统设计

1.设计思路

简易电子琴的制作主要是利用不同频率的波来驱动蜂鸣器发出声响。通过输入不同的音符来设置不同的分频系数,使得50MHz的主频分频出不同频率的波。同时,演奏的音符还可以通过数码管和8*8点阵来动态显示。

根据系统设计要求,该电子琴设计采用自顶向下的设计方法。整体的功能通过不同的底层模块配合来完成电子琴的功能。底层模块主要包括乐曲自动演奏模块、分频预置值产生模块和数控分频模块,数码管显示模块,8*8点阵显示模块五部分组成。用这种设计思路把整个系统分为了若干个模块,然后再在顶层文件中将各个模块组合在一起,从而体现出超、高速硬件描述语言VHDL的优势,

关于提高要求中通过一个拨码开关进行手动/自动演奏的切换,并与点阵显示配合增加自动演奏乐曲的功能,我打算将一首曲子的音符储存在自动播放的数组里面,然后通过计数器来顺序播放储存的音符。

关于提高要求中的手动演奏的音符存储、播放功能,我打算通过编程实现类似数据结构中队列的模块,来储存手动输入的音符,然后在要播放的时候,队列里面的音符依次出队,从而实现音符储存播放的功能。

2.总体框图

图3 简易电子琴总体结构框图

图4 简易电子琴逻辑流程图

图5 简易电子琴VHDL电路原理图

3.分块设计

(1)分频模块div0

由于实验电路板的主频是50Mhz,为了数码管和点阵的刷新显示,我们必须将50Mhz的频率进行分频。分频的程序来自电路中心的网站上面。在这个模块里,我设置分频系数为cnt=2499。从实验结果看,这个分频对数码管和点阵的显示有很好的效果

(2)数码管显示模块shuma

我使用了2个数码管,第一个数码管显示1~7的音符,第二个数码管显示相关的信息,比如高音用H表示,低音用L表示,自动播放用A表示。两个数码管分别刷新,但由于刷新频率太快,人眼不能察觉,以为是两个数码管是同时亮的。在程序中我们通过duan : out std_logic_vector(7 downto 0)和cat : out std_logic_vector(5 downto 0)来控制数码管的显示。当输入不同的音符和不同的控制信息时,duan和cat向量都有不同的值与之对应。

(3)8*8点阵显示模块dianzhen

8*8点阵的显示和数码管的显示运用了同样的原理,在程序中我们通过row : out

std_logic_vector(7 downto 0)和col : out std_logic_vector(7 downto 0)这两个向量来控制点阵的显示。当输入不同的音符时,点阵显示相应的形状。

(4)音符产生模块auto。

这个模块的功能是,选择的不同模式来产生不同的音符。当选择自动播放模式时,随着计数器count的值增加,即地址值递增时,程序自动读取出事先储存的音符,并把这个音符输出。当选择手动演奏模式时,直接将通过BTN1~BTN7输入的向量当做音符输出yin :out std_logic_vector(6 downto 0);。

(5)分频预置值产生模块

该模块的功能是通过音符以及高低音选项来查表找到对应的频率值。在程序中设置了全部音符对应的分频预置数。通过判断音符产生模块输出的音符yin :in std_logic_vector(6 downto 0),以及拨码开关的高低音highlow :in std_logic_vector(1 downto 0)控制键,来查找出该音符的频率值,然后将该频率赋值给tone :out integer range 0 to 2000000);。

(6)数控分频发声模块

从实验板上面输入的时钟是50MHz的,必须经过分频后由clk_out输出,驱动蜂鸣器发声。Clk_out的输出频率就对应着音符的音调。分频系数由来自分频预置值模块的tone :out integer range 0 to 2000000)。由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号。为了利用驱动蜂鸣器,需要再增加一个进程,多波形进行整理,均衡占空比

三、仿真波形及波形分析

1.数码管显示模块仿真波形

波形分析:不同的yin,和highlow组合,数码管显示不同的字符。duan[0]~duan[7]对应着数码管的a段到h段,cat[0]~cat[5]控制不同的数码管

2.点阵显示模块仿真波形

波形分析:不同的yin输入,点阵的col和row会有不同的波形,利用clk_in的上升沿来动

态扫描点阵。从而得显示出指定的图形。

3.自动播放模块仿真波形

波形分析:当auto 置1,clear置0,yin_out输出储存在程序里面的曲子音符,这时候相当于自动播放。当auto置0,clear置0,yin_out输出从BTN1~BTN7读取的手动输入的信号,这时候相当于手动演奏。

4.分频预置值产生模块仿真波形

波形分析:输入不同的高低音highlow,和音符yin,输出不同的tone。而tone将作为发声模块的分频预置值

四、源程序

1.分频模块源程序

library ieee;

use div0 is

port(clk_in : in std_logic; --输入时钟

clk_tmp : out std_logic); --输出时钟

end;

architecture b of div0 is

signal clk : std_logic;

begin

p0:process(clk_in)

variable cnt : integer range 0 to 2499;

begin

if (clk_in'event and clk_in='1') then

if cnt=2499 then --分频系数为2499

cnt:=0;

clk<= not clk;

else

cnt:=cnt+1; --每个输入时钟上升沿到来时cnt加1

end if;

end if;

end process p0;

clk_tmp<=clk;

end b ;

2.数码管显示源程序

library ieee;

use shuma is

port(clk_in : in std_logic; --以分频的时钟输入yin : in std_logic_vector(6 downto 0); --输入音符

highlow : in std_logic_vector(1 downto 0); --输入高低音

auto : in std_logic; --自动播放

auto1 : in std_logic; --自动播放1

duan : out std_logic_vector(7 downto 0);

cat : out std_logic_vector(5 downto 0)

);

end;

architecture b of shuma is

signal duant : std_logic_vector(7 downto 0);

signal catt : std_logic_vector(5 downto 0);

begin

p1: process(clk_in,yin,highlow,auto,auto1)

begin

if auto ='1' then

catt<="111101";duant<="00111111"; --显示“8”表示自动播放elsif auto1 ='1' then

catt<="111101";duant<="01111111"; --显示“0”表示试音elsif auto ='0' then

if(clk_in ='0') then

case yin is

when "0000001" => catt<="111110";duant<="00000110"; --显示“1”

when "0000010" => catt<="111110";duant<="01011011";--显示“2”

when "0000100" => catt<="111110";duant<="01001111";--显示“3”

when "0001000" => catt<="111110";duant<="01100110";--显示“4”

when "0010000" => catt<="111110";duant<="01101101";--显示“5”

when "0100000" => catt<="111110";duant<="01111101";--显示“6”

when "1000000" => catt<="111110";duant<="00000111";--显示“7”

when others=> catt<="111111";duant<="00000000";

end case;

elsif (clk_in ='1') then

case highlow is

when "10" => catt<="111101";duant<="01110100"; --显示“L”

when "01" => catt<="111101";duant<="00111000"; --显示“H”

when others=> catt<="111111";duant<="00000000";

end case;

end if;

end if;

end process p1;

cat<= catt;

duan<= duant;

end b;

3.点阵显示源程序

library ieee;

use dianzhen is

port(clk_in : i n std_logic; --时钟输入yin : in std_logic_vector(6 downto 0); --输入音符

row : out std_logic_vector(7 downto 0); --点阵行向量

col : out std_logic_vector(7 downto 0) --点阵列向量

);

end;

architecture b of dianzhen is

signal count : integer range 0 to 6;

signal rowt : std_logic_vector(7 downto 0);

signal colt : std_logic_vector(7 downto 0);

begin

p1:process(clk_in)

begin

if (clk_in'event and clk_in='1') then

if count = 6 then

count<=0;

else

count<=count+1; --用count来记数end if;

end if;

end process p1;

p2: process(count,yin)

begin

if (yin = "0000001") then

case count is --点阵显示,表示“1”音符

when 0=> rowt<="";colt<="01111110";

when 1=> rowt<="";colt<="01111110";

when 2=> rowt<="";colt<="01111100";

when 3=> rowt<="";colt<="01111000";

when 4=> rowt<="";colt<="01110000";

when 5=> rowt<="";colt<="01100000";

when 6=> rowt<="";colt<="01000000";

when others=> rowt<="";colt<="00000000";

end case;

elsif (yin = "0000010") then

case count is --点阵显示,表示“2”音符

when 0=> rowt<="";colt<="01111101";

when 1=> rowt<="";colt<="01111100";

when 2=> rowt<="";colt<="01111100";

when 3=> rowt<="";colt<="01111000";

when 4=> rowt<="";colt<="01110000";

when 5=> rowt<="";colt<="01100000";

when 6=> rowt<="";colt<="01000000";

when others=> rowt<="";colt<="00000000";

end case;

elsif (yin = "0000100") then

case count is --点阵显示,表示“3”音符when 0=> rowt<="";colt<="01111011";

when 1=> rowt<="";colt<="01111010";

when 2=> rowt<="";colt<="01111000";

when 3=> rowt<="";colt<="01111000";

when 4=> rowt<="";colt<="01110000";

when 5=> rowt<="";colt<="01100000";

when 6=> rowt<="";colt<="01000000";

when others=> rowt<="";colt<="00000000";

end case;

elsif (yin = "0001000") then

case count is --点阵显示,表示“4”音符when 0=> rowt<="";colt<="01110111";

when 1=> rowt<="";colt<="01110110";

when 2=> rowt<="";colt<="01110100";

when 3=> rowt<="";colt<="01110000";

when 4=> rowt<="";colt<="01110000";

when 5=> rowt<="";colt<="01100000";

when 6=> rowt<="";colt<="01000000";

when others=> rowt<="";colt<="00000000";

end case;

elsif (yin = "0010000") then

case count is --点阵显示,表示“5”音符when 0=> rowt<="";colt<="01101111";

when 1=> rowt<="";colt<="01101110";

when 2=> rowt<="";colt<="01101100";

when 3=> rowt<="";colt<="01101000";

when 4=> rowt<="";colt<="01100000";

when 5=> rowt<="";colt<="01100000";

when 6=> rowt<="";colt<="01000000";

when others=> rowt<="";colt<="00000000";

end case;

elsif (yin = "0100000") then

case count is --点阵显示,表示“6”音符when 0=> rowt<="";colt<="01011111";

when 1=> rowt<="";colt<="01011110";

when 2=> rowt<="";colt<="01011100";

when 3=> rowt<="";colt<="01011000";

when 4=> rowt<="";colt<="01010000";

when 5=> rowt<="";colt<="01000000";

when 6=> rowt<="";colt<="01000000";

when others=> rowt<="";colt<="00000000";

end case;

elsif (yin = "1000000") then

case count is --点阵显示,表示“7”音符when 0=> rowt<="";colt<="00111111";

when 1=> rowt<="";colt<="00111110";

when 2=> rowt<="";colt<="00111100";

when 3=> rowt<="";colt<="00111000";

when 4=> rowt<="";colt<="00110000";

when 5=> rowt<="";colt<="00100000";

when 6=> rowt<="";colt<="00000000";

when others=> rowt<="";colt<="00000000";

end case;

else

case count is --点阵显示,表示不输入音符when 0=> rowt<="";colt<="01111111";

when 1=> rowt<="";colt<="01111110";

when 2=> rowt<="";colt<="01111100";

when 3=> rowt<="";colt<="01111000";

when 4=> rowt<="";colt<="01110000";

when 5=> rowt<="";colt<="01100000";

when 6=> rowt<="";colt<="01000000";

when others=> rowt<="";colt<="00000000";

end case;

end if;

end process p2;

row<= rowt;

col<= colt;

end b;

4.选择音符及自动播放源程序

library ieee;

use auto is

port( clk_in :in std_logic; --输入时钟auto :in std_logic; --自动播放

auto1 :in std_logic; --试音播放

clear :in std_logic; --复位

yin_in :in std_logic_vector(6 downto 0); --输入音符

yin_out :out std_logic_vector(6 downto 0)); --输出音符end auto;

architecture a of auto is

signal count : integer range 0 to 35;

signal n: integer range 0 to 6;

signal yin : std_logic_vector(6 downto 0);

begin

p1:process(clk_in,clear)

variable i : integer range 0 to ;

begin

if clear ='1' then

count<=0;

elsif (clk_in'event and clk_in='1') then

if (i=) then

i:=0;

if count =15 then

count <=0; --自动播放count记数else

count <=count+1;

end if;

if n =6 then

n <=0; --试音播放n记数else

n <=n+1;

end if;

else

i:=i+1;

end if;

end if;

end process p1;

p2:process(count,auto,yin_in,clear)

begin

if clear='1' then

yin<="0000000"; --音符清零else

if auto ='1' then --自动播放歌曲case count is

when 1 => yin<="0000100"; --3

when 2 => yin<="1000000"; --7

when 3 => yin<="0000100"; --3

when 4 => yin<="0100000"; --6

when 5 => yin<="0010000"; --5

北京邮电大学数电实验一实验报告

北京邮电大学数字电路与逻辑 设计实验 学院: 班级: 作者: 学号:

实验一 Quartus II原理图输入法设计 一、实验目的: (1)熟悉Quartus II原理图输入法进行电路设计和仿真 (2)掌握Quartus II 图形模块单元的生成与调 (3)熟悉实验板的使用 二、实验所用器材: (1)计算机 (2)直流稳压电源 (3)数字系统与逻辑设计实验开发板 三、实验任务要求 (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模 块单元。 (2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能, 并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3)用3线-8线译码器(74LS138)和逻辑门设计实现函数 ,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 四、设计思路和过程 (1)半加器的设计 半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路。是实现两个一位二进制数的加法运算电路。数据输入AI被加数、BI加数,数据输出SO和数(半加和)、进位C0。 在数字电路设计中,最基本的方法是不管半加器是一个什么样的电路,按组合数字电路的分析方法和步骤进行。 1.列出真值表 半加器的真值表见下表。表中两个输入是加数A0和B0,输出有一个是和S0,另一个是进位C0。

2 该电路有两个输出端,属于多输出组合数字电路,电路的逻辑表达式如下函数的逻辑表达式为:SO=AI⊕BI CO=AB 所以,可以用一个两输入异或门和一个两输入与门实现。

(数字信号发生器+电子琴)实验报告

实验一数字信号发生器和电子琴制作 一、实验目的 1.熟悉matlab的软件环境,掌握信号处理的方法,能在matlab的环境下完成对 信号的基本处理; 2.学会使用matlab的GUI控件编辑图形用户界面; 3.了解matlab中一些常用函数的使用及常用运算符,并能使用函数完成基本的 信号处理; 二、实验仪器 计算机一台,matlab R2009b软件。 三、实验原理 1.数字信号发生器 MATLAB是矩阵实验室(Matrix Laboratory)的简称,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB 和Simulink两大部分。 已知的常用正弦波、方波及三角波,可以通过matlab自带的函数实现,通过改变函数的幅值、相位和频率可以得到不同的信号。 正弦信号:y=A*sin(2*pi*f*t); 方波信号:y=A*square(2*f*pi*x+c); 三角波信号:y=A*sawtooth(2*pi*f*x+c); 2. 电子琴 电子琴的每个音阶均对应一个特定频率的信号,通过调用数字信号发生器产生一系列指定的频率的声音,从而达到虚拟的电子琴的功能。界面中包含1、2、…、7共 7 个琴键,鼠标按下时即发声,松开时发声停止。同时能够产生正弦波、方波、三角波等常见的波形的数字信号,然后将数字信号写入声卡的缓冲区,最后由声卡播放出相应的声音。 已知音乐的七个音阶的主频率分别是131Hz、147Hz、165Hz、175Hz、196Hz、220Hz和247Hz,分别构造正弦波、方波和三角波,可以组成简单的电子琴。

四、实验内容 1.数字信号发生器的制作 (1)搭建GUI界面 图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。 Matlab环境下的图形用户界面(GUI)是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。MATLAB的用户,在指令窗中运行demo 打开那图形界面后,只要用鼠标进行选择和点击,就可产生丰富的内容。 利用GUI控件中自带的按钮,根据需要组成如下图1所示的数字信号发生器的Gui界面。 图1 数字信号发生器的GUI界面

北邮数字电路综合实验报告

数字电路综合实验报告 简易智能密码锁 一、实验课题及任务要求 设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。 基本要求: 1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。通过密码设置确定键(BTN 键)进行锁定。 2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。 3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。闭锁状态下不能清除密码。 4、用点阵显示开锁和闭锁状态。 提高要求: 1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。 2、密码锁的密码位数(4~6 位)可调。

3、自拟其它功能。 二、系统设计 2.1系统总体框图 2.2逻辑流程图

2.3MDS图 2.4分块说明 程序主要分为6个模块:键盘模块,数码管模块,点阵模块,报警模块,防抖模块,控制模块。以下进行详细介绍。 1.键盘模块 本模块主要完成是4×4键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。 键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出高电平,在读入输出的行值时,通常高电平会被低电平拉低,当当前位置为高电平“1”时,没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。由此可确定按键位置。

北邮,单片机,实验报告,电子琴

北邮,单片机,实验报告,电子琴 北邮单片机实验报告简易电子琴 2014年小学期单片机设计实验报告题目:基于单片机的电子音乐发生器 班级:班内序号:实验组号:学生姓名:指导教师: 基于单片机的电子音乐发生器 实验摘要 此次本组制作的基于PIC单片机的电子音乐发生器是具有LCD显示屏提示的音乐简单演奏、播放、存储等功能的演示作品,拥有以下4种功能: 1.按键演奏:即“电子琴”功能,可以用键盘上的“1”到“A”键演奏从低音sol到高音do等11个音; 2.点歌功能:即按动“B”“C”键分别演奏两首乐曲(可以表现准确的音高和音长)。3.存储音乐功能:即按右下角“F存储”键,然后按键演奏并存储,随后按“E”键结束,之后按“D键”就可以播放存储的乐曲了; 4.液晶显示功能:即在开始时显示“hello!”,在点播时分别显示“song b”、“song c”,在存储时显示“saving”。 电子音乐发生器采用以Microchip公司的PIC16F877芯片为核心的简单控制系统,外部电路连接有喇叭、键盘、LCD液晶显示屏以及其他必要系统调节元件。软件设计中涉及PORTB\PORTC\PORTD\PORTE用作普通数字I/O脚功能。本实验用

单片机PORTB\D接收来自键盘输入的指令信息,由此确定LCD液晶屏幕显示以及喇叭播放内容,再通过PORTC\D\E输出声音或字幕信息。 关键字 单片机——microcontroller芯片——CMOS chip 音乐发生器——music generator 分频——fractional frequency 一、实验论证与比较 本设计的核心器件是单片机芯片和音频功放芯片。单片机采用以Microchip公司的PIC16F87X系列中的PIC16F877芯片为核心构建简单控制系统,它完全可以满足本设计功能的需要。此音乐发生器设计利用单片机的输入输出功能,当按下播放功能键时,单片机的输出功能使外部电路连接的喇叭和LCD液晶显示屏同时播放声音及显示文字,从而实现各种复杂音乐播放器的功能。 在嵌入式系统设计中,扬声器等是常用的输出设备,它具有使用方便、价格便宜、电路接口简单等优点,因此,在嵌入式系统中被广泛使用。同时随着单片机的发展,其功能越来越强大,技术也越来越成熟,由此生产的音乐播放器越来越受到人们的喜爱。因此,在技术性操作、社会因素和经济方面都具有良好的可行性。我在实验中负责了全部软件设计,代码的编写,电路图的设计,以及部分硬件焊接。其中,困难的部分在于,理论上认为电子音乐发生器模拟真正乐器的仿真实现方法,与现实电路实现起来有着一定的差别,在长音、乐谱存储播放上,以及存储功能的代码

北京邮电大学数字电路实验报告

北京邮电大学 数字电路与逻辑设计实验 实验报告 实验名称:QuartusII原理图输入 法设计与实现 学院:北京邮电大学 班级: 姓名: 学号:

一.实验名称和实验任务要求 实验名称:QuartusII原理图输入法设计与实现 实验目的:⑴熟悉用QuartusII原理图输入法进行电路设计和仿真。 ⑵掌握QuartusII图形模块单元的生成与调用; ⑶熟悉实验板的使用。 实验任务要求:⑴掌握QuartusII的基础上,利用QuartusII用逻辑 门设计实现一个半加器,生成新的半加器图像模 块。 ⑵用实验内容(1)中生成的半加器模块以及逻辑门 实现一个全加器,仿真验证其功能,并能下载到实 验板上进行测试,要求用拨码开关设定输入信号, 发光二级管显示输出信号。 ⑶用3线—8线译码器(74L138)和逻辑门实现要求 的函数:CBA F+ C + =,仿真验证其 + B C B A A A B C 功能,,并能下载到实验板上进行测试,要求用拨 码开关设定输入信号,发光二级管显示输出信号。二.设计思路和过程 半加器的设计实现过程:⑴半加器的应有两个输入值,两个输出值。 a表示加数,b表示被加数,s表示半加和, co表示向高位的进位。

⑵由数字电路与逻辑设计理论知识可知 b a s ⊕=;b a co ?= 选择两个逻辑门:异或门和与门。a,b 为异 或门和与门的输入,S 为异或门的输出,C 为与门的输出。 (3)利用QuartusII 仿真实现其逻辑功能, 并生成新的半加器图形模块单元。 (4)下载到电路板,并检验是否正确。 全加器的设计实现过程:⑴全加器可以由两个半加器和一个或门构 成。全加器有三个输入值a,b,ci ,两个输 出值s,co :a 为被加数,b 为加数,ci 为低 位向高位的进位。 ⑵全加器的逻辑表达式为: c b a s ⊕⊕= b a ci b a co ?+?⊕=)( ⑶利用全加器的逻辑表达式和半加器的逻 辑功能,实现全加器。 用3线—8线译码器(74L138)和逻辑门设计实现函数 CBA A B C A B C A B C F +++= 设计实现过程:⑴利用QuartusII 选择译码器(74L138)的图形模块

北邮模电综合实验-简易电子琴的设计与实现.

电子测量与电子电路实验课程设计 题目: 简易电子琴的设计和制作 姓名孙尚威学院电子工程学院 专业电子信息科学与技术 班级学号班内序号指导教师陈凌霄 2015年 4 月 目录 一、设计任务与要求 (3) 1.1 设计任务与要求 (3) 1.2 选题目的与意义 (3) 二、系统设计分析 (3) 2.1系统总体设计 (3) 2.2 系统单元电路设计 (4) 2.2.1 音频信号产生模块 (4) 2.2.2 功率放大电路 (7) 2.2.3 开关键入端(琴键) (8) 三、理论值计算 (9) 3.1 音阶频率对应表 (9) 3.2 键入电路电阻计算 (9) 四、电路设计与仿真 (10) 4.1 电路设计 (10) 4.2 Multisim仿真 (11) 五、实际电路焊接 (11) 六、系统调试 (13)

6.1 系统测试方案 (13) 6.2 运行结果分析 (14) 七、设计体会与实验总结 (15) 一、设计任务与要求 1.1 设计任务与要求 了解由555定时器构成简易电子琴的电路及原理。设计并利用NE555集成运算电路以及外加电阻,电容在第一级产生不同频率的音乐,再利用LM386功率放大电路对音乐信号进行放大,最后通过扬声器产生21个音符。 1.2 选题目的与意义 (1)培养理论联系实际的正确设计思想,训练综合运用已经学过的理论和生产实际知识去分析和解决工程问题的能力。 (2)学习较复杂的电子系统设计的一般方法,了解和掌握模拟,数字电路等知识解决电子信息方面常见实际问题的能力。 (3)学习调试电子电路的方法,提高实际动手能力。了解由555定时器构成简易电子琴的电路及原理。 二、系统设计分析 2.1系统总体设计 由555电路组成的多谐振荡器,它的振荡频率可以通过改变振荡电路中的RC元件的数值进行改变。根据这一原理,通过设定一些不同的RC数值并通过控制电路,按照一定的规律依次将不同值的RC组件接 入振荡电路,就可以使振荡电路按照设定的需求,有节奏的发出已设定的音频信号,再利用LM386功率放大电路对音乐信号进行放大,最后通过扬声器产生音符。 图1:系统组成框图 2.2 系统单元电路设计 2.2.1 音频信号产生模块 利用NE555集成运算电路以及外加电阻,电容在第一级产生不同频率的音乐。555定时器是一种中规模集成电路,外形为双列直插8脚结构,体积很小,使用起来方便。只要在外部配上几个适当的阻容元件,就可以构成史密特触发器、单稳态触发器及自激多谐振荡器等脉冲信号产生与变换电路。它在波形的产生与变换、测量与控制、定时电路、家用电器、电子玩具、电子乐器等方面有广泛的应用。

2016年北邮数电实验报告

数字电路与逻辑设计 实验报告 学院:电子工程学院 班级: 姓名: 学号: 班内序号:

目录 (一)实验名称及实验任务要求 (1) (二)模块端口说明及连接图 (2) 1.1实验三(3)模块端口说明 (2) 1.2实验三(3)连接图 (2) 2.1实验四模块端口说明 (2) 2.2实验四连接图 (2) (三)原理图或VHDL代码 (3) 1.实验一(2)原理图 (3) 2.实验三(3)VHDL代码 (4) 3.实验四VHDL代码 (7) (四)仿真波形 (10) 1.实验一(2)仿真波形 (10) 2.实验三(3)仿真波形 (11) 3.实验四仿真波形 (11) (五)仿真波形分析 (11) 1.实验一(2)仿真波形分析 (11) 2.实验三(3)仿真波形分析 (11) 3.实验四仿真波形分析 (11) (六)故障及问题分析 (12) (七)总结和结论 (13)

(一)实验名称及实验任务要求 实验一 名称:QuartusII原理图输入法设计与实现 实验任务要求:EDA基础实验1(1)、(2)、(3)必做,选做VHDL 实现加法器。 实验二 名称:用VHDL设计与实现组合逻辑电路 实验任务要求:四人表决器、8421码转格雷码、数码管译码器(下载测试)。 实验三 名称:用VHDL设计与实现时序逻辑电路 实验任务要求:分频器、8421十进制计数器、将分频器/8421十进制计数器/数码管译码器3个电路进行连接并下载。 实验四 名称:用VHDL设计与实现相关电路 实验任务要求:数码管动态扫描控制器、点阵扫描控制器。

(二)模块端口说明及连接图 1.1实验三(3)模块端口说明 cp:时钟信号输入; rst:8421十进制计数器异步置位; c[6...0]:七段二极管数码管显示; cat[7...0]:数码管显示。 1.2实验三(3)连接图 2.1实验四模块端口说明 cp:时钟信号输入; rst:8421计数器异步复位; lgt[6...0]:七段二极管数码管显示; cat[7...0]:数码管显示。 2.2实验四连接图

单片机电子琴实验报告修订版

单片机电子琴实验报告 修订版 IBMT standardization office【IBMT5AB-IBMT08-IBMT2C-ZZT18】

单片机及DSP课程设计报告 专业:通信工程 班级: 姓名: 学号: 指导教师:李贺 时间:2015-06-22~2015-07-03 通信与电子工程学院 基于单片机的电子琴设计 一、课设的目的及内容 本设计主要是用单片机为核心控制元件,设计一台电子琴。以单片机作为主控核心,与键盘、蜂鸣器、数码管等模块组成核心主控制模块,在主控模块上设有7个按键和1个复位按键。本系统主要是完成的功能:电子琴弹奏并显示所按的按键对应音的唱名。关于声音的处理,使用单片机C语言,利用定时器来控制频率,而每个音符的符号只是存在自定义的表中。 总之,本设计的电子琴有以下要求: (1)用键盘作出电子琴的按键,共7个,每键代表1个音符。各音符按照符合电子琴的按键顺序排列; (2)达到电子琴的基本功能,可以用弹奏出简单的乐曲; (3)在按下按键发出音符的同时显示出音符所对应的唱名

即1(dao)、2(ruai)、3(mi)、4(fa)、5(sao)、6(la)、7 (xi)。 二、问题分析、解决思路及原理图 本系统采用STC89C52RC为主控芯片,因其精度较高,操作比较灵活,输入电路和输出电路由芯片来进行处理,电路的系统的稳定性高,功耗小。其中,输入电路有7个独立按键,通过按键随意按下所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在蜂鸣器中发出有效的声音。由于需要显示的信息不多,显示电路未采用液晶屏显示,而是使用数码管显示电路负责显示按下的琴键所对应音符的唱名,这样既节省了成本,又降低了编程难度。 图1 如图1所示基于单片机STC89C52RC的电子琴电路,它主要由琴键控制电路、数码管显示电路、音频功放电路和时钟-复位电路四部分所构成。 三、硬件设计 (一)琴键控制电路 琴键控制电路作为人机联系的输入部分,也是间接控制数码显示和音频功放的重要组成部分。本设计采用独立式键盘的思路。 独立式键盘的特点是一键一线,各键相互独立,每个键各接一条I/O口线,通过检测I/O输入线的电平状态,可判断出被按下的按键。? 显而易见,这样电路简单,各条检测线独立,识别按下按键的软件编写简单。 适用于键盘按键数目较少的场合,不适用于键盘按键数目较多的场合,因为将占用较多的I/O口线。? 独立式键盘的7个独立按键分别对应一个I/O口线,当某一按键按下时,对应的检测线就变成了低电平,与其它按键相连的检测线仍为高电平,只需读入I/O输入线的状态,判别哪一条I/O输入线为低电平,很容易识别哪个键被按下。

北邮数电实验报告

北京邮电大学实验报告 实验名称:数字电路与逻辑设计实验报告 学院:信息与通信工程学院 班级: 姓名: 学号: 序号: 日期:

实验三:用VHDL语言设计与实现逻辑电路 一、实验内容 1. 用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验版测试。要求用按键设定输入信号,发光二极管显示输出信号; 2.用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器,仿真验证其功能; 3.将(1),(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。 二、模块端口说明及连接图 1.分频器 2. 计数器 clk: 时钟输入信号 clk: 时钟信号输入 clear: 复位信号输入 clear: 复位信号输入 clk_out: 时钟分频后的信号输出 q: 计数器的输出 3.数码管显示 b: 数码管的输入信号 seg: 译码显示输出 onoff: 数码管的输出控制

4.连接图 三、实验分析 1.设计思路 本实验将之前的分频器和计数器以及数码管显示模块组合起来,实现了单个数码管现显示0~9,每隔0.5s切换一次显示内容。 COMPONENT div_12实现了时钟分频,将50MHz的单片机晶振时钟进行分频,输出频率2HZ占空比50%的方波时钟,以此时钟作为内部时钟驱动计数器。 COMPONENT jishuqi是一个十进制计数器,NUM从“0000”到“1001”循环变化,模为10。计数器的输出传递给数码管译码显示电路。 COMPONENT seg7_1是数码管译码显示电路,将收到的信号NUM译码并控制数码管的段锁存来控制数码管的显示。 整体来看,div-12提供了分频后2Hz的时钟,驱动计数器计数,计数的结果作为数码管译码显示模块的输入,根据计数器实时的数进行数码管的显示。综合起来就实现了设计的功能。 在进行电路的连接时,可直接在代码中分成三个进程来实现,也可通过为每个模块建立符号,连接电路图来实现。 2. 具体代码如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpinjishu IS PORT( clear2 :IN STD_LOGIC; clk1:IN STD_LOGIC; b1:OUT STD_LOGIC_VECTOR(6 downto 0); CAT:OUT STD_LOGIC_VECTOR(7 downto 0) );

数电实验实验报告

数字电路实验报告

实验一 组合逻辑电路分析 一.试验用集成电路引脚图 74LS00集成电路 74LS20集成电路 四2输入与非门 双4输入与非门 二.实验内容 1.实验一 自拟表格并记录: 2.实验二 密码锁的开锁条件是:拨对密码,钥匙插入锁眼将电源接通,当两个条件同时满足时,开锁信号为“1”,将锁打开。否则,报警信号为“1”,则接通警铃。试分析密码锁的密码ABCD 是什么? X1 2.5 V A B C D 示灯:灯亮表示“1”,灯灭表示“0” ABCD 按逻辑开关,“1”表示高电平,“0”表示低电平

ABCD 接逻辑电平开关。 最简表达式为:X1=AB ’C ’D 密码为: 1001 A B C D X1 X2 A B C D X1 X2 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 0 1 0 1 0 0 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 三.实验体会: 1.分析组合逻辑电路时,可以通过逻辑表达式,电路图和真值表之间的相互转换来到达实验所要求的目的。 2.这次试验比较简单,熟悉了一些简单的组合逻辑电路和芯片 ,和使用仿真软件来设计和构造逻辑电路来求解。 实验二 组合逻辑实验(一) 半加器和全加器 一.实验目的 1. 熟悉用门电路设计组合电路的原理和方法步骤 二.预习内容 1. 复习用门电路设计组合逻辑电路的原理和方法步骤。 2. 复习二进制数的运算。 3. 用“与非门”设计半加器的逻辑图。 4. 完成用“异或门”、“与或非”门、“与 非”门设计全加器的逻辑图。 5. 完成用“异或”门设计的3变量判奇 电路的原理图。 三.元 件参考 U1A 74LS00D U1B 74LS00D U1C 74LS00D U1D 74LS00D U2A 74LS00D U2B 74LS00D U2C 74LS00D U3A 74LS20D X1 2.5 V X2 2.5 V VCC 5V A B C D

简易电子琴实验报告

北京邮电大学 课题名称:简易电子琴的设计和制作学院:信息与通信工程学院 专业:信息工程 班级:2014211126 姓名:李家威 学号:2014210691 班内序号:10

指导老师:王丹志 一、摘要及关键字 本课程设计以制作出一个简易电子琴为最终目的。该电子琴以NE555为核心,通过公式计算不同频率按键对应的阻值来实现不同的音调,然后通过运算放大器将信号放大并通过喇叭发出声音。由此设计仿真电路图,选择合适器件进行电路搭建,并进行调试直至达到要求,最后进行数据统计。 关键字:电子琴振荡电路运算放大器 二、设计任务及要求 了解由555定时器构成简易电子琴的电路及原理。设计并利用NE555集成运算电路以及外加电阻,电容在第一级产生不同频率的音乐,再利用LM386功率放大电路对音乐信号进行放大,最后通过扬声器产生21个音符。

三、设计思路、总体结构框图 设计思路 555定时器是一种中规模集成电路,外形为双列直插8脚结构,体积小,使用起来方便。只要在外部配上几个适当的阻容元件,就可以构成施密特触发器、单稳态触发器及多谐振荡器等脉冲信号产生与变换电路。它在波形的产生与变换、测量与控制、定时电路、家用电器、电子玩具、电子乐器等方面有广泛的应用。由555定时器电路组成的多谐振荡器,它的振荡频率可以通过改变振荡电路中的RC原件的数值进行改变。根据这一原理,通过设定一些不同的RC数值并通过控制电路,按照一定的速度依次将不同的RC组件接入振荡电路,就可以使振荡电路按照设定的要求,有节奏的发射已设定的音频信号与音乐。

总体结构框图 四、分块电路和总体电路的设计分块电路: 琴键端(开关、电阻)

北邮-数电实验报告

北邮-数电实验报告

数字电路实验报告 学院:信息与通信工程 专业:信息工程 班级:2013211125 学号:2013210681 姓名:袁普

②:仿真波形图以及分析 波形图: 波形分析:通过分析ab ci三个输入在8中不同组合下的输出,发现与全加器的真值表吻合,说明实现了全加器的逻辑功能。同时看见波形中出现了毛刺(冒险),这也与事实一致。 ③:故障及问题分析 第一次在做全加器的时候发现找不到已经生成的半加器模块,后来发现是因为在建立工程时这两个项目没有建在同一个文件夹里,在调用的时候就找不到。后来我将全加器工程建在同一个文件夹里解决了此问题。

实验二:用VHDL设计和实现组合逻辑电路 一:实验要求 ①:用VHDL设计一个8421码转换为格雷码的代码转换器,仿真验证其功能。 ②:用VHDL设计一个4位二进制奇校验器,要求在为奇数个1时输出为1,偶数个1时输出为0,仿真验证其功能。 ③:用VHDL设计一个数码管译码器,仿真验证其功能,下载到实验板测试,要求用拨码开关设定输入信号,数码管显示输出信号,并且只使一个数码管有显示,其余为熄灭状态。 二:故障及问题分析 在刚开始实现让一个数码管显示的时候,我本来准备再设置6个输入和输出,通过实验板上的拨码来输入信息分别控制不同的数码管的的开闭状态,但是后来发现这样效率很低而且实验板上的拨码开关数量根本不够。在老师的提醒下,我最终在VHDL里直接增加了一个向量输出”011111”来直接控制cat0~5六个管脚,从而达到了实验的要求。

实验三:用VHDL设计和实现时序逻辑电路 一:实验要求 ①:用VHDL语言设计实现一个8421十进制计数器,要求有高电平复位功能,仿真验证其功能。 ②:用VHDL语言设计实现一个分频系数为12,输出为占空比50%方波的分频器,有高电平复位功能,仿真验证其功能。 ③:将(1),(2)和数码管译码器三个电路进行连接,仿真验证其功能,并下载到实验板进行测试,要求第三个数码管显示数字。二:报告内容 ①实验三(3)模块端口说明及模块代码 模块一:div12为一个有高电平复位功能的分频系数为12的分屏器,其输出是一个占空比50%的方波。此模块输入连接一个时钟输入,即可在输出端得到一个周期更大的方波输出。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity div12 is port( clear,clk:in std_logic; clk_out:out std_logic ); end div12; architecture struct of div12 is signal temp:integer range 0 to 5; signal clktmp:std_logic; begin process(clk,clear) begin if(clear='1') then

电子琴设计制作完整实验报告

简易电子琴的设计和制作实验报告 撰写人: 学号:2015210079 指导老师:张君毅 院系:信息与通信工程学院 单位名称:北京邮电大学 撰写时间:二零一七年三月二十七日

目录 一、设计任务与要求 1.1设计任务与要求 1.2选题目的与意义 二、设计和电路 2.1设计思路 2.2 总体结构框图 2.3 分块电路和总体电路的设计 三、实现功能 3.1 已完成的功能 3.2 主要的测试数据必要的测试方法 3.3 必要的测试方法 四、故障及问题分析 五、总结和结论 六、器件清单 七、仿真原理图及波形图 八、参考文献 九、附件 9.1《模拟综合实验过程考核统计表》 9.2《实验频率及功率记录表》

摘要 本实验以设计并制作出简易电子琴为目的,通过对电子琴信号的产生和功率放大方面的研究和实践,可对实际电子琴的音色、音质方面的改进起到一定的探索和促进作用。在这个实验中,我们需要建立系统的概念,培养综合应用电子电路及知识的能力,学习小型电子系统的设计、安装和调试方法。最终需要培养我们的工程实践技能和排除故障的能力。我通过该试验完成了简易电子琴的设计与制作,达到了实验要求的频率和功率,并想法设法改良了音色,最终的实验效果不错。 关键词:简易电子琴、运算放大电路、多谐振荡器、频率 一、设计任务与要求 1.1 设计任务与要求 了解由555定时器构成简易电子琴的电路及原理。设计并利用NE555集成运算电路以及外加电阻,电容在第一级产生不同频率的音乐,再利用LM386功率放大电路对音乐信号进行放大,最后通过扬声器产生21个音符。 基本要求:能演奏两个八度音阶。 提高要求:将音阶扩大到再降八度,进一步提高输出功率到0.5w。 1.2 选题的目的与意义 (1)培养理论联系实际的正确设计思想,训练综合运用已经学过的理论和生产实际知识去分析和解决工程问题的能力。 (2)学习较复杂的电子系统设计的一般方法,了解和掌握模拟,数字电路等知识解决电子信息方面常见实际问题的能力。 (3)学习调试电子电路的方法,提高实际动手能力。了解由555定时器构成简易电子琴的电路及原理。

北邮数电实验报告

北京邮电大学 实验报告实验名称:数电电路与逻辑设计实验 学院:信息与通信工程学院 班级: 姓名: 学号: 班内序号: 日期:

一. 实验一:Quartus II 原理图输入法设计 1. 实验名称和实验任务要求 (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块 元。 (2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号入信号。 (3)用3线-8线译码器(74LS138)和逻辑门设计实现函数 F=A B C +A B C +A B C + A B C 。 2. 实验原理图及波形图 (1)半加器 (2)全加器

(3)74LS38 3.仿真波形图分析 (1)半加器: 输入为a,b,输出S,CO(进位)。 当ab都为0时,半加和s=0,进位端co=0。 当ab都为1时,半加和s=0,进位端co=1。 当a=1,b=0 或a=0,b=1时,半加和s=1,进位端co=0。 (2)全加器:

输入a,b,输出S,CO(进位),ci(低进位)。 当a=0,b=0,ci=0,输出s=0,co=0。 当a=0,b=1或a=1,b=0又 ci=0,输出s=1,co=0。 当a=0,b=0,ci=1,输出s=1,co=0。 (3)74LS138 输入A,B,C,输出为3。 四个输出对应F中的四个最小项,Y0、Y2、Y4、Y7,以实现函数功能。 二.实验二:用 VHDL 设计与实现组合逻辑电路 1.实验名称和实验任务要求 (1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能。要求用拨码开关设定输入信号,7段数码管显示输出信号。 (2) 用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能。要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3) 用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个’1’时,输出为’1’,否则输出’0’,仿真验证其功能。要求用拨码开关设定输入信号,发光二极管显示输出信号。 2.实验代码及波形图 (1)共阴极7段数码管译码器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY GUAN IS PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); B:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); C:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END GUAN; ARCHITECTURE encoder_arch OF GUAN IS BEGIN PROCESS(A) BEGIN C<="011111"; CASE A IS WHEN"0000"=> B<="1111110";--0 WHEN"0001"=> B<="0110000";--1 WHEN"0010"=> B<="1101101";--2 WHEN"0011"=> B<="1111001";--3 WHEN"0100"=> B<="0110011";--4 WHEN"0101"=> B<="1011011";--5 WHEN"0110"=> B<="1011111";--6 WHEN"0111"=> B<="1110000";--7 WHEN"1000"=> B<="1111111";--8 WHEN"1001"=> B<="1111011";--9

北邮数电实验分析报告-信息

北邮数电实验报告-信息

————————————————————————————————作者:————————————————————————————————日期:

数字电路与逻辑设计实验 姓名*** 学院信息与通信工程学院 专业信息工程 班级*** 学号**** 班内序号***

实验一 一、实验名称和实验任务要求 1.实验内容:QuartusII原理图输入法设计与实现。 2.实验目的: (1)熟悉用QuartusII原理图输入法进行电路设计和仿真。 (2)掌握QuartusII图形模块单元的生成与调用。 (3)熟悉实验板的使用。 3.实验任务要求: (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图像模块。 (2)用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板上测试。要求用拨码开关设定输入信 号,发光二极管显示输出信号。 (3)用3线—8线译码器(74LS138)和逻辑门实现函数 F=(/)(/)(/)+(/)(/)+(/)(/)+,仿真验证其功能,并下载到实 验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 二、原理图 半加器模块和逻辑门设计实现的全加器: 三、仿真波形图及分析 电路实现了全加器的功能。全加器是实现两个1位二进制数及低位来的进位相加求得和数及向高位进位的逻辑电路。由其原理可得逻辑表达式:sum=ain⊕bin⊕cin

cout = (ain⊕bin)cin + ain*bin。 列出真值表: 输入输出 ain bin cin cout sum 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 仿真波形对比真值表,可以看出波形图与理论值完全符合。 四、故障及问题分析 1、问题:按照逻辑表达式连接了全加器电路后,仿真波形很乱。 解决方法:思考后知道了应该把输入信号依次设成2的n次方,这样的仿真波形清楚容易分析。 2、问题:把代码下载到板子上的过程中,进行到37%的时候停了,等了2分钟 也没继续下载。 解决方法:再次重连USB尝试下载,手紧握着接线口,下载成功了,分析可能是接线口接触不好。 实验二 一、实验名称和实验任务要求 1.实验内容:用VHDL设计与实现组合逻辑电路。 2.实验目的: (1)熟悉用VHDL语言设计组合逻辑电路的方法。 (2)熟悉用QuartusII文本输入法进行电路设计。 3.实验任务要求: (1)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出‘0’,仿真验证其功能,并下载到实验板测 试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 (2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号, 发光二极管显示输出信号。

北邮小学期AVR单片机电子琴实验报告

小学期AVR单片机实验报告实验题目:基于ATmega16L单片机的电子琴设计 学生姓名:学渣 班级:2012XXXXXX 班内序号:XX 学号:2012XXXXXX 日期:2014年9月30日 同组同学:学渣

目录: 一、实验介绍 (3) 1.1实验课题名称 (3) 1.2实验平台 (3) 1.3实验课题关键字..............................3 1.4实验摘要 (3) 二、小组分工 (3) 三、基本题目训练——流水灯与数码管秒表计时器 (3) 3.1实现功能 (3) 3.2程序代码分析 (4) 3.3实验结果图片 (7) 四、有关发声的基础知识 (7) 五、电子琴的设计与测试 (9) 5.1设计过程 (9) 5.2实验所需元器件 (9) 5.3实验程序主要流程图 (10) 5.4实验原理及原理图 (10) 5.4.1实验原理 (10) 5.4.2原理图 (11) 5.5各个模块的设计与讲解 (11) 5.6程序源代码及程序分析 (14) 5.7实验结果..................................... ..24 六、排错过程............................ . (26) 七、心得体会 (29) 八、参考文献 (32) 九、意见与建议 (33)

一、实验介绍: 1.1实验课题名称:基于ATmega16L单片机的电子琴设计 1.2实验平台:本实验所用平台为AVR Studio 4 1.3实验课题关键字: ATmega16L型单片机电子琴键盘按键 LCD液晶显示屏 1.4实验摘要: 本实验设计的电子琴拥有可视化操作界面,能实现即时弹奏音乐、音乐播放、音乐变速、音乐变调,并可以进行任意长度录音(通过按键记录音阶)等功能 二、小组分工: ●XXX负责电路硬件的连接和报告的撰写 ●XXX负责程序代码的编写 ●XXX负责资料的收集整理和查阅 三、基本题目训练——流水灯与数码管秒表计时器 3.1功能:八盏LED二极管按顺序依次循环点亮,实现流水灯的效果,同时两只数码管分别代表秒和十分之一秒,进行秒表计时,配有

北邮大二下数电实验报告

邮电大学 数字电路与逻辑设计实验 学院: 班级: : 学号: 班序号:

实验一 一、实验名称 Quartus II 原理图输出法设计 (一)半加器 二、实验任务要求 用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。 三、设计思路和过程 ◎设计思路 半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路,是实现两个一位二进制数的加法运算电路。 数据输入:被加数AI、加数BI 数据输出:半加和SO、进位CO ◎设计过程 (1)列出真值表

01 1 0 10 1 0 110 1 *表中两个输入是加数AI和BI,输出有一个是和SO,另一个是进位CO。(2)根据真值表写出输出逻辑表达式 该电路有两个输出端,属于多输出组合数字电路,电路的逻辑表达式如下: AI =。所以,可以用一个两输入异或门和一个两输入与门CO? SO⊕ BI AI =,BI 实现。 ◎实验原理图 四、仿真波形图及分析

根据仿真波形对比半加器真值表,可以确定电路实现了半加器的功能。但我们也可以发现输出SO出现了静态功能冒险,要消除该冒险可以加入相应的选通脉冲。 (二)全加器 二、实验任务要求 用实验容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 三、设计思路和过程 ◎设计思路 全加器与半加器的区别在于全加器有一个低进位CI,从外部特性来看,它

是一个三输入两输出的器件。 ◎设计过程 (1)全加器的真值表如下 *其中AI 为被加数,BI 为加数,CI 为相邻低位来的进位数。输出本位和为SO ,向相邻高位进位数为CO 。 (2)根据真值表写出逻辑表达式: CI BI AI SO ⊕⊕=,BI AI CI BI AI CO ?+?⊕=)( 根据逻辑表达式,可以知道只要在半加器的基础上再加入一个异或门、一个两输入与门和两输入或门即可实现全加器。 ◎实验原理图

电子琴的实验报告

单片机课程设计 设计题目电子琴 指导老师:苏 参与实验者:moxiaoxiao 专业:统本电信0801 地点:3#楼北楼605 电子琴 一.设计目的: (1).培养综合运用知识的能力 (2).朋友查阅资料,使用工程设计标准及编写设计文档的能力. (3).掌握单片机应用系统的设计方法. (4).提高计算机绘图能力 二.设计任务: 利用DP51PROC实验系统上的定时器/计数器,按键和蜂鸣器单元。用单片机I/O 口线控制蜂鸣器发出不同的音调,程序检测按键状态,7个按键中某一键按下时,蜂鸣器对应标称音阶. 三.设计与调试环境 KEIL uVision2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM ,汇编和 C 语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。 1:按下面的步骤建立一个项目: 图1-4 选取芯片 图1-5 新建程序文件 (1)点击图1-5 中的 3 保存新建的程序,也可以用菜单File-Save 或快捷键Ctrl+S 进行保存。因是新文件所以保存时会弹出类似图1-3 的文件操作窗口,我们把第一个程序命名为,保存在项目所在的目录中,这时程序单词有了不同的颜色,说明KEIL 的 C 语法检查生效了。如图1-6 鼠标在屏幕左边的Source Group1 文件夹图标上右击弹出菜单,在这里可以做项目中增加减少文件等操作。我们选“Add File t o Group ‘SourceGroup 1’”弹出文件窗口,选择刚刚保存的文件,按ADD 按钮,关闭文件窗,程序文件已加到项目中了。这时在Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。 图1-6 把文件加入到项目文件组中 编译程序 (2)进入调试模式,软件窗口样式大致如图1-8 所示。图中1 为运行,当程序处于停止状态时才有效,2 为停止,程序处于运行状态时才有效。3 是复位,模拟芯片的复位,程序回到最开头处执行。按

相关文档
最新文档