找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11151|回复: 5
收起左侧

单片机控制蜂鸣器一直响?

[复制链接]
ID:513560 发表于 2019-5-8 16:39 | 显示全部楼层 |阅读模式
我在蜂鸣器两端接了二极管,二极管是按照程序闪的,蜂鸣器一直响,我往蜂鸣器里烧过开发板的程序,蜂鸣器没有问题。求大佬指点,下面是部分程序。
111111.png
  1. #include<reg51.h>//51单片机头文件
  2. #define LCD1602_DATAPINS P0
  3. typedef unsigned char uchar;
  4. typedef unsigned int  uint;
  5. sbit K1=P3^2;//比赛倒计时开始/暂停
  6. sbit K2=P3^3;//24s倒计时重新开始
  7. sbit K3=P1^3;//乙队+1按键
  8. sbit K4=P1^2;//乙队-1按键
  9. sbit K5=P1^1;//甲队+1按键
  10. sbit K6=P1^0;//甲队-1按键
  11. sbit K7=P1^4;//分+1按键
  12. sbit K8=P1^5;//秒+1按键
  13. sbit K9=P1^6;//分-1
  14. sbit K10=P1^7;//秒-1
  15. sbit beep=P2^0;//蜂鸣器接口  
  16. sbit RS=P2^6;
  17. sbit RW=P2^5;//OO
  18. sbit E=P2^7;
  19. char miao,fen,num,time,aa;
  20. int m=0;
  21. uchar bb,cc,i;
  22. uchar code table1[]={"H.T 000:000 Y.T "};
  23. uchar code table2[]={"12:00 ------- 24"};
  24. //延时子函数
  25. void delay(uint z)  
  26. {
  27.         uint x;
  28.         uchar y;
  29.         for(x=z;x>0;x--)
  30.                   for(y=110;y>0;y--);
  31. }

  32. //LCD1602液晶初始化子函数
  33. void LCD1602_init()
  34. {
  35.         uchar i;
  36.         bb=0;    //H.T分数初始化
  37.         cc=0;    //R.T分数初始化
  38.         time=0;
  39.         TMOD=0x10;    //定时器1初始化
  40.         TL1=0x00;
  41.         TH1=0x4c;
  42.         EA=1;     //开总中断
  43.         ET1=1;     //开定时器1
  44.         TR1=0;     //定时器1不工作
  45.         EX0=1;     //开中断0
  46.         EX1=1;     //开中断1
  47.         IT0=1;     //中断0为边沿触发
  48.         IT1=1;     //中断1为边沿触发
  49.         E=0;
  50.         beep=0;
  51.         miao=0;
  52.         fen=12;
  53.         aa=24;
  54.         write_com(0x38);  //LCD设置初始化
  55.         write_com(0x0c);
  56.         write_com(0x06);
  57.         write_com(0x01);
  58.         write_com(0x80);  //LCD显示初始化
  59.         for(i=0;i<16;i++)
  60.         {
  61.                   write_date(table1[i]);
  62.         }
  63.         write_com(0x80+0x40);
  64.         for(i=0;i<16;i++)
  65.         {
  66.                   write_date(table2[i]);
  67.         }
  68. }

  69. void counter_down()
  70. {
  71.         uchar i;
  72.         if(time>=20)     //每1s倒计时做减一操作
  73.         {
  74.                   miao--;
  75.                   aa--;
  76.                   write_com(0x80+0x4e);  //24s倒计时显示
  77.                   write_date(0x30+aa/10);
  78.                   write_date(0x30+aa%10);
  79.                 write_com(0x80+0x4e);
  80.                   if(aa==0)    //24s结束发出报警
  81.                   {TR1=~TR1;
  82.                            beep=1;
  83.                    delay(200);
  84.                            beep=0;
  85.                            
复制代码

                  


回复

使用道具 举报

ID:123289 发表于 2019-5-9 08:45 | 显示全部楼层
注意一下:图中P2.3=0时蜂鸣器叫。
回复

使用道具 举报

ID:417092 发表于 2019-5-9 09:59 | 显示全部楼层
傻子都看出来了。。。
程序里是P2^0;
电路是P2^6;
回复

使用道具 举报

ID:176854 发表于 2019-5-9 11:04 | 显示全部楼层
1.你控制蜂鸣器的原理图不正确
2.PNP是低电平触发, 即beep=0蜂鸣器响
QQ截图20190509104335.png
回复

使用道具 举报

ID:531765 发表于 2019-5-9 17:12 | 显示全部楼层
要不就是这个蜂鸣器是低电平触发,可以试试吧beep = 1;或者如果电路图是对的话就是你的引脚错了,图上是P2^3,你写的是P2^0
回复

使用道具 举报

ID:505065 发表于 2019-5-9 21:28 | 显示全部楼层
你的高低电平都写错了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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