
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
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。我们开发板上常用的蜂鸣器就是常常说的交流蜂鸣器或直流蜂鸣器(自激式蜂鸣器)。 直流蜂鸣器是给一定的驱动直流电压就会响。而交流蜂鸣器是需要给蜂鸣器一个脉冲才会响。常见的有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);
}
}
该程序实现蜂鸣器的响和停,程序较为简单,可以在此基础上进行扩展。
#include<reg52h>
//#include<intrinsh>
#define uchar unsigned char
uchar z,temp;
sbit LED=P0;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void main()
{
LED=0;
delay(80000);
LED=1;
delay(80000);
}
/void main()
{
temp=0xee;
LED=temp;
delay(8);
while(1)
{
temp=_crol_(temp,1);
LED=temp;
delay(8);
}
}
/
/#include<reg52h>
#include<intrinsh>
void delay1ms(unsigned int i)
{
unsigned char j;
while(i--)
{
for(j=0;j<115;j++) //1ms基准延时程序
{
;
}
}
}
void main()
{
P0=0xfe;
P1=0x7f; // 0111 1111
while(1){
P0=_crol_(P0,1);
P1=_cror_(P1,1);
delay1ms(500);
}
}/
你自己参考一下,我现在很忙这是我以前做的,
#include<reg52h>
sbit beep=P0^4;
void main()
{
beep=0;
while(1);
}
试试这个怎样,单片机在执行完程序之后会回到初始状态,然后再重新执行程序,所以蜂鸣器就会反复的开和关,听起来声音会小很多;加个while(1)死循环,让程序一直保持在beep=0的状态。
参考程序:
#include <reg52h>
sbit Beep = P3^0;
unsigned char t1s,t50ms;
unsigned char flag30s = 0,flag1s = 0;
void delayms(unsigned int xms)
{
unsigned int i,j;
for(i=0; i<xms; i++)
for(j=0; j<110; j++);
}
void Alarm(void)
{
Beep = 0;
delayms(200);
Beep = 1;
}
void main()
{
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0xB0;//50ms中断一次
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
if(flag30s)Beep = 0;//30s到蜂鸣器一直响
if(flag1s)//1s到,蜂鸣器响一下
{
flag1s = 0;
Alarm();
}
}
}
void TIM0(void) interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
t50ms++;
if(t50ms == 20)//1s
{
t50ms = 0;
t1s++;
flag1s = 1;
if(t1s == 30)//30s
{
TR0 = 0;
flag30s = 1;
}
}
}
以上就是关于单片机蜂鸣程序 汇编 帮我看看吧全部的内容,包括:单片机蜂鸣程序 汇编 帮我看看吧、51单片机之蜂鸣器、急!谁能帮物我编个单片机程序,要求是蜂鸣器响一下,亮一个灯,再响一下,再亮第二个灯等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)