首先,程序是不完整,如果这就是全部,无法实现功能;
假设这是一部分,我脑补完这一部分的程序,大概功能是想按键之后,蜂鸣器响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按下,蜂鸣器停止工作、单片机用汇编语言怎么写一个蜂鸣器程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)