基于PC机的电子琴设计实验指导书一、实验目的
1.掌握利用pc机扬声器发岀声音的方法.
2.学习利用系统功能调用从键盘上读取字符的方法.
二、实验内容与要求
利用PC机和扬声器实现简易电子琴的功能.
1.基本要求
(1)电了琴功能編写程序,程序运行时使pc机成为一架可弹奏的“钢琴“.当按下PC机键盘数字键1-8时,依次发出1,2,3,4,5,6,7,i八个音调.
⑵音乐盒功能,内部存储至少2首以上的乐曲,根据菜单选择播放.
2.提高要求
(1)使一组放光二极管随音调变化而改变,实现音乐彩灯(2)能够实现高、屮、低音的选择.
(3)能够存储弹奏的内容,进行冋放.
三、实验报告要求
1.设计目的和内容
2.总体设计
3.硬件设计:原理图(接线图)及简要说明
4.软件设计框图及程序清单
5.设计结果和体会(包括遇到的问题及解决的方法)
四、设计原理
要使扬声器发出不同的音调,就得输入不同频率的波形.通过给8253定时/计数器装入不同的计数值,可以使其输出不同频率的方波.经过放大器的放大作用,便可驱动扬声器发出不同的音调,只要插入一段延时程序之后,再将扬声器切断,音调的声音就可以持续一端时间.
通过计算机的不同按键输出不同的音调,需要使用系统调用功能以接收键入字符,并且要建立一张表,使键入字符与频率构成一个对应关系.
按键12345 67 8
音符12345 67 1
频率值524588 660 698 784 880 9881048
乐曲是由不同的频率和节拍的音调组成的,因此控制驱动脉冲的频率和持续时间就是编码乐1川程序的关键濒率对应8253的计数初值,而兀Illi屮的节拍决定了各音频持续的时间.
五、总体设计
1. 用PC机的键盘数字键对应电了琴的8个琴键.
2.8255和8253配合构成音频发生器.8255的PA0口控制扬声器的开关,8253控制扬声器的发
声频率.
3.音频信号经LM386放大后,驱动扬声器.
4.系统运行时,首先显示主菜单,选择子菜单后进行相应的操作.
六、硬件设计
利用实验板上的8253计数/定时器和8255并行接口,定时器8253利用工作方式3产生一定频率信号,通过可编程的并行外囤接口芯片8255控制频率信号的通断.
8255的A 口设置为输岀,8255的A口的低两位用来控制扬声器驱动,当输出端口的PA0位为**1”或为“0“时,将使控制驱动器的与门电路接通或关闭,使8253所发出的音频信号能到达驷动器或被阻断.这样通过控制PA0的变化,可使扬声器接通和断开,控制扬声器是否能发出声音.此外,通过控制PA0的通断时间,就能发出不同的音长.8255的PA1位为T时,控制8253定时
器产生驱动扬声器发声的音频信号,该位为”0“则不发信号.8253有三个定时器,分为0号、1号和2号定时器,驷动扬声器的是0号定时器,该定时器T作在方式3,是一个频率发生器,它负责向扬声器发送指定频率的脉冲信号.当8255的PA0和PA1都为1时$253发出指定频率的声音信号的前提下,声音信号通过与门到达驱动器驱动扬声器发声.
硬件原理图如图1所示:
图1硬件原理图
扬声器驱动电路如图2所示.
图2扬声器驱动电路
七、软件设计
系统要求实现2个功能,电了琴和音乐盒的功能.两者发声的方法一样,只是一个数据是从键盘读取的,另一个是已经保存好的数据.首先我们可以用一个子稈序实现单个音调的产生,对8253输入不同的计数初值生成不同频率的波形,然后延时一段时间.电子琴稈序主要是读取键盘按键,根据键值产生不同的音调即可.而乐曲的播放先将乐曲的音符编码表和节拍编码表建立好的,然后在播放时读取数据.
1.单音调了程序SOUND
单音调了程序的调用前需要进行以下儿个方面工作:
1)确定相应的音调所对应的频率,杳表可以得到,再由频率得到对应的8253计数初值.2)确定音长,即一个音符所持续的时间.
在单音调了程序屮实现发出一个音符的声音,持续所需的时间,流程图如图3所示:图3单音调了稈序流程图
2. 电子琴稈序
单,若是就根据键值杳表找出相丿、'、Z的频率,计算初值,调川发音了程序即可,此时的音
由于是用键盘的数字键1■&要先读取键盘的输入,判断输入是否在1・8之间,不在就退到主菜
长固定.初值的计算方法是用输入的elk频率除以音符的频率.程序流程图如图4所示.
图4电了琴稈序流稈图
3.音乐盒程序
音乐盒的乐曲播放程序屮需要有两组数据支持:一纽•是频率数据,一组是节拍时间数据.音符的频率可以通过简谱从频率表中杳得.节拍时间就是音符的持续时间,取决于乐1111的速度和每个音符的节拍数据•如4/4(四四拍)屮,每小节包括4拍,全音符持续4拍,二分音符持续2拍,四分音符持续一拍,八分音符持续半拍等.
有了音调与频率和时间的关系后,就可以按照乐曲的曲谱将每个音符的频率和持续的时间定义成两组数据表,然麻编穆依次取岀表屮的频率值和节拍值,调川单音调了程序就可依次产生务个音调,播放出乐曲.
在程序屮存储几个乐曲数据,根据音乐盒了菜单选择相丿应的乐曲演奏,读取对应的数据输出.
乐1111《两只老虎》的简谱如下:
两只老虎
1=C 4/4
1231112311345・丨
345 -13 113 11
2 5 1-12 5 1 ・丨
对应的频率数据表Freq、节打I数据表Time如下:
TWOTIGERS.FREDW 2 DUP(524,588,660,524,0);乐曲的频率表
DW2 DUP(660,69&784,0)
DW2 DUP(784,880,784,698,660,524,0)
DW2 DUP(588,392,524,0),1
TWOT1GERS_TIMEDW 10 DUP( 100),200,10(), 100,200 ;乐曲的时间表
DW2 DUP(50,50,50,50,100,100)
DW2DUP(100,100,200)
其他斥Illi的数据将频率数据表F「eq、节拍数据表Time和乐曲名修改就可以实现其他斥Illi的
播放.