单片机蜂鸣程序 汇编 帮我看看吧

单片机蜂鸣程序 汇编 帮我看看吧,第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

      蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。我们开发板上常用的蜂鸣器就是常常说的交流蜂鸣器或直流蜂鸣器(自激式蜂鸣器)。 直流蜂鸣器是给一定的驱动直流电压就会响。而交流蜂鸣器是需要给蜂鸣器一个脉冲才会响。常见的有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单片机之蜂鸣器、急!谁能帮物我编个单片机程序,要求是蜂鸣器响一下,亮一个灯,再响一下,再亮第二个灯等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9824542.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存