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

用c语言设计,谢谢了... 用c语言设计,谢谢了 展开
 我来答
寒试决
2012-12-01 · TA获得超过675个赞
知道答主
回答量:55
采纳率:100%
帮助的人:20.1万
展开全部
不知道你蜂鸣器是在哪个引脚。我前几天做了一个程序。
用了两个定时器,并用了两个定时器中断。
实现的效果是从低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)
{
}
}
来自:求助得到的回答
6793asd
2012-11-30 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:226
采纳率:100%
帮助的人:102万
展开全部
用同一个蜂鸣器,怎么发出这么多音调啊。难道通过不停的通断蜂鸣器么?同求。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
生活如歌_
2012-11-29 · TA获得超过1.5万个赞
知道大有可为答主
回答量:7398
采纳率:78%
帮助的人:2160万
展开全部
做个记号。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式