找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8449|回复: 21
收起左侧

为什么蜂鸣器不会响是程序的问题还是电路图

  [复制链接]
ID:191774 发表于 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
回复

使用道具 举报

ID:149451 发表于 2017-4-28 11:42 | 显示全部楼层
在仿真里跑了下LZ的程序,1602能随按键显示被按下的按键号,BUZZ端的蜂鸣貌似没有看到如何控制的,有个按键没定义、使用(P2.7),是否应接在中断T0上?并在程序初始化里加入有关T0的应用,即按下BUZZ键,蜂鸣器响再按就停。另,LZ的按键上拉电阻位置都不对吧??

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:194466 发表于 2017-4-28 11:44 | 显示全部楼层
我仔细分析了你的电路图,在4/6那张图右端,200hz蜂鸣器的正负极直接联通是错误的,就算其它电路和软件系统都正常工作,蜂鸣器也不会鸣响的。请仔细检查电路板,可以将板上连接正负极的线路断开试试,应该能正常发声了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:112693 发表于 2017-4-26 20:36 | 显示全部楼层
程序里面定义
sbit BUZZ =P1^1;//蜂鸣器控制引脚

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

使用道具 举报

ID:193976 发表于 2017-4-26 20:47 | 显示全部楼层
可能是电压的问题你测一下
回复

使用道具 举报

ID:7485 发表于 2017-4-26 21:00 | 显示全部楼层
有一种无源蜂鸣器像喇叭一样需要音频或脉冲电流推动。直接接直流不响的。但是这种比较少见。
回复

使用道具 举报

ID:194034 发表于 2017-4-26 23:19 | 显示全部楼层
程序不对或者电路图不对都可能影响这个蜂鸣器。检查一下就好了。
回复

使用道具 举报

ID:194367 发表于 2017-4-27 21:33 | 显示全部楼层
应该是程序问题
回复

使用道具 举报

ID:193970 发表于 2017-4-27 22:19 | 显示全部楼层
我就知道一点接到的电阻不要太大。
回复

使用道具 举报

ID:193877 发表于 2017-4-27 22:33 | 显示全部楼层

程序不对或者电路图不对都可能影响这个蜂鸣器。检查一下就好了。
回复

使用道具 举报

ID:194425 发表于 2017-4-28 00:10 | 显示全部楼层
程序或者电路图都可能影响这个蜂鸣器
回复

使用道具 举报

ID:194454 发表于 2017-4-28 09:07 | 显示全部楼层
最后一条语句  BUZZ=BUZZ;并没有反转,要 BUZZ=~BUZZ;
回复

使用道具 举报

ID:194489 发表于 2017-4-28 10:33 | 显示全部楼层
是不是没接好线路
回复

使用道具 举报

ID:194489 发表于 2017-4-28 10:34 | 显示全部楼层
检查一下程序吧
回复

使用道具 举报

ID:183046 发表于 2017-4-28 12:17 | 显示全部楼层
仿真软件的声音上仿真不是很好,我自己试过了声音一卡一卡的。具体的你可以用开发板搭下电路来看下的。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:74868 发表于 2017-4-28 17:16 | 显示全部楼层
要考虑蜂鸣器的频率是否合适
回复

使用道具 举报

ID:170955 发表于 2017-4-28 17:54 | 显示全部楼层
修改下蜂鸣器里边的电压把12V改成5V应该就行了
回复

使用道具 举报

ID:194608 发表于 2017-4-28 17:54 | 显示全部楼层
蜂鸣器的电源连接有问题
回复

使用道具 举报

ID:194619 发表于 2017-4-28 18:26 | 显示全部楼层
大兄弟,这个要你自己仔细检查的呀
回复

使用道具 举报

ID:158622 发表于 2017-4-28 22:50 | 显示全部楼层
D1二极管去除试试
回复

使用道具 举报

ID:111634 发表于 2017-4-29 18:58 | 显示全部楼层
这么乱的程序!
回复

使用道具 举报

ID:197441 发表于 2017-5-6 19:04 | 显示全部楼层
可以试试将蜂鸣器元件换成buzzer,再调一下电压就好
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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