4。 进行实物的制作并调试运行。
2 总体设计方案
2。1 设计要求
本设计基于 STC89C51 单片机为核心控制元件,设计一个微型声光电子琴。以单片机作 为主控核心,与键盘、扬声器等模块组成核心主控制模块,实现以下功能:
(1) 设计一个(1×8)的键盘,并将 8 个键设计成 1 个八度的音阶对应的 8 个琴键,可 以进行弹奏表演;
(2) 演奏的同时 LED 流水灯会跟随当前按键进行对应亮灭变化;
(3) 有音乐存储功能,能自动演奏歌曲。演奏时可选择键盘输入乐曲,自己存入的乐曲
或随机存储的乐曲。按播放键能播放 3 首歌曲,第一首歌曲播放结束,再按播放键播放下 一首歌曲。
(4) 发光二极管会指示当前按键是否按下。KEY1 键按下,LED 第 4,8,12,16 位亮,并 播放 Do 的中音;KEY2 键按下,LED 第 3,7,11,15 位亮,并播放 Re 的中音;KEY3 键按 下,LED 第 2,6,10,14 位亮,并播放 Mi 的中音等以此类推。
2。2 音乐的相关知识
乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的, 频率高声音就高,频率低声音就低,不同音商的乐音是用 C、D、E、F、G、A、B 表示 的,这 7 个字母就是乐音的音名,它们一般依次唱成 DO、RE、MI、FA、SO、LA、SI, 这是唱曲时乐音的发音,所以叫唱名。音持续时间的长短即时值,一般用拍数表示,休止
符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率, 这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利 用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率 非常方便,我们可以利用单片机的定时/计数器 T0 来产生这样方波频率信号,因此,我们 只要把一首歌曲的音阶对应频率关系正确即可。若要产生音频脉冲,只要算出某一音频的 周期(1/频率),再将此周期除以 2,即为半周期的时间。利用定时器计时半周期时间, 每当计时终止后就将输出 P1。4 反相,然后重复计时再反相。就可在 P1。4 脚上得到此频率 的脉冲。
利用 STC89C51 的内部定时器使其工作计数器模式(MODE1)下,改变计数值 TH0 及 TL0 以产生不同频率的方法产生不同音阶,例如,频率为 523Hz,其周期 T=1/523=1912μ s, 因此只要令计数器计时 956μ s/1μ s=956,每计数 956 次时将 I/O 反相,就可得到中音 DO(523Hz)。
计数脉冲值与频率的关系式如(2-1)所示:
N=fi/2/fr (2-1)
式中,N 是计数值;fi 是机器频率(晶体振荡器为 12MHz 时,其频率为 1MHz);fr 是想要 产生的频率。
其计数初值 T 的求法如(2-2)所示:
T=K-N (2-2)
16
式中 K 是单片机的 16 位定时器最大计数值,K=2 =65536;fi 是机器频率,fi=1MHz,
例如低音 DO(262Hz)、低音 RE(294Hz)、中音 DO(523Hz)、中音 RE(587Hz)、高音 DO(1046Hz)、高音 RE(1175Hz)的计数值如下: T=65536-N=65536-fi/2/fr=65536-1000000/2/fr=65536-500000/fr
低音 DO 的 T=65536-500000/262=63628 低音 RE 的 T=65536-500000/294=63835 中音 DO 的 T=65536-500000/523=64580 中音 RE 的 T=65536-500000/587=64684 高音 DO 的 T=65536-500000/1046=65058 高音 RE 的 T=65536-500000/1175=65110