找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 2274|回复: 2
打印 上一主题 下一主题
收起左侧

【求解答】两个关于蜂鸣器音乐电路的问题:

[复制链接]
跳转到指定楼层
楼主
ID:163118 发表于 2017-1-31 18:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.请问这是什么电路器件的符号?在ProteusISIS)中如何查找?




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;                                        //关蜂鸣器
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

举报

沙发
ID:123289 发表于 2017-2-2 15:56 | 只看该作者
符号是主要目的是表示一个有做特定功能,性质,形状……的东东。
从这个图中可以评估出:它是活动件,如保险丝类,连接插头等等。总之是可通可断的东东。
看图不必拘泥,达成你的需求就很好了。
回复

举报

板凳
ID:163118 发表于 2017-2-3 18:48 | 只看该作者
yzwzfyz 发表于 2017-2-2 15:56
符号是主要目的是表示一个有做特定功能,性质,形状……的东东。
从这个图中可以评估出:它是活动件,如保 ...

谢谢您的解答!
之前我不懂,也是把这个忽略接好电路,仿真蜂鸣器不响,就以为是没有这个器件的原因。现在知道这个可有可无,我把蜂鸣器的参数改了,蜂鸣器就响了。只是声音很难听,换成喇叭要悦耳一些。

再帮我看看第二个问题好吗?
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表