#include<reg52h>
sbit beep=P0^4;
void main()
{
beep=0;
while(1);
}
试试这个怎样,单片机在执行完程序之后会回到初始状态,然后再重新执行程序,所以蜂鸣器就会反复的开和关,听起来声音会小很多;加个while(1)死循环,让程序一直保持在beep=0的状态。
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。我们开发板上常用的蜂鸣器就是常常说的交流蜂鸣器或直流蜂鸣器(自激式蜂鸣器)。 直流蜂鸣器是给一定的驱动直流电压就会响。而交流蜂鸣器是需要给蜂鸣器一个脉冲才会响。常见的有PWM波控制蜂鸣器的频率。脉冲就是高低电平的切换,如下图:一个方波脉冲
我们用单片机的IO口实现一种这样高低电平的方波,驱动蜂鸣器发音。我们板子上配的就是交流蜂鸣器。
接下来我们看一下蜂鸣器的硬件电路:
蜂鸣器通过三极管驱动。我们利用杜邦线将蜂鸣器的一端J8连接到板子上P15管脚上。
示例程序:
#include "reg52h"
#include "intrinsh"
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit beep = P1^5;
void delay(uint16 i)
{
while(i--);
}
void main()
{
while(1)
{
beep = ~beep;
delay(10);
}
}
该程序实现蜂鸣器的响和停,程序较为简单,可以在此基础上进行扩展。
有源蜂鸣器都是长鸣固定频率的,只要加5Ⅴ电压就响。要按不同频率发声,应该用无源蜂鸣器,或小功率的扬声器,即小喇叭。利用定时器定时,输出一定频率的方波信号即可。如1KHz方波,信号周期为1ms,定时05ms=500us,假设单片机晶振频率是12M,机器周期是1us,用定时器T0,定时的初始值,X=65536-500=65036=FE0CH,TH0=FEH,TL0=0CH。
汇编程序:
START:MOV TMOD , #01H
SETB TR0
LOOP:MOV TH0 , #0FEH
MOV TL0 , #0CH
JNB TF0 , $
CLR TF0
CPL P17 ; P17输出方波信号
SJMP LOOP
你想要其他频率的信号,可参照上面的计算过程和程序,自己修改一下就成了。
P10口接喇叭,P33接按键后接地。
P33用作外部中断口,中断方式为1,下降沿触发。
程序功能为按下按键后,蜂鸣器响,释放按键,蜂鸣器停止发声。
当然,要是将问题实用化的话,要在51单片机的IO口接上驱动电路,不然带不动大功率的元件的。
#include <reg51h>
sbit P1_0=P1^0;
sbit P3_3=P3^3;
void delay(unsigned char y)
{ unsigned char i,k;
for(i=0;i<y;i++)
{for(k=0;k<0;k++);}
}
void main()
{
while(1)
{
EA=1;
EX1=1;IT1=1;
IT1=1;
}
}
void SPEAKER() interrupt 2
{ unsigned char x;
EA=0;
P3_3=1;
x=P3_3;
while(x==0)
{
P1_0=0;
delay(1);
P1_0=1;
P3_3=1;
x=P3_3;
delay(1);
}
}
PS:如果是想学的话,程序只供参考,自己把程序写的更加好。要是只是应付老师之类的,就随意了。
你们给问题总是条件不全面!
假设P11控制LED,低电平亮;
P12控制蜂鸣器,低电平响。
sbit p11=p1^1;
sbit p12=p1^2;
if((p11=!p11) && (p11==1))
{
p12=0;
//此处延时50毫秒
p12=1;
}
ORG 0000H
STAR:
JB P10,$; p10作为开关 打开程序才能继续下去
CALL DI ;发音200ms
CALL NO_DI ;静音200ms
CALL DI
CALL NO_DI
CALL DI
CALL NO_DI
SJMP STAR;继续从头执行程序
;-------------------
DI:
MOV R1,#100 ;发音200ms
D2:
CLR P17
LCALL DEL ;约1ms
SETB P17;
LCALL DEL;设置蜂鸣声音的频率高低
DJNZ R1, D2
RET
;-------------------
NO_DI:
MOV R1,#100 ;静音200ms
ND2:
; CLR P17
LCALL DEL ;约1ms
SETB P17;
LCALL DEL;设置蜂鸣声音的频率高低
DJNZ R1, ND2
RET
;-------------------
DEL: ;约1ms
MOV R7,#5
DLY1:
MOV R6,#100
DJNZ R6,$
DJNZ R7,DLY1
RET
END
以上就是关于STC51单片机C语言开启蜂鸣器全部的内容,包括:STC51单片机C语言开启蜂鸣器、51单片机之蜂鸣器、求一个51单片机上能用的有源蜂鸣器不同频率响的汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)