打印

关于protues播放音乐的问题

[复制链接]
1606|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用protues仿真播放音乐遇到问题,向大家请教一下。
电路图

(buzzer和speaker可以无视掉,我只驱动了sounder)
程序
#include<reg51.h>
sbit speaker=P1^5;
unsigned int code yindiao[]={34,87,133,34,34,87,133,34,133,155,194,
133,155,194,194,228,194,155,133,34,194,228,194,155,133,34,34,194,34,
34,194,34};
unsigned int code yinchang[]={4,4,4,4,4,4,4,4,4,4,8,4,4,8,3,1,3,1,4,4,3,
1,3,1,4,4,4,4,8,4,4,8};
unsigned char i;
void delay(unsigned int z);
void main()
{
TMOD=0X11;
EA=1;
ET0=1;
while(1)
{
  TR0=1;
  for(i=0;i<32;i++)
  {
   TR0=1;
   delay(yinchang);
   TR0=0;
   delay(1);
  }      
  TR0=0;     
  delay(10);   
}
}
void yin() interrupt 1
{
TH0=254;
TL0=yindiao;
speaker=!speaker;
}
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
  for(y=5500;y>0;y--);//当晶振频率较低时应将y=5500改为y=550
}
程序比较简单,就是用定时器中断来产生每个音调,用延时程序来决定每个音调的时长。

当设定89c52的晶振为12M时,每个音调很不理想,有“得得得”的杂音。当降低晶振频率,比如为1M时,每个音调比较清晰,(此时需将程序的倒数第二行中的y=5500改为y=550,否则每个音调延时很长),此时可以听得出是一首歌。
但在实际的板子上试验时,12M的晶振,音乐播放的还不错。有哪位知道这倒底是为什么?

相关帖子

沙发
风溪香士|  楼主 | 2012-7-21 22:20 | 只看该作者
最后的文字貌似不清晰,我重发一下。


程序比较简单,就是用定时器中断来产生每个音调,用延时程序来决定每个音调的时长。

当设定89c52的晶振为12M时,每个音调很不理想,有“得得得”的杂音。当降低晶振频率,比如为1M时,每个音调比较清晰,(此时需将程序的倒数第二行中的y=5500改为y=550,否则每个音调延时很长),此时可以听得出是一首歌。
但在实际的板子上试验时,12M的晶振,音乐播放的还不错。有哪位知道这倒底是为什么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我命由我不由天!

13

主题

82

帖子

1

粉丝