找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4273|回复: 15
打印 上一主题 下一主题
收起左侧

蜂鸣器在开发板上不响

  [复制链接]
跳转到指定楼层
楼主
ID:368203 发表于 2018-7-9 19:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k3=P3^2;
sbit beep=P1^5;
sbit L=P2^0;
uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                                 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e};
                                 
uint i,k;
void delay(uint z);
void delay1(uint i)
{
        while(i--);       
}
void display()
{
        for(i=0;i<8;i++)
                {
                        switch(i)         //位选,选择点亮的数码管,
                        {
                                case(0):
                                        LSA=0;LSB=0;LSC=0;P0=led[6]; break;//显示第0位
                                case(1):
                                        LSA=1;LSB=0;LSC=0;P0=led[7]; break;//显示第1位
                                case(2):
                                        LSA=0;LSB=1;LSC=0;P0=led[2]; break;//显示第2位
                                case(3):
                                        LSA=1;LSB=1;LSC=0;P0=led[6]; break;//显示第3位
                                case(4):
                                        LSA=0;LSB=0;LSC=1;P0=led[4]; break;//显示第4位
                                case(5):
                                        LSA=1;LSB=0;LSC=1;P0=led[0]; break;//显示第5位
                                case(6):
                                        LSA=0;LSB=1;LSC=1;P0=led[1]; break;//显示第6位
                                case(7):
                                        LSA=1;LSB=1;LSC=1;P0=led[8]; break;//显示第7位       
                        }
                        delay(1); //间隔一段时间扫描       
                }
}
void delay(uint z)
{
        uint i,j;
        for(i=z;i>0;i--)
                for(j=400;j>0;j--);
}
void main()
{
        EA=1;       
        EX0=1;
        IT0=1;
        L=1;
        display();

}
void int0() interrupt 0
{
        if(k3==0)
        {
                beep=~beep;
                delay1(10);
                L=0;
                delay(60);
        }

}

但是单独拿出蜂鸣器的那一个步骤重新建立一个工程再写它是会响的,不知道为什么加在里面就不行了

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

使用道具 举报

沙发
ID:368203 发表于 2018-7-9 19:30 | 只看该作者
用的是普中科技的板子 不知道有没有关系呢?
回复

使用道具 举报

板凳
ID:308437 发表于 2018-7-9 21:44 | 只看该作者
跟板子没关系的。你直接给一个5V电压上去。有源蜂鸣器,如果响了,就是好的如果不行,就是你的问题。
回复

使用道具 举报

地板
ID:320306 发表于 2018-7-10 08:46 | 只看该作者
有源的还是无源的啊,你这程序看起来像无源的,但是中断里面处理又不对!!!!!!!!!!!!!!
回复

使用道具 举报

5#
ID:368407 发表于 2018-7-10 10:40 | 只看该作者
你连接的p2。0口好像不对啊,也可能是电路吗、那里断了检查一下
回复

使用道具 举报

6#
ID:368504 发表于 2018-7-10 10:42 | 只看该作者
得看你的是有源的还是无缘的
回复

使用道具 举报

7#
ID:368203 发表于 2018-7-11 22:50 | 只看该作者
一米八减一 发表于 2018-7-10 10:42
得看你的是有源的还是无缘的

这是无源的啊, 请问下中断哪里错了?
回复

使用道具 举报

8#
ID:368203 发表于 2018-7-11 22:50 | 只看该作者
yousunny 发表于 2018-7-9 21:44
跟板子没关系的。你直接给一个5V电压上去。有源蜂鸣器,如果响了,就是好的如果不行,就是你的问题。

这是无源的,单独写个蜂鸣器发声的程序就可以,但是放在一起就不行了
回复

使用道具 举报

9#
ID:369848 发表于 2018-7-12 00:26 | 只看该作者
有源无源分清楚~
回复

使用道具 举报

10#
ID:369851 发表于 2018-7-12 01:00 | 只看该作者
有源还是无源
回复

使用道具 举报

11#
ID:368247 发表于 2018-7-12 02:09 | 只看该作者
你接个5V的电压试试
回复

使用道具 举报

12#
ID:142045 发表于 2018-7-12 09:44 | 只看该作者
普中科技的板子蜂鸣器是无源的 发声原理类似扬声器,必须是振荡信号才能响,你可以参考实例,用的是定时器。
/************************************************************************  
[文件名]  C51音乐程序(八月桂花)  
[功能]    通过单片机演奏音乐  
  
/**********************************************************************/   
#include <REG52.H>   
#include <INTRINS.H>   
//本例采用89C52, 晶振为11.0592MHZ   
//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.   
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;   
//所以拿出谱子, 试探编吧!   

sbit Beep =  P1^5 ;
   
unsigned char n=0;  //n为节拍常数变量   
unsigned char code music_tab[] ={   
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,   
0x20, 0x40, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x10,   
0x1C, 0x10, 0x18 , 0x40,   
0x1C, 0x20, 0x20 , 0x20,   
0x1C, 0x20, 0x18 , 0x20,   
0x20, 0x80, 0xFF , 0x20,   
0x30, 0x1C, 0x10 , 0x18,   
0x20, 0x15, 0x20 , 0x1C,   
0x20, 0x20, 0x20 , 0x26,   
0x40, 0x20, 0x20 , 0x2B,   
0x20, 0x26, 0x20 , 0x20,   
0x20, 0x30, 0x80 , 0xFF,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x80,   
0x20, 0x30, 0x1C , 0x10,   
0x20, 0x10, 0x1C , 0x10,   
0x20, 0x20, 0x26 , 0x20,   
0x2B, 0x20, 0x30 , 0x20,   
0x2B, 0x40, 0x20 , 0x15,   
0x1F, 0x05, 0x20 , 0x10,   
0x1C, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x30,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x40, 0x1C , 0x20,   
0x20, 0x20, 0x26 , 0x40,   
0x13, 0x60, 0x18 , 0x20,   
0x15, 0x40, 0x13 , 0x40,   
0x18, 0x80, 0x00   
};   
   
void int0()  interrupt 1   //采用中断0 控制节拍   
{  TH0=0xd8;   
   TL0=0xef;   
   n--;   
}   
   
void delay (unsigned char m)   //控制频率延时   
{   
unsigned i=3*m;   
while(--i);   
}   
   
void delayms(unsigned char a)  //豪秒延时子程序   
{   
  while(--a);                  //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!   
}   
   
void main()   
{ unsigned char p,m;   //m为频率常数变量   
  unsigned char i=0;   
  TMOD&=0x0f;   
  TMOD|=0x01;   
  TH0=0xd8;TL0=0xef;   
  IE=0x82;   
play:   
   while(1)   
    {   
    a: p=music_tab[i];   
       if(p==0x00)       { i=0, delayms(1000); goto play;}     //如果碰到结束符,延时1秒,回到开始再来一遍   
       else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a;}  //若碰到休止符,延时100ms,继续取下一音符   
            else         {m=music_tab[i++], n=music_tab[i++];}  //取频率常数 和 节拍常数   
             TR0=1;                                             //开定时器1   
           while(n!=0) Beep=~Beep,delay(m);                         //等待节拍完成, 通过P1口输出音频(可多声道哦!)   
       TR0=0;                                             //关定时器1   
    }   
}  
回复

使用道具 举报

13#
ID:370072 发表于 2018-7-12 11:28 | 只看该作者
直接用一个正弦波发生器,看蜂鸣器叫不叫。
回复

使用道具 举报

14#
ID:370095 发表于 2018-7-12 11:59 | 只看该作者
确保蜂鸣器是有源还是无源,标有正负极的就是有源,没有标的就是无源。
回复

使用道具 举报

15#
ID:365677 发表于 2018-7-12 14:14 | 只看该作者
中断里不要用延时函数,设置定时器时间就可以了
回复

使用道具 举报

16#
ID:370405 发表于 2018-7-12 17:58 | 只看该作者
是无源的蜂鸣器吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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