找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为什么我的蜂鸣器不响

  [复制链接]
跳转到指定楼层
楼主
ID:150257 发表于 2016-12-1 21:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>  
#define uchar unsigned char           /*宏定义 */
#define uint unsigned int             /*宏定义 */
uchar hour,hour_h,hour_l;             /*定义小时,小时的高位,小时的低位*/
uchar min,min_h,min_l;                /*分*/
uchar sec,sec_h,sec_l;         /*秒*/
uchar int_num;            /*定时溢出作用标号*/
sbit key_secadd=P1^1;     /*定义了 p1.1为秒增1键,用在调时中断里*/
sbit key_minadd=P1^2;     /*定义了 p1.2为分增1键,用在调时中断里*/
sbit key_houradd=P1^3;    /*定义了 p1.3为时增1键,用在调时中断里*/
sbit key_intime=P1^0;     //按P1.0进入调时
sbit key_quit=P1^5;    //P1.5退出调时
sbit bell=P1^5;     //小喇叭
void delay(uchar time);        /*延时子函数声明*/
void display();                /*显示子函数声明*/
void inter_init();         /*定时器初始化子函数声明*/
void time24();
/****专用数码管显示表***/
uchar code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40}; /*0x40显示“一”符号*/
uchar code wema[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00};
/*小时hour  分min  秒sec*/

//---------------------延时子函数--------------------------------
void delay(uchar time)   /*延时子函数*/
  {
   uchar time_1;
   for (;time>0;time--)
    for (time_1=100;time_1>0;time_1--);
  }

//---------------------初始化T0函数--------------------------
void time0(void) interrupt 1  /*定时器T0服务子程序*/
{
  TH0=(65535-50000)/256;
  TL0=(65535-50000)%256;
  int_num++;
}

//---------------------定时器函数--------------------------
void inter_init()     /*定时器初始化子函数*/
  {
   EA=1;    /*开总中断*/
   EX0=1;    /*开外部中断0*/
   ET0=1;     /*打开定时器T0*/
   TMOD=0x01; /*工作方式1*/
   TCON = 0x00;   /*触发方式*/
   IP = 0x01;    /*中断优先级别,T0优先*/
   TH0=(65535-50000)/256; /*置初值,大约50ms一个中断 */
   TL0=(65535-50000)%256;
   TR0=1;    /*置位TR0,启动定时器0*/
  }
//---------------------24小时时间自加 --------------------------
void time24()       /*时间递增*/
  {
   if(int_num==20)  /*值满20,大约就是一秒的时间。*/
    {         /* 其值设为2,则定时时间快10倍,可做毫秒计时*/
     int_num=0;
     sec++;       /*秒值加1*/
     if(sec==60)  /*如果秒值满60,就归0*/
      {
       sec=0;
       min++;  /*分值加1*/
       if(min==60)
        {
         min=0;
         hour++;    /*分值归0,时值加1*/
         if(hour==24)
          {
           hour=0;   /*时值满24归0*/
          }
        }  
      }
    }
  }

//-----------按键调整子函数-------------------------------------
void key(void) //按键调整子函数

{
if(key_intime==0)
  {EA=0;  //      关中断
   sec=0;  //秒归零

while(100) //正确   
{ display();
  if(key_quit==0)
   {
    EA=1;
    break;
   }
  if(key_secadd==0)
   {
    delay(1);
    if(key_secadd==0)
     {
    sec++;
      while(!key_secadd);
      if(sec==60)
       {
        sec=0;
       }
     }
   }
  if(key_minadd==0)
   {
    delay(80);
    if(key_minadd==0)
        {
      min++;
      while(!key_minadd);
      if(min==60)
       {
        min=0;
       }
     }
   }
  if(key_houradd==0)
   {
    delay(80);
    if(key_houradd==0)
     {
      hour++;
      while(!key_houradd);
      if(hour==24)
       {
        hour=0;
       }
      }
    }
  } }
}

//---------------------数码管显示子函数-------------------------------------
void display()  /*数码管显示子函数*/  
  {
   sec_h=sec/10;     /*求出秒高位需要显示的字符*/
   sec_l=sec%10;   /*求出秒低位需要显示的字符*/
   min_h=min/10;
   min_l=min%10;
   hour_h=hour/10;
   hour_l=hour%10;  
   P2=duma[sec_h];  /*显示秒高位*/
   P0=wema[6];
   delay(10);

   P2=duma[sec_l];  /*显示秒低位*/
   P0=wema[7];
   delay(10);

   P2=duma[10]; /* “一”符号的显示 */
   P0=wema[5];
   delay(10);

   P2=duma[min_h];   /*分*/
   P0=wema[3];
   delay(10);

   P2=duma[min_l];
   P0=wema[4];
   delay(10);

   P2=duma[10];   /* “一”符号的显示 */
   P0=wema[2];
   delay(10);

   P2=duma[hour_h];    /*时*/
   P0=wema[0];
   delay(10);

   P2=duma[hour_l];
   P0=wema[1];
   delay(10);

  }

//---------------------主函数--------------------------------
/*void alarm_clock() //闹钟子函数-变频发声
{
   uint i,j,y,m;
   if(hour==00)//时到了00点?
     {
      if(min>=01){m=0;} //分大于或等于01就把m清零,若不成立向下执行
      if(min==00)//到了00分?
        {
         if(m<15)
           {
           do{    //循环-变频
               m++; display();
               for(i=0;i<2000;i++)
               {bell=~bell;for(j=0;j<24;j++);} //取反/
               for(y=0;y<2000;y++)
               {bell=~bell;for(j=0;j<25;j++);} //取反/
      for(i=0;i<2000;i++)
               {bell=~bell;for(j=0;j<26;j++);} //取反/
    for(i=0;i<2000;i++)
               {bell=~bell;for(j=0;j<27;j++);} //取反/
             }
           while(m<15); //闹15次结束
          }
       }
     }
}*/

//---------------------主函数--------------------------------
void main()
{
  inter_init();       /*定时器初始化*/
  hour=23;         /*自定义一个初值,方便快速观察翻转状态(可修改)*/
  min=59;
  sec=50;
while(1)

  {  
   key();   
   time24();  /*分开时间,分别显示字符*/
   //alarm_clock();//闹钟函数
   display();    /*调用显示函数来显示*/
  }
}

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

使用道具 举报

沙发
ID:150257 发表于 2016-12-1 21:47 | 只看该作者
P1^5接按键就可以退出 接蜂鸣器不可以退出 进不了闹钟调时功能 蜂鸣器不响
回复

使用道具 举报

板凳
ID:153199 发表于 2016-12-17 10:30 | 只看该作者
没有进入闹钟程序
回复

使用道具 举报

地板
ID:155302 发表于 2016-12-17 11:15 | 只看该作者
蜂鸣器没有接收到信号
回复

使用道具 举报

5#
ID:153199 发表于 2016-12-25 19:36 | 只看该作者
程序有问题,可以分享下pcb图不
回复

使用道具 举报

6#
ID:157865 发表于 2016-12-26 20:31 | 只看该作者
换成喇叭试一下
回复

使用道具 举报

7#
ID:157862 发表于 2016-12-26 20:39 | 只看该作者
有图吗
回复

使用道具 举报

8#
ID:157887 发表于 2016-12-26 21:43 | 只看该作者
来个图
回复

使用道具 举报

9#
ID:157886 发表于 2016-12-26 21:54 | 只看该作者
换成喇叭试一下
回复

使用道具 举报

10#
ID:157899 发表于 2016-12-26 22:26 | 只看该作者
来赚点币4
回复

使用道具 举报

11#
ID:158001 发表于 2016-12-27 15:29 | 只看该作者
我没看你的代码,但是我之前的蜂鸣器不响是因为蜂鸣器分有源和无源的,我当时没搞清楚,不知道会不会是这个原因
回复

使用道具 举报

12#
ID:158063 发表于 2016-12-27 15:56 | 只看该作者
1,确定蜂鸣器的工作电压
2,确定蜂鸣器的工作方式,是高低电平驱动,还是脉冲方式驱动。
回复

使用道具 举报

13#
ID:158111 发表于 2016-12-27 17:57 | 只看该作者
哪种蜂鸣器,有的要脉冲才会响
回复

使用道具 举报

14#
ID:158130 发表于 2016-12-27 19:05 | 只看该作者
^5接按键就可以退出 接蜂鸣器不可以退出 进不了闹钟调时功能 蜂鸣器不
回复

使用道具 举报

15#
ID:158136 发表于 2016-12-27 19:14 | 只看该作者
程序有问题
回复

使用道具 举报

16#
ID:158167 发表于 2016-12-27 20:54 | 只看该作者
蜂鸣器连接的I/O口要取反才能响
回复

使用道具 举报

17#
ID:150832 发表于 2016-12-27 21:16 | 只看该作者
看存在接触的问题不
回复

使用道具 举报

18#
ID:158070 发表于 2016-12-27 22:46 | 只看该作者
蜂鸣器分两种,即交流和直流。 直流蜂鸣器在施加直流电后即发出响声,交流蜂鸣器虽然也可用直流供电,但需另加振荡电路,起振后蜂鸣器才会发声。
回复

使用道具 举报

19#
ID:157748 发表于 2016-12-27 22:56 | 只看该作者
蜂鸣器那端有信号给进吗,看连线段有没有电平跳变,也就是红色低电平到蓝色高电平,程序就帮不上忙了
回复

使用道具 举报

20#
ID:158217 发表于 2016-12-27 23:10 | 只看该作者
蜂鸣器频率没调好
回复

使用道具 举报

21#
ID:157820 发表于 2016-12-28 09:15 | 只看该作者
先确定你用的是有源的还是无源的蜂鸣器
回复

使用道具 举报

22#
ID:158263 发表于 2016-12-28 09:56 来自手机 | 只看该作者
有源的蜂鸣器才可以直接使用io口
回复

使用道具 举报

23#
ID:158282 发表于 2016-12-28 11:03 | 只看该作者
程序有问题,可以分享下pcb图不
回复

使用道具 举报

24#
ID:158481 发表于 2016-12-28 21:44 | 只看该作者
蜂鸣器分两种,即交流和直流。 直流蜂鸣器在施加直流电后即发出响声,交流蜂鸣器虽然也可用直流供电,但需另加振荡电路,起振后蜂鸣器才会发声。
回复

使用道具 举报

25#
ID:157057 发表于 2016-12-28 22:17 | 只看该作者
交流 还是直流的
回复

使用道具 举报

26#
ID:110780 发表于 2016-12-29 11:10 | 只看该作者
脉冲的问题
回复

使用道具 举报

27#
ID:146019 发表于 2016-12-29 11:38 | 只看该作者
有有源轰鸣器和无源轰鸣器,无源的要脉冲才可以驱动。
回复

使用道具 举报

28#
ID:146019 发表于 2016-12-29 11:41 | 只看该作者
无源轰鸣器要脉冲,有源的就不用了。
回复

使用道具 举报

29#
ID:102598 发表于 2016-12-29 22:17 | 只看该作者
原理图看看。。
回复

使用道具 举报

30#
ID:156580 发表于 2016-12-29 23:02 | 只看该作者
蜂鸣器分有源无源两种,先直接加电测试蜂鸣器有没有问题;在一步一步测试你的程序;你写的太长了,要分小段。小块的功能测试
回复

使用道具 举报

31#
ID:158824 发表于 2016-12-30 10:39 | 只看该作者

哪种蜂鸣器,有的要脉冲才会响
回复

使用道具 举报

32#
ID:158179 发表于 2016-12-30 23:14 来自手机 | 只看该作者
仿真不响,还是实物不响
回复

使用道具 举报

33#
ID:159002 发表于 2016-12-31 09:46 | 只看该作者
用三极管控制,注意那个是输出引脚,要接到集级,发射机接vcc,接无缘风鸣器,控制音调音色。有缘蜂鸣器,就是低电平就响,接对就好
回复

使用道具 举报

34#
ID:150257 发表于 2017-1-25 00:27 | 只看该作者
已经搞清楚了 是有缘和无缘的问题 谢谢大家
回复

使用道具 举报

35#
ID:162841 发表于 2017-1-25 20:51 来自手机 | 只看该作者
程序有问题,接蜂鸣器的要取反
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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