关于定时器设计的门铃有点不解 ,求大神指导
在做用独立按键K1控制蜂鸣器设计门铃的实验中,按下K1,蜂鸣器一直响,并没有出现“叮咚”的声音啊,中断函数我也有点看不懂,不知道flag这个变量有什么作用,求大神讲解一下
void time0() interrupt 1
{
n++;
TH0=0Xff;
TL0=0X06; //250us
if(n==2000) //定时0.5s叮响0.5秒,咚响0.5秒
{
n=0;
if(flag==0)
{
flag=~flag;
}
else
{
flag=0;
stop=1;
TR0=0; //关闭定时器0
}
}
if(flag==0)
{ //通过改变定时计数时间可以改变门铃的声音
ding++; //叮
if(ding==1)
{
ding=0;
beep=~beep;
}
}
else
{
dong++;
if(dong==2) //咚
{
dong=0;
beep=~beep;
}
}
}
1 假设你现在状态是flag=1;n=0;进入中断后n=1,所以if(n==2000) 与if(flag==0)条件不满足,执行else
{
dong++;
if(dong==2) //咚
{
dong=0;
beep=~beep;
}
}
响咚声;
2 只要你n<2000,if(n==2000) 与if(flag==0)条件不满足,响咚声;
3 一旦n=2000,因为假定flag=1;此时执行else
{
flag=0;
stop=1;
TR0=0; //关闭定时器0
}
此时,flag=0跳转执行
if(flag==0)
{ //通过改变定时计数时间可以改变门铃的声音
ding++; //叮
if(ding==1)
{
ding=0;
beep=~beep;
}
}
发出/叮声,因此flag是声音切换标志!至于其他的声音不正常,由于你的程序没有完整贴出,别人也不好帮你!
xzf586 发表于 2017-9-11 16:38
1 假设你现在状态是flag=1;n=0;进入中断后n=1,所以if(n==2000) 与if(flag==0)条件不满足,执行else
...
谢谢,已经解决 楼主你好,能不能把你的源程序发一下,我现在也在弄这个
页:
[1]