想问下以下程序是如何实现让蜂鸣器间隔不同时间响一次的?是什么语句在起作用?

#include<reg51.h>//加载头文件#defineucharunsignedchar#defineuintunsignedintsbitBEEP=P3^7;/... #include<reg51.h> //加载头文件
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P3^7; //定义P3.7管脚为蜂鸣器输出端
sbit K1=P1^4; //定义P1.4--p1.7管脚为按键输入端
sbit K2=P1^5;
sbit K3=P1^6;
sbit K4=P1^7;
void DelayMS(uint x) //延时子程序 1ms
{
uchar t;
while(x--)for(t=0;t<120;t++);
}
void Play(uchar t) //蜂鸣器响应程序
{
uchar i;
for(i=0;i<100;i++)
{
BEEP=~BEEP; //取反
DelayMS(t);
}
BEEP=0;
}
void main()
{
if(K1==0) Play(1); //k1按下,蜂鸣器每隔1ms响一次,响100次停止
if(K2==0) Play(2); //k2按下,蜂鸣器每隔2ms响一次,响100次停止
if(K3==0) Play(3); //k3按下,蜂鸣器每隔3ms响一次,响100次停止
if(K4==0) Play(4) //k4按下,蜂鸣器每隔4ms响一次,响100次停止
}
展开
 我来答
召走刀文
2012-10-26 · TA获得超过1204个赞
知道小有建树答主
回答量:597
采纳率:57%
帮助的人:232万
展开全部
主要起作用的代码是(不过根据代码,一共会响50次才对)
for(i=0;i<100;i++)
{
BEEP=~BEEP; //取反
DelayMS(t);
}

BEEP=~BEEP;作用就是让蜂鸣器进行响一次停一次的交替,交替的时间间隔是由DelayMS(t);实现的。其中参数t就是想要延时的时间。
循环前i为0,BEEP应该初始化为0(不响)。
第一次循环:
BEEP取反得1,此时蜂鸣器在响,延迟t毫秒(响t毫秒),i++,进入下一次循环
第二次循环:
BEEP取反得0,此时蜂鸣器不响,延迟t毫秒(不响t毫秒),i++,进入下一次循环
.........
循环结束后BEEP赋值为0,让蜂鸣器停止。
所以就实现了蜂鸣器每隔tms响一次,不过能听见50次
追问
你的回答好详细啊,我还有一个问题想了解下,像这种程序有方法实现变成汇编语言吗?
追答
程序本身逻辑并不是很复杂,写成汇编难度不是很大。如果懒着写的话,有的编译器是有反汇编功能的,直接将C程序变成汇编语言。然后再改一下,符合你自己的程序就可以了
宿兴电子
2024-11-28 广告
联系我们蜂鸣器的种类规格繁多,需先知道几个参数 ( 电压,电流,驱动方式,尺寸,连接/固定方式),当然更重要的是,想要获的声音 (音压大小,频率高低).工作电压:电磁式蜂鸣器,从1.5到24V, 压电式的从3V到220V都是可行的,但一般压... 点击进入详情页
本回答由宿兴电子提供
名师面授精华
2012-10-26 · TA获得超过421个赞
知道小有建树答主
回答量:236
采纳率:83%
帮助的人:83.2万
展开全部
延时子程序的调用。在play中调用了DelayMS延时程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式