void search_time()
{
void beep_alarm();
if(alarm1_key == 1)
{
if(shi==alarm1_shi&&fen==alarm1_fen&&miao==0)
beep_alarm();
}
}要求蜂鸣器每秒中响200ms,停800ms,则定时器最大只能在200ms时中断一次。
你程序中,机器周期估计是12T,但晶振看不出是多少,若你晶振是110592M,T1想定时3ms,也应该是(65536-2765);T0若是定时10ms,应是(65536-9216)。
现假设T0定时10ms,要求添加蜂鸣器响200ms,停800ms的功能,可在T0中断程序中添加:
1、在delayms()前添加 uchar Beep_time;
2、在T0中断程序中添加 if(Beep_time<100) Beep_time++;
else Beep_time=0;
if(Beep_time/20==0) BEEP=1; //假设BEEP=1时蜂鸣器响
else BEEP=0;主要起作用的代码是(不过根据代码,一共会响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次
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)