一次定时50ms,中断20次和10次就 是1S和05s
uchar a=0;
sbit fmq=P1^0;
主程序:
void main( )
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
fmq=1;
a=20;
while(a!=0);//等待20次中断
fmq=0;
a=10;
while(a!=0);//等待10次中断
}
}
中断程序为:
void timer0( )interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a--;
}
完整的源程序:
#include<reg52h>
define uint unsigned int
sbit spk=P1^2; //与喇叭相连接的单片机引脚的定义
void delayms(uint); //延时子函数声明
main()
{
uint i=8; //轰鸣的次数
spk=0; //喇叭的初始状态为不响
while(i) //喇叭鸣响控制核心
{
spk=!spk;
delayms(1000); //延时1000毫秒
i--;
}
}
void delayms(uint ms) //延时子函数
{
uint x,y;
for(x=ms;x>0;x--);
for(y=110;y>0;y--);
}
哥们专门给你写的,看的够明白吧
如果是有源蜂鸣器的话很简单,只需要按照对应的电路给出电平(比如PNP驱动的只要给出低电平即可),无源的麻烦一点,需要给一定频率的方波才能发声,增强型51可以直接使用PWM,普通51可以使用定时器模拟PWM进行驱动,网上的例子很多,多看看就行了
你们给问题总是条件不全面!
假设P11控制LED,低电平亮;
P12控制蜂鸣器,低电平响。
sbit p11=p1^1;
sbit p12=p1^2;
if((p11=!p11) && (p11==1))
{
p12=0;
//此处延时50毫秒
p12=1;
}
#include<reg51h>
#define uint unsigned int
#define uchar unsigned char
sbit LED0=P1^0;
sbit Buzzer=P1^1;
void delay_ms(uint xms)//x是多少就是多少ms
{ uint y,z;
for(y=xms;y>0;y--)
for(z=110;z>0;z--);
}
void main()
{
P1=0x00;//这个值的设定参照你的开发板确定,也就是你的发光管与蜂鸣器是高电平工作还是低电平工作
while(1)
{
LED0=1;
Buzzer=1;
delay_ms(500);//延时05s
LED0=0;
Buzzer=0;
delay_ms(500);
}
}
电路图如下:
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小。
单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。
扩展资料:
有源蜂鸣器和无源蜂鸣器的区别:
这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。
而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。
有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。
无源蜂鸣器的优点是:便宜且声音频率可控,可以做出“多来米发索拉西”的效果。在一些特例中,可以和LED复用一个控制口 有源蜂鸣器的优点是:程序控制方便 。
以上就是关于如果晶振频率12MHz, 试用定时器编写程序,完成一蜂鸣器响1S,停0.5S 的程序全部的内容,包括:如果晶振频率12MHz, 试用定时器编写程序,完成一蜂鸣器响1S,停0.5S 的程序、让单片机的蜂鸣器1秒钟响一次 下面的是自带的程序 看起来有点麻烦 谁帮我用蜂鸣器来实现1秒钟响一次的程序、51单片机蜂鸣器响程序怎么写最简单的。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)