标题:
为什么蜂鸣器不会响是程序的问题还是电路图
[打印本页]
作者:
流年似水@
时间:
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)
下载附件
2017-4-26 20:29 上传
作者:
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