合肥学院
计算机科学与技术系
课程设计报告
2008~2009 学年第1学期
课学学专指
业导
班教生
姓
程 微型计算机原理与接口技术 名 程柳柳 号 0604031038
级 计算机科学与技术专业(06网工1`) 师 张向东(教授)
课程设计名称 简易电子琴
2009年1月
一、题义分析及解决方案
1.1题义需求分析
想让电子琴弹出美丽的音符,就需要知道它的音阶与内部结构,我们都知道一首音乐是由许多不同的音阶组成的,而每个音阶都对应着不一样的频率,这样我们就可以利用不同频率的组合,组成我们想要的音乐。
1、怎样利用这些频率使蜂鸣器发声呢? 2、怎样演奏一首音乐呢?
3、怎样把演奏的音乐保存起来然后重播呢? 4、怎样预存一首音乐使其播放呢?
1.2解决问题方法及思路
通过按动STAR ES598PCI单板机的G6区的1~7号键,使用单板机上的8255A芯片进行音调的选择,由8253芯片控制产生不同频率的方波,输出到单板机上D1区的蜂鸣器,使其对应于G6区的1~7号键由低到高发出1~7的音阶,并由8255A芯片控制8253芯片的工作状态,使其能够控制蜂鸣器的发声与否,从而实现简易电子琴的演奏功能。同时,在演奏的过程中保存它的频率及计数初值,根据演奏的功能可以实现重播功能。也可以通过事先设置好的“乐谱”回放一段音乐,实现简易电子琴的回放功能。用户可以通过DOS界面下的菜单对电子琴的回放或是演奏或是重播功能进行选择。 1.2.1硬件部分
电子琴的主要的器件有一个并行接口8255和一个8253定时器。输入部分主要是由8个按键、8个发光管和一个并行接口8255组成。8个按键一端接地,另一端接到8255的A口输入,并且通过一个电阻接到+5V,8个发光管一端接地,另一端接到8255的B口输入,并且通过一个电阻接到+5V。因此,在按键按下时,发光管会随着按键进行发亮。在按键不按下时,从8255A口输入的是高电平,当开关按下时,输入的则是低电平。如下表,当不同的开关按下时,从A口输入就对应一个8位的数据。通过软件检测输入的数据,然后给8253送相应频率的计数值。
表1-1编码表 开关 K1 K2 K3 OFBH K4 OF7H K5 0EFH K6 0DF K7 0BFH K8 07FH 对应数据 OFEH OFDH 对应频率 262 294 330 349 392 440 494 静音
电子琴以8253的2号计数器为核心。系统初始化时,2号计数器工作在“方波发生器”方式,CPU通过对定时器的通道2进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,写入顺序为先低后高,端口61H的最低位控制通道2门控的开断,,CLK2为1MHZ,改变2号计数器的计数初值就可以使蜂鸣器发出不同频率的声音。
在送出频率计数值之前,还要给方式寄存器送一个方式值,该数决定对哪一个通道编程,采用什么模式,送入通道的计数值是一字节还是两字节,是二进制码还是BCD码。
芯片8255A的C口工作于基本输出方式下。8255A芯片的C口的引脚PC0连接至8253芯片2号计数器的GATE引脚上,只有当PC0输出高电平至GATE引脚时,8253芯片的2号计数器才正常工作,产生方波,从而使蜂鸣器发出有规则的声音。 1.2.2软件部分
一首乐曲由若干音符组成,一个音符对应一个频率。将与一个频率对应的计数初值写入2号计数器,蜂鸣器就会发出相应的音调,计数初值的计算公式如下:计数初值=1000000÷输出频率,1MHZ转换成十六进制数为3E8H。
程序设计有DOS下的功能选择界面,当用户选择演奏时,程序根据G6区1~7号按键输入到8255A芯片A口中的8位二进制数进行判断并将对应的计数初值存入8253 芯片2号计数器中,由8253芯片根据计数初值产生相应的频率,输出到D1区的CTRL口中,从而使蜂鸣器发出有规律的乐声。当用户选择回放功能时,程序会根据事先设计好的“乐谱”进行演奏,其工作原理与用户演奏的工作原理相同,只是程序进行频率判断的数据不是由用户实时输入,而是根据“乐谱”中存有的数据进行音阶的判断并对8253芯片2号计数器的计数初值进行修改。当用户选择重放功能时,只需保存演奏时的计数初值与频率,然后其工作原理与回放功能类似了。
一、 硬件设计
2.1选择芯片8253
2.1.1芯片8253在本设计中的作用
芯片8253在本实验中主要用于输出规定频率的方波,控制蜂鸣器发出规定频率的声音。