1、一、设计目的通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。二、设计的原始资料及依据查阅可编程并行芯片8254或其他相关资料。用定时/计数器,配合延时和控制程序控制扬声器发声(演奏音乐),彩灯随频率变化亮灭。 三、设计的主要内容及要求内容:利用定时/计数器8254实现音乐演奏。要求:(1)配合延时和控制程序控制扬声器发声(演奏音乐)。 (2)彩灯随频率变化亮灭。四、对设计说明书撰写内容、格式、字数的要
2、求 1.课程设计说明书(论文)是体现和总结课程设计成果的载体,一般不应少于3000字。2.学生应撰写的内容为:目录、正文、参考文献等。课程设计说明书(论文)的结构及各部分内容要求可参照沈阳工程学院毕业设计(论文)撰写规范执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。3.说明书(论文)手写或打印均可。手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时按沈阳工程学院毕业设计(论文)撰写规范的要求进行打印。4. 课程设计说明书(论文)装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。五、 设计完成后应提交成果的种类、数量、质量等方面的要求;提交课程设计说明书一份。在说
3、明书中要有设计原理、硬件电路接线图、设计的程序及必要注释等。六、时间进度安排;顺序阶段日期计 划 完 成 内 容备注11.5天查阅资料及程序设计22.5天上机调试程序30.5天成绩评定40.5天书写报告沈 阳 工 程 学 院微机原理及应用课程设计成绩评定表系(部): 电气工程系 班级: 发电本091 学生姓名: 黎世华 指 导 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分调研论证能独立查阅文献,收集资料;能制定课程设计方案和日程安排。0.15432工作能力态度工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作, 0.25432工作量按期圆满完成规定的设计任务,工作量
4、饱满,难度适宜。0.25432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0.55432指导教师评审成绩(加权分合计乘以12) 分加权分合计指 导 教 师 签 名: 年 月 日答 辩 小 组 意 见评价内容具 体 要 求权重评 分加权分报告内容思路清晰,语言表达准确,概念清楚,论点正确;分析归纳合理;结论严谨;设计具有应用价值。0.25432答辩回答问题有理论根据,基本概念清楚。主要问题回答准确、深入。0.55432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备
5、,书写工整规范。0.35432评阅教师评审成绩(加权分合计乘以8)分加权分合计评 阅 教 师 签 名: 年 月 日课 程 设 计 总 评 成 绩分摘要微机原理是一门非常重要的计算机技术基础课程,全面介绍微机的基本结构、工作原理、硬件配置、接口期间和接口种类等。本次微机接口课程设计的主要目的是要使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。在本次课程设计中大家利用课上所学的各种知识,对自己的课程设计题目进行设计。
6、我们小组所要设计的题目是音乐霓虹灯程序设计。在设计的过程中主要利用计数器/定时器8254芯片和可编程并行接口8255A芯片,完成2个开关选择歌曲,能用扬声器播放歌曲,并且能有彩灯亮的个数来反映歌曲的频率。首先我们利用定时器产生各种频率的声音,如“DO”“RE”“ME”然后将各个单音连接起来就组成了一首简单的曲子或者旋律,旋律及拍数可以按音乐简谱而定。对8255芯片PA0和PA1口的置0和1来选择歌曲。其次实现唱歌功能即实现歌曲的节拍通过调用延时子程序控制音符发音的长短,实现连续发声把SI是否为0作为循环的条件在每一次扬声器发出一个相应音符之后做无条件转移,从而使扬声器连续发声,发光二级管跟着歌
7、曲频率的变化改变亮灭的个数。关键字 : 音乐播放器、可编程并行接口8255A芯片、计数器/定时器8254I 目录摘要I1 设计原理说明11.1 设计原理11.2 设计环境及设备21.3 硬件接线图21.4 设计流程图22 主要芯片介绍42.1 8254芯片42.1.1 定时/计数器825442.1.2 8254内部结构42.1.3 8254外部引脚52.1.4 计数器内部结构62.1.5 8254端口地址72.1.6 8254功能72.1.7 8254控制字72.1.8 8254工作方式82.2 8255芯片92.2.1 8255外部引脚功能92.2.2 8255内部结构102.2.3 825
8、5控制字112.2.4 8255三种工作方式122.2.5 8255A的端口地址142.3 发光二极管142.3.1 发光二极管介绍142.3.2发光二极管的分类143 具体模块设计153.1频率产生模块153.2 控制模块153.3 控制音符的演奏时间163.4 音符频率表163.5 控制二极管的亮灭模块173.5.1 音乐与所设频率进行比较来调用程序183.5.2 控制彩灯所亮个数的程序18总结20致谢21参考文献22附录232沈阳工程学院微机原理及应用课程设计1 设计原理说明1.1 设计原理我们在这次课设选择了音乐霓虹灯程序设计,音乐霓虹灯程序设计可以实现两首歌的可选择播放。对于歌曲的播
9、放我们采用的是计数器/定时器8254芯片,而对于选择哪首歌播放则是利用可编程并行接口8255A芯片来实现的。所有音乐都是由各个不同频率的音阶和其延续时间的长短来实现的。不同的音乐是由各个音阶按某种排列各自播放一定时间形成的,将各音乐音阶和其延续时间存在数据段中,然后根据不同按键值选择不同的音阶和时间表,再使用计数器产生该音阶频率。CPU通过对定时器的通道2(端口地址为42)进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,端口61H的最低控制通道2门控的开断。以产生特殊的音响。当定时器接收的计数值为533H时,能产生896Hz的声音,因此产生其他频率的计数值就可算出来:533Hz8
10、96频率=1234DC频率。将频率的计数值在最大和最小之间取出七个值,由这七个值写出七个比较语句,从大频率开始,只要频率计数值大于其中一个值,就执行这个语句所调用的语句。调用的语句是通过控制8255芯片C端口的输出量,来控制二极管应该亮几个,那几个该亮。执行我这语句之后强行跳到音乐播放程序。在送出频率计数值之前,还要给方式寄存器送一个方式值,该数决定对哪一个通道编程,采用什么模式,送入通道的计数值是一字节还是两字节,是二进制码还是BCD码。其位组合的格式如下:当通道2用于发声时,采用的是模式3,在模式3下,输出线为“1”和为“0”的时间各占计数时间的一半,因而产生一系列间隔均匀的脉冲。基于82
11、54定时计数接口芯片的工作原理,本次课设实现了音乐霓虹灯演奏系统程序设计。当运行程序时,扬声器便发出优美的音乐。首先要解决发声并发出相应音符声音的问题,由8254计数器0在初始化时用来产生一定频率的方波来使扬声器发声,再根据不同音符对应的频率写入计数初值发出相应的音符声。对8255芯片PA0和PA1口的置0和1来控制播放音乐1还是音乐2,B端口的PB0和PB1接到二极管上来显示只是播放的是音乐1还是音乐2,C端口的PC0到PC7接到二极管上来显示频率的高低。其次实现唱歌功能即实现歌曲的节拍通过调用延时子程序控制音符发音的长短,实现连续发声把SI是否为0作为循环的条件在每一次扬声器发出一个相应音
12、符之后做无条件转移,从而使扬声器连续发声。1.2 设计环境及设备PC机一台、windows 98系统、实验箱,导线若干。8254定时器:用于产生秒脉冲。8255并口:用做接口芯片,A端口的PA0和PA1接到开关上;B端口PA0和PB1接到二极管上;C端口接到二极管上。1.3 硬件接线图硬件接线图如图2.1所示。图2.1 硬件接线图1.4 设计流程图软件流程图如图2.2所示。图 2.2 软件流程图262 主要芯片介绍2.1 8254芯片2.1.1 定时/计数器8254 在微机及控制系统中,经常要用到定时信号。如系统的日历时钟,动态存储器刷新。对外部执行机构控制时也需要定时中断、定时检测、定时查询
13、等。定时的方法主要是两种:软件定时:利用指令的执行时间设计循环程序,使CPU 执行延迟子程 序的时间就是定时时间。缺点:执行延迟时,CPU 一直被占用,降低了CPU 的效率。硬件定时:用计数器/定时器作为主要硬件,在软件简单指令的控制下产生精确的时间延迟。突出优点为计数时不占用CPU 时间,如利用定时器/计数器产生中断信号,可建立多作业环境,提高了CPU 效率。主要功能: 每片上有3 个独立的16 位的减计数器通道。 对于每个计数器,都可以单独作为定时器或计数器使用,并且都可以按照二进制或十进制来计数。 每个通道都有6 种工作方式,都可以通过程序设置或改变。 每个计数器的速率可高达2MHz。最
14、高的计数时钟频率为2.6MHz。2.1.2 8254内部结构8254的内部结构如图2.1所示,它主要包括以下几个主要部分:图 2.1 8254的内部结构 数据总线缓冲器实现8254与CPU数据总线连接的8位双向三态缓冲器,用以传送CPU向8254的控制信息、数据信息以及CPU从8254读取的状态信息,包括某时刻的实时计数值。 读/写控制逻辑控制8254的片选及对内部相关寄存器的读/写操作,它接收CPU发来的地址信号以实现片选、内部通道选择以及对读/写操作进行控制。 控制字寄存器在8254的初始化编程时,由CPU写入控制字,以决定通道的工作方式,此寄存器只能写入,不能读出。 计数通道0#、1#、
15、2#:这是三个独立的,结构相同的计数器/定时器通道,每一个通道包含一个16位的计数寄存器,用以存放计数初始值,一个16位的减法计数器和一个16位的锁存器,锁存器在计数器工作的过程中,跟随计数值的变化,在接收到CPU发来的读计数值命令时,用以锁存计数值,供CPU读取,读取完毕之后,输出锁存器又跟随减1计数器变化。2.1.3 8254外部引脚8254芯片是具有24个引脚的双列直插式集成电路芯片,其引脚分布如图所示。8254芯片的24个引脚分为两组,一组面向CPU,另一组面向外部设备,各个引脚及其所传送信号的情况,介绍如下: D7D0:双向、三态数据线引脚,与系统的数据线连接,传送控制、数据及状态信
16、息。 :来自于CPU的读控制信号输入引脚,低电平有效。 :来自于CPU的写控制信号输入引脚,低电平有效。 :芯片选择信号输入引脚,低电平有效。图2.2 8254的引脚 A1、A0:地址信号输入引脚,用以选择8254芯片的通道及控制字寄存器。 VCC及GND:+5V电源及接地引脚 CLKi:i=0,1,2,第i个通道的计数脉冲输入引脚,8254规定,加在CLK引脚的输入时钟信号的频率不得高于2.6MHZ,即时钟周期不能小于380ns。 GATEi:i=0,1,2,第i个通道的门控信号输入引脚,门控信号的作用与通道的工作方式有关。 OUTi:i=0,1,2,第i个通道的定时/计数到信号输出引脚,输
17、出信号的形式由通道的工作方式确定,此输出信号可用于触发其它电路工作,或作为向CPU发出的中断请求信号。2.1.4 计数器内部结构每个计数器由一个16位可预置的减1计数器组成,计数初值可保存在16位的锁存器中,该锁存器只写不能读。在计数器工作时,初值不受影响,以便进行重复计数。图中每个计数器有一个时钟输入端CLK作为计数脉冲源, 计数方式可以是二进制,计数范围110000H,也可以是十进制,计数范围165536。门控端GATE用于控制计数开始和停止。输出OUT端当计数器计数值减到零时,该端输出标志信号 。图2.3 计数器内部结构2.1.5 8254端口地址表2.1 8254端口地址2.1.6 8
18、254功能8254既可作定时器又可作计数器: 计数: 计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK 脉冲对计数值进行减1 计数,每来一个脉冲减1,当计数值减至0时,由OUT 端输出一个标志信号。 定时: 计数器装入初值后,当GATE为高电平时,由CLK 脉冲触发开始自动计数,当计数到零时,发计数结束定时信号。除上述典型应用外,8254还可作频率发生器、分频器、实时钟、单脉冲发生器等。2.1.7 8254控制字图2.4 8254控制字说明 : 8254每个通道对输入CLK按二进制或二十进制从预置值开始减1计数,减到0时从OUT输出一个信号。 8254编程时先写控制字,再写时间常
19、数。2.1.8 8254工作方式 方式0:计数结束产生中断方式当写入控制字后,OUT变为低电平,当写入初值后立即开始计数,当计数结束时,变成高电平。 方式1:可编程单次脉冲方式当初值装入后且GATE由低变高时,OUT变为低电平,计数结束变为高电平。 方式2:频率发生器方式当初值装入时,OUT变为高;计数结束,OUT变为低。该方式下如果计数未结束,但GATE为低时,立即停止计数,强制OUT变高,当GATE再变高时,便启动一次新的计数周期。 方式3:方波发生器当装入初值后,在GATE上升沿启动计数,OUT 输出高电平; 当计数完成一半时,OUT输出低电平。图2.5 方波图方式3与方式2的工作方式类
20、似,也是在初始化完成后能重复循环计数,只是输出的波形不同。计数过程当把方式3的控制字写入控制字寄存器后,输出端OUT变成高电平,作为初始电平。再将计数初值写入计数初值寄存器CR中,再经过一个时钟周期,计数初值被移入计数执行单元CE中,从下一个时钟脉冲开始作减1 计数,方式3的计数过程分为两种情况:第一种情况:计数初值为偶数,当作减1计数减到N/2时,输出端OUT端变成低电平,减到0时,输出端OUT变成高电平,并重新从初值开始新的计数过程。若GATE为高电平,则一直重复同样的计数过程。可见,输出端OUT输出连续的方波,故称方波发生器。第二种情况:计数初值为奇数,当作减1计数减到(N+1)/2以后
21、,输出端OUT变成低电平,减到0时,输出端OUT又变成高电平。并重新从初值开始新的计数过程。这时输出端的波形为连续的近似方波。门控信号的影响工作在方式3时,门控信号GATE的功能与工作方式2一样,即GATE 为高电平时,允许计数;GATE为低电平时停止计数。GATE引脚上的信号从低电平跳到高电平时,将会重新把计数初值寄存器CR中的内容移入计数执行单元CE中,并以新装入的值重新开始计数。新的计数初值对计数过程的影响如果在计数过程中写入新的初值,而GATE信号一直维持高电平,则新的初值不会影响当前的计数过程,只有在计数结束后的下一个计数周期,才按新的初值计数。若写入新的初值后,遇到门控信号的上升沿
22、,则结束现行的计数过程,从下一个时钟脉冲下降沿开始按新的计数初值进行计数。可见,工作在方式3时,当计数初值为偶数,OUT端输出连续的标准方波;当计数初值为奇数,在每个计数周期内,有(N+1)/2个周期输出高电平,(N-1)/2个时钟周期输出低电平,OUT端输出连续的近似的方波。2.2 8255芯片2.2.1 8255外部引脚功能图2.6 8255外部引脚图可编程并行接口8255芯片的外部引脚图如图2.6所示。 PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。 PC
23、0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。 RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。 RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。 WR:写入
24、信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。 D0D7:8255的数据线。8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 2.2.2 8255内部结构图2.7 8255的内部结构图可编程并行接口8255芯片的内部结构图如图2.7所示。 输入/输出端口A、B、C 。这三个端口均可看作是I/O端口,但它们的结构和功能也稍有不同。A口和B口是一个独立的8位I/O口。C口:可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。 A组和B组控制电路。这是两组根据CPU命令控制825
25、5A工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255A的工作方式,也可以根据编程命令来对C口的指定位进行置/复位的操作。A组控制电路用来控制A口及C口的高4位;B组控制电路用来控制B口及C口的低4位。 读/写控制逻辑,它负责管理8255A的数据传输过程。它接收CS*及RD*、WR*、RESET,还有来自系统地址总线的口地址选择信号A0和A1。将这些信号组合后,得到对A组控制部件和B组控制部件的控制命令,并将命令发给这两个部件,以完成对数据、状态信息和控制信息的传输。 数据总缓冲器,它是8位的双向的三态缓冲器。作为8255A与系统总线连接的界面,输入/输
26、出的数据,CPU的编程命令以及外设通过8255A传送的工作状态等信息,都是通过它来传输的。2.2.3 8255控制字1 工作方式选择控制字它可以使8255的三个端口工作于不同的工作方式,如图2.8所示的8255控制字。图 2.8 8255的控制字图当控制字bit=7时,控制字的bit6bit3这4位用来控制A组,A口的8位和C口的高4位,而控制字的低3位bit2bit0用来控制B组,包括B口的8位和C口的低四位。三种工作方式的描述如下: 方式0基本输入/输出方式; 方式1选通输入/输出方式; 方式2双向传送方式。2 C口按位置位/复位控制字8255的C口具有位控功能,即端口C的8位中的任一位都
27、可通过CPU向8255的控制寄存器写入一个按位置位/复位控制字来置1或清0,而C口中其他位的状态不变。其格式注意8255的C口按位置位/复位控制字的最高位D7(特征位)应为低电平。如图2.9所示C口按位置位/复位控制字格式。图 2.9 C口按位置位/复位控制字2.2.4 8255三种工作方式8255可编程外围接口芯片是通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0基本输入/出方式 方式1选通输入/出方式 方式2双向选通工作方式(一) 方式0基本输入/输出 在此工作方式下,每个口都作为基本的输入输出口,C口的高4位和低4位以及A口和B口都
28、可独立地设置为输入口和输出口(如表1所示)。在此工作方式下:输出的数据被锁存,而输入的数据不被锁存。方式0基本功能是基本输入输出方式。其功能如下: 进行数据传送时不需要联络信号。 任一设置成方式0的端口均可设置成输入或输出。 输出具有锁存功能。 输入没有锁存功能。 每一个8位口和4位口均可设置成方式0。如果所有的8位口和4位口都设置成方端口是否具有锁存功能是需要注意的。如果具有锁存功能,则8255A可作为CPU与外设之间数据传送的中转站。这时,CPU与外设之间数据传送是异步的。如果没有锁存功能,则8255A作为数据通道,仅起单向三态门的作用。这时,CPU与外设之间数据传送是同步的。方式0的输出
29、具有锁存功能,而输入没有锁存功能。表3.11 8255在方式0下的输入输出组合序号控制字A口(PA0-PA7)C口(PC4-PC7)B口(PB0-PB7)C口(PC0-PC3)180H入入入入281H入入入出382H入入出入483H入入出出588H入出入入689H入出入出78AH入出出入88BH入出出出990H出入入入1091H出入入出1192H出入出入1293H出入出出1398H出出入入1499H出出入出159AH出出出入169BH出出出出(二) 方式1选通输入/输出在工作方式下,三个端口分为A、B两组,A、B两个口仍用作数据输入输出口,而C口分成两部分,分别作为A口和B口的联络信号。在82
30、55A中,联络信号是3位,两个数据口,共用去C口的6位,剩余的两位仍可作为数据位使用。(三) 方式2双向选通输入/输出此工作方式只限于A组使用,它用A口的8位数据线,用C口的5位进行联络。工作时输入输出都能被锁存。当A口工作在方式2时,B口可以在方式0或方式1工作。在模拟霓虹灯的设计中只用到了工作方式0,如表3.1所示。工作方式0: 又称为基本工作方式。在此方式下,可分别将A口的8条线,B口的8条线,C口高4位对应的4条线和C口的低四位对应的四条线定义为输入或输出。故它们的输入输出共有16种不同的组合。8255的数据线、片选信号线、地址线、读写控制线等分别与系统总线相连,其中A、B、C三个端口
31、以排针形式引出,供实验使用。并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位或32位等。2.2.5 8255A的端口地址 表2.2 8255的端口地址信号线寄存器编 址IOY3A口06C0HB口06C2HC口06C4H控制寄存器06C6H2.3 发光二极管2.3.1 发光二极管介绍发光二极管的作用发光二极管(LED)是一种由磷化镓(GaP)等半导体材料制成的。能直接将电能转变成光能的发光显示器件。当其内部有一定电流通过时,它就会发光。发光二极管也与普通二极管一样由PN结构成,也具有单向导电性。它广泛应用于各种电子
32、电路。家电。仪表等设备中。作电源指示或电平指示。2.3.2发光二极管的分类 1发光二极管的分类发光二极管有多种分类方法。按其使用材料可分为磷化镓(GaP)发光二极管。磷砷化镓(GaAsP)发光二极管。砷化镓(GaAs)发光二极管。磷铟砷化镓(GaAsInP)发光二极管和砷铝化镓(GaAlAs)发光二极管等多种。按其封装结构及封装形式除可分为金属封装。陶瓷封装。塑料封装。树脂封装和无引线表面封装外,还可分为加色散射封装.无色散射封装.有色透明封装和无色透明封装。2.按其封装外形可分为圆形。方形。矩形。三角形和组合形等多种。塑封发光二极管按管体颜色又分为红色。琥珀色。黄色。橙色。浅蓝色。绿色。黑色
33、。白色。透明无色等多种。而圆形发光二极管的外径从¢2¢20mm,分为多种规格。按发光二极管的发光颜色又可人发为有色光和红外光。有色光又分为红色光。黄色光。橙色光。绿色光等。另外,发光二极管还可分为普通单色发光二极管。高亮度发光二极管。超高亮度发光二极管。变色发光二极管。闪烁发光二极管。电压控制型发光二极管。红外发光二极管和负阻发光二极管等。3普通单色发光二极管普通单色发光二极管具有体积校工作电压低。工作电流校发光均匀稳定。响应速度快。寿命长等优点,可用各种直流。交流。脉冲等电源驱动点亮。3 具体模块设计3.1频率产生模块所有音乐都是由各个不同频率的音阶和其延续时间的长短来实
34、现的。不同的音乐是由各个音阶按某种排列各自播放一定时间形成的,将各音乐音阶和其延续时间存在数据段中,然后根据不同按键值选择不同的音阶和时间表,再使用计数器产生该音阶频率。而我们学过的有计数器可以产生各种频率,所以我们主要采用计数器8254产生各音符,用8255并行接口来控制,达到播放音乐的功能。所有音乐都是由各个不同频率的音阶和其延续时间的长短来实现的。不同的音乐是由各个音阶按某种排列各自播放一定时间形成的,将各音乐音阶和其延续时间存在数据段中,然后根据不同按键值选择不同的音阶和时间表,再使用计数器产生该音阶频率。CPU通过对定时器的通道0进行编程,使其I/O寄存器接收一个控制声音频率的16位
35、计数值。以产生特殊的音响。当定时器接收的计数值为533H时,能产生896Hz的声音,因此产生其他频率的计数值就可算出来:533Hz896频率=1234DC频率在送出频率计数值之前,还要给方式寄存器送一个方式值,该数决定对哪一个通道编程,采用什么模式,送入通道的计数值是一字节还是两字节,是二进制码还是BCD码。其位组合的格式如下:产生指定频率声音的程序段如下: PLAY:MOV DX,0FH MOV AX,4240H DIV WORD PTR SIMOV DX,MY8254_COUNT0OUT DX,ALMOV AL,AHOUT DX,AL3.2 控制模块对8255芯片PA0和PA6口的置0和1
36、来选择歌曲。其次实现唱歌功能即实现歌曲的节拍通过调用延时子程序控制音符发音的长短,实现连续发声把SI是否为0作为循环的条件在每一次扬声器发出一个相应音符之后做无条件转移,从而使扬声器连续发声。3.3 控制音符的演奏时间控制音符的演奏时间,是设计音乐程序的关键问题。最直观的方法是按照按照乐谱为每一个音符规定一个演奏时间,但是利用这种方法是调试程序特别困难。特别是在遇到一首不熟悉的歌曲时,初期很难确定每一个音符的演唱时间,而调试程序的时候费时费力,效果很差,下面,我么么向读者推荐一个记号的方法,即没一个音符规定一个“单位时间”。 单位时间*N=音符的演唱时间其中N为调试参数,一首歌只有一个调试参数
37、。设计程序时用EQU伪指令定义调试参数,初值先行估计,调试时再修改它。如何确定每个音符的演奏时间呢?我们知道,音符的节奏分为一拍、半拍、1/4拍、1/8拍等等。如果在一首歌曲中,音符演奏的时间最短为1/8拍,我们就规定一拍音符的单位时间为8,半拍音符的单位时间为4,1/4拍音符的单位时间为2,1/8拍音符的单位时间为1。以“友谊地久天长”这首歌为例,最短音符为1/8拍,我们就定义一个单位时间为8。所示,途中第一行是一段曲谱,第3行是相应音符的单位时间,编程时,首先将一个音符的频率转化成计数初值写入2号计数器,然后将音符的单位时间乘以调试参数N,在调用延时子程序,就可以控制音符的演奏时间了,调试
38、时,只需改变调试参数N即可。3.4 音符频率表音符频率表如下表所示:表 4.1 音符频率表 音符音调 A B C D E F G221 248 278 294 330 371 416248 278 312 330 371 416 467131 147 165 175 196 221 248147 165 185 196 221 248 278165 185 208 221 248 278 312175 196 221 234 262 294 330196 221 248 262 294 330 371表 4.2 音符频率表 音符音调 1 2 3 4 5 6 7 A B C D E F G 44
39、1 495 556 589 661 742 833 495 556 624 661 742 833 935 262 294 330 350 393 441 495 294 330 371 393 441 495 556 330 371 416 441 495 556 624 350 393 441 467 525 589 661 393 441 495 525 589 661 742表 4.3 音符频率表 音符音调 A B C D E F G 882 990 1112 1178 1322 1484 1665 990 1112 1248 1322 1484 1665 1869 525 589 6
40、61 700 786 882 990 589 661 742 833 882 990 1112 661 742 833 882 990 1112 1248 700 786 882 935 1049 1178 1322 789 882 990 1049 1178 1322 1484 编程产生各种音符的频率可参照此表。具体实现时由于各计算器的速度不同,乐曲演奏的速度存在差异,所以可以适当的调整延迟子程序的时间参数。3.5 控制二极管的亮灭模块 通过频率产生模块产生的频率与设置的频率的比较来控制二极管所亮的个数,把频率产生模块的频率分为了8段,频率每增加一个段,二极管就多亮一个。 3.5.1 音乐与
41、所设频率进行比较来调用程序 CMP AX,0D02H JAE PA8 CMP AX,9C4H JAE PC7 CMP AX,7D0H JAE PC6 CMP AX,628H JAE PA5 CMP AX,594H JAE PC4 CMP AX, 4E2H JAE PC3 CMP AX,480H JAE PC2 JB PC13.5.2 控制彩灯所亮个数的程序PC1: MOV AL,01H MOV DX, MY8255_COUNT2 OUT DX, AL CALL DALLY1 JMP PLAY1PC2: MOV AL,03H MOV DX, MY8255_COUNT2 OUT DX,AL CAL
42、L DALLY1 JMP PLAY1PC3: MOV AL,07H MOV DX, MY8255_COUNT2 OUT DX,AL CALL DALLY1 JMP PLAY1PC4: MOV AL,0FH MOV DX, MY8255_COUNT2 OUT DX,AL CALL DALLY1 JMP PLAY1PC5: MOV AL,1FH MOV DX, MY8255_COUNT2 OUT DX,AL CALL DALLY1 JMP PLAY1PC6: MOV AL,3FH MOV DX, MY8255_COUNT2 OUT DX,AL CALL DALLY1 JMP PLAY1PC7: MOV AL,7FH