下面这个程序,按下按键,蜂鸣器响一下,帮忙分析一下中断里面那些语句的作用

下面这个程序,按下按键,蜂鸣器响一下,帮忙分析一下中断里面那些语句的作用,第1张

首先,程序是不完整,如果这就是全部,无法实现功能;

假设这是一部分,我脑补完这一部分的程序,大概功能是想按键之后,蜂鸣器响05s就停止,中断后面的if(bzoff&&(cpbzon==0))就显得多余,关蜂鸣器直接在if(cpbzon)后加个else(BEEP=1;)就行了;

还有一种情况就是按下之后隔05s后蜂鸣器响02s,但是这种情况就缺少关蜂鸣器的代码了;

#include"reg52h"

#define uchar unsigned char

#define uint unsigned int

sbit BELL=P1^0;//定义蜂鸣器

sbit key1=P1^1;//定义按键

sbit key2=P1^2;//定义按键

uint num;

/1ms廷时/

void  delay_ms(uint z)

{

uint i,j;

for(i=0;i<z;i++)

for(j=0;j<110;j++);

}

/定时器初始化/

void init_timer0()

{

TMOD=0x01;

TH0=(65535-2000)/256;

TL0=(65535-2000)%256;

EA=0;

ET0=1;

TR0=1;

}

void main()

{

BELL=0;

init_timer0();

while(1)

{

    if(key1==0)

{

delay_ms(10);         //延时消抖

if(key1==0)           //再次判断按键是否真的被按下

{

while(key1==0);   //等待释放按键

EA=1;           //开启总中断

}

}

    if(key2==0)

{

delay_ms(10);         //延时消抖

if(key2==0)           //再次判断按键是否真的被按下

{

while(key2==0);   //等待释放按键

EA=0;     //关闭总中断

BELL=0;      //关闭蜂鸣器

}

}

}

}

void timer0() interrupt 1

{

TH0=(65535-2000)/256;

TL0=(65535-2000)%256;         //中断计时2ms(500Hz),之所以用中断是因为定时比较准确 想改延时就把里面的2000改掉,这个数除以1000得的数就是多少毫秒

num++;

if(num==1)                  //让蜂鸣器工以 500Hz频率工作

{

num=0;

BELL=~BELL;

}

}

如果是蜂鸣器的话,那么加一个电平信号就可以发声了。\x0d\FMQ EQU P10\x0d\ORG 0000H\x0d\LJMP MAIN\x0d\ORG 0030H\x0d\MAIN:\x0d\CPL FMQ\x0d\LCALL DELAY\x0d\SJMP MAIN\x0d\DELAY:\x0d\MOV R2,#200\x0d\DLY:\x0d\MOV R3,#250\x0d\DJNZ R3,$\x0d\DJNZ R2,DLY\x0d\RET\x0d\END

以上就是关于下面这个程序,按下按键,蜂鸣器响一下,帮忙分析一下中断里面那些语句的作用全部的内容,包括:下面这个程序,按下按键,蜂鸣器响一下,帮忙分析一下中断里面那些语句的作用、用C语言编写,两个按钮控制蜂鸣器工作。按钮1按下,蜂鸣器以500Hz的频率工作。按钮2按下,蜂鸣器停止工作、单片机用汇编语言怎么写一个蜂鸣器程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9688337.html

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

发表评论

登录后才能评论

评论列表(0条)

保存