当前位置:首页 > 微机原理课程设计 - 图文
8
2.演奏单音符
8254芯片(口地址为06c0H—06c6H)的0号计数器工作在方式3作为频率发生器发出 方波。每一个音符对应一个频率,将与一个频率对应的计数初值写入0号计数器, 扬声器就可以发出相应的音调。由于本实验采用的时钟是8086CPU时钟,其频率可选 为1MHZ。故计数初值的计算公式如下: 计数初值=1M/输出频率
1MHZ转换为16进制数为0F4240H,因此在打开扬声器的情况下执行以下子程序即可 发出与输 出频率对应的音调。 MOV DX,0FH MOV AX,4240H DIV WORD PTR [SI] MOV DX,MY8254_COUNT0 OUT DX,AL MOV AL,AH OUT DX,AL 3 .演奏时间控制
通过控制每个音符的演奏时间可以使乐曲更加有节奏感。最直观的方法是按照乐谱为, 每一个音符规定一个演奏时间,但是利用这种方法调试程序特别困难。特别是在遇到一首不熟 悉的歌曲时,初期很难确定每个音符的演唱时间,而调试程序的时候费时费力,效果很差。我们可以利用另外一种方法,即为每个音符规定一个“单位时间”。
单位时间×N=音符的演唱时间
其中,N为调试参数,一首歌曲只有一个调试参数,它为常数。由于每个音符的节奏(即演唱时间)不同,所以各个音符的“单位时间”都不一样。 每个音符演奏的 “单位时间”的确定:
我们知道,音符的节奏分为一拍、半拍、1/4拍、1/8拍等等。如果在一首歌中,所有音符中演奏时间最短的为1/8拍,我们就规定1/8拍音符的 “单位时间”为1,1/4拍音符的“单位时间”为2,半拍音符的“单位时间”为4,一拍音符的“单位时间” 为8。
调试参数N的确定:显然,如果能测出一段乐谱的总的时间t,用T(i)来表示第i个
8
9
音符的“单位时间”,那么: N=
t?T(i)i
4. 频率表和时间表
设计程序时,数据段设这两张 “表”,一张是频率表,将与音符对应的频率值依次写入 表中,另一张是时间表,依次存放每个音符的单位时间。当然频率表项和时间表项要一一对应,不能错位,频率表的最后一个表项为0,1,2,作为重复演唱或者跳转演唱的标志。在接通扬声器的情况下,依次取出频率表中的频率值,转换成计数初值写入0号计数器,依次取出时间表中的单位时间和调试参数N相乘,然后再调用延时子程序即可得到延时时间也就是音符的演奏时间。
四.设计总框图
系
统总线
五、程序流程图及接线图
(1). 流程图
9
10
8254 工作方式 初始化 初始化8255工作方式 开始 装入频率表和时间表起始地址 读A口开关状态 Y 歌曲1地址 A口=0? N Y 歌曲2地址 A口=1? Y N 歌曲3地址 A口=2? N 取出频率值计算出计数初值 并装入计数器1 取出演奏相对时间值调用延时子程序 原状态等于现状态 原状态不等于现状原开关状态与现状态比较 两个指针递增 否 是否到曲末? 是 1
0 11
(2).接线图
(3)实物接线图
11
共分享92篇相关文档