51单片机如何让蜂鸣器只响0.5s

请问怎么修改代码,让蜂鸣器在函数运行时只响0.5s然后退出呢?(不用中断可以吗)
下边是程序:

/**************************************************************************************
* 蜂鸣器实验 *
实现现象:下载程序后蜂鸣器发声
注意事项:无
***************************************************************************************/

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h> //因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;

sbit beep=P1^5;

/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}

/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
while(1)
{
beep=~beep;
delay(1000); //延时大约100us 通过修改此延时时间达到不同的发声效果
}

}

第1个回答  2019-05-23
51单片机驱动蜂鸣器(蜂鸣器分有源与无源两种,有源指加电压就会响的,无源需要以一定频率的交变脉冲电压驱动),如果只响0.5S,只要用一个定时0.5S开关信号驱动、或者用0.5S的一定频率的脉动信号驱动就可以了。本回答被网友采纳
第2个回答  2019-05-24
加长延时就行
beep =~ beep ;
delay (1000);//延时大约100us
这样的话
delay (50000);//延时大约5000us即5ms
调用100次就是0.5秒了,程序如下

u8 i;
while(1)
{
beep =~ beep ;
for(i=0;i<100;i++)
{delay (50000);}//延时大约0.5秒
}
第3个回答  2019-05-23
学汇编的话,计算每条指令时间。把beep=~beep嵌入进去就行(c51的话上网找小精灵的一个软件,有精确延时。在延时嵌套一个就行,时间上0.5s应该不太准确)把延时函数调用放在while函数前,就执行一次就结束
第4个回答  2019-05-23
这个延时函数属于微秒级延时,0.5S延时很难达成,应该去找毫秒延时函数。
第5个回答  2019-05-23
单机片是什么意思?求科普
相似回答