89c51单片机蜂鸣器设计,按键1-7控制发出七个声音,按1发“多”,按2发“来”,依次类推.....按7发“西”

用c语言设计,谢谢了

不知道你蜂鸣器是在哪个引脚。我前几天做了一个程序。
用了两个定时器,并用了两个定时器中断。
实现的效果是从低1到高7每隔一秒播放一个音符。总共播放36个。如果你看懂了。那么自己就会改成你想要的。如果还是不会请再问我。C语言如下:
#include<reg51.h>
sbit sound=P3^7;

int i,a=0;
unsigned sound_list[36]=
{
63628,//低 1 DO
63731,//# 1 DO#
63853,//低 2 RE
63928,//# 2 RE#
64021,//低 3 M
64103,//低 4 FA
64185,//# 4 FA#
64260,//低 5 SO
64331,//# 5 SO#
64400,//低 6 LA
64463,//# 6
64524,//低 7 SI
64580,//中1 DO
64633,//# 1 DO#
64684,//中 2 RE
64732,//# 2 RE#
64777,//中 3 M
64820,//中 4 FA
64860,//# 4 FA#
64898,//中 5 SO
64934,//# 5 SO#
64968,//中 6 LA
64994,//# 6
65030,//中 7 SI
65058,//高 1 DO
65085,//# 1 DO#
65110,//高 2 RE
65134,//# 2 RE#
65157,//高 3 M
65178,//高 4 FA
65198,//# 4 FA#
65217,//高 5 SO
65235,//# 5 SO#
65252,//高 6 LA
65268,//# 6
65282//高 7 SI
} ;

void t0() interrupt 1
{
++a;
if(a==19)//改变a的赋值可以以50ms为单位改变总时间。
{
a=0;
i++;
}

}
void t1() interrupt 3
{ sound=!sound;
TH1=sound_list[i]/256; TL1=sound_list[i]%256;
}

main()
{
P1=0;//我关P1是因为和P1上接的负载拉电平。你应该根据你的情况。
EA=1;
ET1=1;
ET0=1;
TR1=1;
TR0=1;
TMOD=0x11;
TH0=15536/256;//这是定时器定50MS的计算方法。工作方式1
TL0=15536%256;//同上。改变TH0,TL0可以改变基础时间 。
TH1=sound_list[i]/256;
TL1=sound_list[i]%256;
while(1)
{
}
}来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-30
用同一个蜂鸣器,怎么发出这么多音调啊。难道通过不停的通断蜂鸣器么?同求。
第2个回答  2012-11-29
做个记号。
相似回答