标题: 【求解答】两个关于蜂鸣器音乐电路的问题: [打印本页]
作者: Lyric 时间: 2017-1-31 18:51
标题: 【求解答】两个关于蜂鸣器音乐电路的问题:
1.请问这是什么电路器件的符号?在Proteus(ISIS)中如何查找?
2.在仿真过程中,每当播放到同一个地方就从头开始了,后面的就没有了,如此循环。经过多次改动试验,我推测是单次循环时间达 到上限,请问如何延长单次循环时间?(代码见下)
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit fm=P3^4; //蜂鸣器控制端口
uchar timeh,timel; //用于存放定时器的高8位和低8位
uchar code zbjbxf[]={ //定义《快乐成长》的简谱数组
0xB3,0x91,0xC2,0xB6,0x83,0x61,0x92,0x86,0x62,0x61,0x61,0x62,0x82,0x81,0x81,0x82,0x92,0x82,0x42,0x56, //歌曲第一段(与歌谱每行对应,至反复记号处)
0x62,0x02,0x42,0x64,0x82,0xB2,0xA2,0x82,0x96,0x94,0xB1,0x91,0x84,0x91,0x81,0x12,0x82,0x51,0x61,0x4A,
0x62,0x84,0x42,0x93,0x81,0x61,0x51,0x42,0x52,0x62,0x14,0x12,0x23,0x11,0x81,0x91,0x82,0x02,0x61,0x61,
0x92,0x82,0x42,0x56,0x62,0x02,0x42,0x64,0x41,0x81,0xB4,0xA2,0x83,0x91,0x82,0x53,0x41,0x51,0x61,0x26,
0x44,0x72,0x94,0x91,0x91,0x84,0x82,0x94,0x62,0x92,0x82,0x32,0x4A,0x81,0x61,0xB2,0xB1,0x91,0xC2,
0xB6,0x82,0x81,0x61,0x92,0x86,0x92,0xB2,0xB2,0xC2,0xB3,0x91,0x62,0x52,0x42,0x12,0x82,0x42,0x56,
0x62,0x02,0x42,0x64,0x82,0xB2,0xA2,0x82,0x96,0x92,0xB3,0x91,0x82,0x92,0x82,0x62,0x52,0x42,0x12,0x82,0x51,0x61,
0x4C,
0xB3,0x91,0xC2,0xB6,0x83,0x61,0x92,0x86,0x62,0x61,0x61,0x62,0x82,0x81,0x81,0x82,0x92,0x82,0x42,0x56, //歌曲第二段(与歌谱每行对应)
0x62,0x02,0x42,0x64,0x82,0xB2,0xA2,0x82,0x96,0x94,0xB1,0x91,0x84,0x91,0x81,0x12,0x82,0x51,0x61,0x4A,
0x62,0x84,0x42,0x93,0x81,0x61,0x51,0x42,0x52,0x62,0x14,0x12,0x23,0x11,0x92,0x82,0x02,0x61,0x61,
0x92,0x82,0x42,0x56,0x62,0x02,0x42,0x64,0x41,0x81,0xB4,0xA2,0x83,0x91,0x82,0x93,0x81,0x81,0x91,0x66,
0x44,0x72,0x94,0x91,0x91,0x84,0x82,0x94,0x62,0x92,0x82,0x32,0x4A,0x81,0x61,0xB2,0xB1,0x91,0xC2,
0xB6,0x82,0x81,0x61,0x92,0x86,0x92,0xB2,0xB2,0xC2,0xB3,0x91,0x62,0x52,0x42,0x12,0x82,0x42,0x56,
0x62,0x02,0x42,0x64,0x82,0xB2,0xA2,0x82,0x96,0x92,0xB3,0x91,0x82,0x92,0x82,0x62,0x52,0x42,0x12,0x82,0x51,0x61,
0x46,0x62,0x02,0x42,0x64,0x82,0xB2,0xA2,0x82,0x9C,
0x92,0xB3,0x91,0x82,0x92,0x82,0x62,0x52,0x42,0x14,0x82,0x94,0x82,0xBC,0xff};
uchar code chuzhi[]={ //适合12M的晶振定时器初值表,高低8位分开
0xff,0xff, //占位
0xFB,0xE9, //D调低音5-中音4
0xFC,0x5B,
0xFC,0xBD,
0xFC,0xED,
0xFD,0x43,
0xFD,0x8E,
0xFD,0xB3,
0xFD,0xF3, //D调中音5-高音4
0xFE,0x2D,
0xFE,0x5E,
0xFE,0x76,
0xFE,0xA1,
0xFE,0xD0,
0xFE,0xD9,
};
void timer0() interrupt 1{ //定时器0中断服务程序
TH0=timeh; //将timeh赋给计时器的高8位
TL0=timel; //将timel赋给计时器的低8位
fm=~fm; //定时器每次到时将蜂鸣器反相
}
void delay(uint z){ //延时238ms,即八分音符
uint y;
for(z;z>0;z--)
for(y=27406;y>0;y--); //大致时间
}
void delay1(uint z){ //音符间适当延时
uint y;
for(z;z>0;z--)
for(y=162;y>0;y--); //大致时间
}
void main(){
uint temp; //存放简谱数组中的每一个音符的临时变量
uchar i=0;
uchar jp; //jp用于取出temp中的高8位和低8位
TMOD=0x01; //设置定时器T0工作于方式1
IE=0x82; //允许T0中断
while(1){
temp=zbjbxf;
if(temp==0xff)
break;
jp=temp/16; //取数的高4位,音频数值
if(jp!=0){
timeh=chuzhi[jp*2]; //构造定时器初值高8位
timel=chuzhi[jp*2+1]; //构造定时器初值低8位
TR0=1; //开定时器
}else{
TR0=0; //关定时器
fm=1; //关蜂鸣器
}
delay(temp%16); //取数的低4位,节拍(音符总时延)
TR0=0; //唱完一个音停5ms
fm=1;
delay1(5);
TR0=1;
i++;
}
TR0=0; //关定时器
fm=1; //关蜂鸣器
}
作者: yzwzfyz 时间: 2017-2-2 15:56
符号是主要目的是表示一个有做特定功能,性质,形状……的东东。
从这个图中可以评估出:它是活动件,如保险丝类,连接插头等等。总之是可通可断的东东。
看图不必拘泥,达成你的需求就很好了。
作者: Lyric 时间: 2017-2-3 18:48
谢谢您的解答!
之前我不懂,也是把这个忽略接好电路,仿真蜂鸣器不响,就以为是没有这个器件的原因。现在知道这个可有可无,我把蜂鸣器的参数改了,蜂鸣器就响了。只是声音很难听,换成喇叭要悦耳一些。
再帮我看看第二个问题好吗?
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |