标题: 为什么蜂鸣器不会响是程序的问题还是电路图 [打印本页]

作者: 流年似水@    时间: 2017-4-26 20:29
标题: 为什么蜂鸣器不会响是程序的问题还是电路图
#include<reg51.h>        //头文件 #define uchar unsigned char    //预定义 #define uint unsigned int #define lcd_dat  P0 BUZZsbit lcdrs=P2^6;     //1602的数据/指令选择控制线 sbit lcdrw=P2^5;      //1602的读写控制线sbit lcden=P2^4;      //1602的使能控制线sbit yihao=P2^0;        //一号病房按键sbit erhao=P2^1;sbit sanhao=P2^2; sbit sihao=P2^3; uchar table1[]="Number";uchar table2[]="1234"; void delay(uint z)       //延时子程序 {   uint x,y;   for(x=z;x>0;x--)   for(y=110;y>0;y--); }void write_com(uchar com)    //写命令子程序 {  lcdrs=0;   lcdrw=0;     P0=com;  delay(5);  lcden=1; delay(3);lcden=0; } void write_data(uchar date)     //写数据子程序 { lcdrs=1;   lcdrw=0;     P0=date;   delay(5);  lcden=1;  delay(3);  lcden=0;} void init()              //1602初始化子程序 {  write_com(0x38);//显示模式设置。         delay(5);  write_com(0x0c);//关光标,不闪烁        delay(5);   write_com(0x06);  //显示地址递增,即写一个数据后,显示位置右移位          delay(5);  write_com(0x01); //清屏  delay(5); } void Number()                //显示Number子程序 {uchar m;  write_com(0x80);        for(m=0;m<6;m++)     //将table[]中的数据依次写入1602显示      {              write_data(table1[m]);                        delay(200); } } void main()            //主函数  { unsigned char FLAG;   //FLAG的值为P2口的值   init(); do{     FLAG=P2;  switch(FLAG&0X0f)      //屏蔽P2口高四位 { case 0X0E:        Number();        write_com(0x80+10);   //显示地址设为90H(即10H,)上排第十位                          write_data(table2[0]);                   delay(200);      break; case 0X0D:         Number();         write_com(0x80+10);   //显示地址设为90H(即10H,)上排第十位                                write_data(table2[1]);                               delay(200);                   break;case 0X0B:        Number();        write_com(0x80+10);   //显示地址设为90H(即10H,)上排第十位                          write_data(table2[2]);                               delay(200);             break;case 0X07:             Number();        write_com(0x80+10);   //显示地址设为90H(即10H,)上排第十位                        write_data(table2[3]);                               delay(200);                     break; default:         break;          }       } while(1); }sbit BUZZ =P1^1;   //蜂鸣器控制引脚unsigned char T0LoadH= 0;  //T0重载值的高字节unsigned char T0LoadL=0;  //T0重载值的低字节void OpenBuzz(unsigned int frequ);void StopBuzz();void major(){    unsigned int i=0;    TMOD=0x01; //配置T0工作在模式1,暂不启动    EA=1;      //使能全局中断    while (1)    {      OpenBuzz(4000); //以4KHz的频率启动蜂鸣器      for (i=0; i<40000; i++);      StopBuzz();      for (i=0; i<40000; i++);      OpenBuzz(1000); //以1KHz的频率启动蜂鸣器      for (i=0; i<40000; i++);      StopBuzz();      for (i=0; i<40000; i++);    } }void OpenBuzz(unsigned int frequ){    unsigned int reload;    reload = 65536-(11059200/12)/(frequ*2);  //由给定频率值计算定时器重载值    T0LoadH=reload>>8;  //16位重载值分解为高低两个字节    T0LoadL = reload;    TH0=0xFF;//设定一个接近溢出的初值,以使定时器马上投入工作    TL0=0xFE;    ET0=1;   //使能T0中断    TR0=1;   //启动T0}void StopBuzz(){   ET0=0;   //禁用T0中断   TR0=0;   //停止T0}void InterruptTimer0() interrupt 1{   TH0=T0LoadH;  //溢出后进入中断重新赋值   TL0=T0LoadL;   BUZZ=BUZZ; //反转蜂鸣器控制电平}

-34b938c2cb06363d.png (67.78 KB, 下载次数: 69)

-34b938c2cb06363d.png

作者: dragon19790000    时间: 2017-4-26 20:36
程序里面定义
sbit BUZZ =P1^1;//蜂鸣器控制引脚

你给的线路图,BUZZ是接在 P1^0 上,你换一下试试!!!

作者: Daly    时间: 2017-4-26 20:47
可能是电压的问题你测一下
作者: ahshmj    时间: 2017-4-26 21:00
有一种无源蜂鸣器像喇叭一样需要音频或脉冲电流推动。直接接直流不响的。但是这种比较少见。
作者: zhinengxiaoche1    时间: 2017-4-26 23:19
程序不对或者电路图不对都可能影响这个蜂鸣器。检查一下就好了。
作者: 偶也    时间: 2017-4-27 21:33
应该是程序问题
作者: qqwwee123    时间: 2017-4-27 22:19
我就知道一点接到的电阻不要太大。
作者: 大大泡泡糖2    时间: 2017-4-27 22:33

程序不对或者电路图不对都可能影响这个蜂鸣器。检查一下就好了。
作者: fu67622937    时间: 2017-4-28 00:10
程序或者电路图都可能影响这个蜂鸣器
作者: 沧海一瞬    时间: 2017-4-28 09:07
最后一条语句  BUZZ=BUZZ;并没有反转,要 BUZZ=~BUZZ;
作者: 彭文斌    时间: 2017-4-28 10:33
是不是没接好线路
作者: 彭文斌    时间: 2017-4-28 10:34
检查一下程序吧
作者: w1179benp    时间: 2017-4-28 11:42
在仿真里跑了下LZ的程序,1602能随按键显示被按下的按键号,BUZZ端的蜂鸣貌似没有看到如何控制的,有个按键没定义、使用(P2.7),是否应接在中断T0上?并在程序初始化里加入有关T0的应用,即按下BUZZ键,蜂鸣器响再按就停。另,LZ的按键上拉电阻位置都不对吧??
作者: xlongji    时间: 2017-4-28 11:44
我仔细分析了你的电路图,在4/6那张图右端,200hz蜂鸣器的正负极直接联通是错误的,就算其它电路和软件系统都正常工作,蜂鸣器也不会鸣响的。请仔细检查电路板,可以将板上连接正负极的线路断开试试,应该能正常发声了。
作者: maidezhu    时间: 2017-4-28 12:17
仿真软件的声音上仿真不是很好,我自己试过了声音一卡一卡的。具体的你可以用开发板搭下电路来看下的。
作者: lgjdqm    时间: 2017-4-28 17:16
要考虑蜂鸣器的频率是否合适
作者: 顺其自然1994    时间: 2017-4-28 17:54
修改下蜂鸣器里边的电压把12V改成5V应该就行了
作者: Meceda    时间: 2017-4-28 17:54
蜂鸣器的电源连接有问题
作者: 心似金钿坚    时间: 2017-4-28 18:26
大兄弟,这个要你自己仔细检查的呀
作者: 13373092669    时间: 2017-4-28 22:50
D1二极管去除试试
作者: zl2168    时间: 2017-4-29 18:58
这么乱的程序!
作者: beetan    时间: 2017-5-6 19:04
可以试试将蜂鸣器元件换成buzzer,再调一下电压就好




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1