当前位置:首页 > 简易电子琴的设计7
图4.2 系统流程图
4.4.2发音子程序流程图
电子琴设计的基本目的就是可以弹奏并播放音乐,发音是播放音乐的基础。输入自己想要的音乐音节,初始化8253后读取音节,判断音节的频率,将频率送给扬声器,不同的频率使得扬声器发出不同音色的声音。
结束 图4.3 发音子程序流程图
发音是对扬声器和扬声器连接的检测,如果发音正常,就说明扬声器以及连接都正常,如果不能正常发音,就需检测扬声器以及连接线路。
输出音节 判断音节频率 读取音节 初始化8253 输入音节 开始 4
4.4.3自动演奏流程图
自动演奏是电子琴设计所必须的,自动演奏需要事先在计算机中存储曲谱,将准备工作做好之后,先初始化8253,然后将选择预先存储的曲谱并开始播放,因为音乐播放是音节的顺序读取,所以每个音节读取后在此音节的地址上加一,从而读取下一音节,曲谱播放完之后自动停止。
图4.4 自动演奏流程图
自动演奏功能也是对程序设计的检验,可以提前将手动弹奏可能出现的错误检验出来,从而完善电子琴的设计,是电子琴设计的初步检测。 4.5硬件调试
开始时直接将8253的输出端out2与扬声器相连,连接好硬件后打开电源,发现喇叭一直不停的播放。
分析原因:发现是由于8253的输出端(即OUT2)初状态为高电平,所以当输入扬声器时扬声器就即刻发声。所以将8253的输出端(OUT2)出来接一个非门,再接到扬声器上,使得初始时扬声器为低电平,所以不发声。
5
4.6软件调试
(1)先编写了弹奏程序,发现按按键后,扬声器不会停止发音,会一直以一个特定的(即晶振产生的)频率在发声。为了使它的所有键在低电平时停止发音,我在发音延时后改变8253的方式控制字,是其工作在方式5下,停止了他的发音。再次发音时即又一次对8253进行初始化。
(2)对于一个特定的D/A转换接口电路,CPU执行一条输出指令将数据送入D/A, 即可在其输出端得到一定的电压输出。给D/A转换器输入按正弦规律变化的数据, 在其输出端即可产生正弦波。对于音乐,每个音阶都有确定的频率。
各音阶标称频率值和8253的计数初值:
音阶 低音低音低音中音中音中音中音中音中音中音高音5 6 7 1 2 3 4 5 6 7 1 频率452 535 607 647 722 817 847 977 1107 1245 1311 (HZ) 计数6EH 5DH 52H 4DH 45H 3DH 39H 33H 2DH 28H 26H 初值
不同频率的区别,可通过调节向D/A转换器输出数据的时间间隔,例如:发\1\频率为647HZ,周期为1/647=1.55ms,由于实验箱中的晶振可产生一个为1.8432MHZ的频率。1.8432MHZ/647HZ=2849,即分频数。转化为十六进制的数为:B21H,在经过频率处理,除以25H得到8253的计数初值:4DH。其它的初值的计算同理。
(3)编写完自动播放程序后发现无法用开关控制它的随时播放和停止,一定要唱完一遍后遇到终止符号才能停止。
分析后发现自动播放中应该在每个音播放完后作个开关的判断,决定是否继续
自动播放,从而跳转到不同的情况下,继续执行程序。 判断语句:
IN AL,61H ;判 断k0是否为1,为1继续自动播放,否则停止
CMP AL,01H JNZ A3
6
5芯片清单
表5.1 芯片清单
序号 1 芯片名称 8086微处理器 芯片型号 8086 芯片个数 1 2 可编程计数器/定时器 8253 1 3 可编程并行接口芯片
8255 1 1
共分享92篇相关文档