单片机电子琴电路图及源程序代码
电子琴的设计
摘要:介绍了用单片机设计微型电子琴的方法。给出了硬件电路、程序及程序说明。
关键词:电子琴,单片机,电路图,程序设计
单片机因其体积小、功能强、价格低廉而得到广泛应用。本文介绍用AT89S51单片机设计微型电子琴的方法,仅需AT89S51最小系统,可按需要扩展一组小键盘(本设计只要求发7个音,因此不需扩展),再加一片LM386做音频小功放,输出到扬声器。电源可由三节5号电池提供或者由7805稳压得到5V电压。
1. 设计原理
因为每个乐音都是有固定的周期,我们可以利用单片机的P1.0(任一个I/O口都可,本设计利用P1.0)来产生音频脉冲。这样就可以发一个乐音了,然后利用程序循环这样就可以发出想要的乐音,直到完成一首完整的歌曲。
1.怎样在P1.0引脚上产生音频脉冲了?
首先知道某一音频的周期,然后将此周期除以2,即为半周期的时间了。利用定时器计时这半个周期的时间,每当半个周期的时间到了就将P1.0反向,就可以在P1.0脚上得到某一音频的脉冲了。
2.T值的计算方法(T值就是给定时器的初值)
T=65536 — N
N= Fi / 2 / Fr Fi : 内部计时一次的时间(这里为1us,
晶振12M)
FR:要产生的频率
C调各音符频率与计数值T的对照表
音符 频率(Hz) 简谱码(T值) 音符 频率(Hz) 简谱码(T值)
低 1 DO 262 63628 # 4 FA # 740 64860
# 1 DO # 277 63731 中 5 SO 784 64898
低 2 RE 294 63835 # 5 SO # 831 64934
# 2 RE # 311 63928 中 6 880 64968
低 3 M 330 64021 # 6 # 932 64994
低 4 FA 349 64103 中 7 SI 988 65030
# 4 FA # 370 64185 高 1 DO 1046 65058
低 5 SO 392 64260 # 1 DO # 1109 65085
# 5 SO # 415 64331 高 2 RE 1175 65110
低 6 LA 440 64400 # 2 RE # 1245 65134
# 6 # 466 64463 高 3 M 1318 65157
低 7 SI 494 64524 高 4 FA 1397 65178
中 1 DO 523 64580 # 4 FA # 1480 65198
# 1 DO # 554 64633 高 5 SO 1568 65217
中 2 RE 587 64684 # 5 SO # 1661 65235
# 2 RE # 622 64732 高 6 LA 1760 65252
中 3 M 659 64777 # 6 # 1865 65268
中 4 FA 698 64820 高 7 SI 1967 65283
3.音符码表和节拍码表的建立
因为每个音符的T值如上表,可以将所有的T值按照顺序建一个表,歌曲中需要发任何一个音都可以查表得到。
TABLE0:DW 63628,63731,63835,63928,64021,64103
DW 64185,64260,64331,64400,64463,64524
DW 64580,64633,64684,64732,64777,64820
DW 64860,64898,64934,64968,64994,65030
DW 65058,65085,65110,65134,65157,65178
DW 65198,65217,65235,65252,65268,65283
节拍码的建立则根据歌曲本身来建立。
4.延时程序的编写
在这里我们先算出1/4拍时间DELAY,则2/4拍为2倍DELAB,1拍为4倍DELAB,以此类推。
延时时间的设定;石英晶振为12MHz,1个机械周期为一微秒。
机械周期
MOV R4, #20 2个 2
D1: MOV R5, #248 2个 2 20*(498+2)+2=10002
2+2*248=498 机械周期
DJNZ R5, $ 2个 2*248
DJNZ R4, D1 2个 2*20
故时间为10002*1微秒=10.002毫秒
设1/4拍时间为125毫秒延时程序如下:
DELAY:MOV R3,#02
D0: MOV R4,#125
D1: MOV R5,#248
DJNZ R5, $
DJNZ R4, D1
DJNZ R3, D0
DJNZ R2, DELAY /R2 中存放节拍数/
RET
2.电路图分析
如图为AT89S51最小系统,LM386为音频小功放(其功放电路参考网上资料),7447为数码管驱动。数码管显示状态,F表示没有键按下,1—9分别对应有1—9键按下。1—7表示发DO—SI的乐音。8表示完成一首完整的歌曲,9表示从唱歌到按键发音,而按键发音到唱歌可以直接按下8键即可。采用中断响应方式发音。
3.软件设计
首先完成按键发音的程序,当有1—7键中任一个键按下时会引起INT1中断,系统如果没有正在响应INT0中断,则会马上响应此中断。进行键盘扫描,判断是哪个键按下,并记下键值。然后根据键值查T值表,把T值写入T0,开启T0定时。继续扫描键盘检查键是否还是按下的,如果是按下的则继续扫描,否则返回中断。在T0定时器产生中断时又重新载入T值,并使P1.0反向。748