DS12C887怎样设置几个闹钟?也就是先设置几个时间点,然后到每个时间点闹钟响。跪求各位大神。。。

DS12C887怎样设置几个闹钟?也就是先设置几个时间点,然后到每个时间点闹钟响。跪求各位大神。。。,第1张

在定时器里套用下面的函数 shi fen miao 是当前时间 alarm_shi和alarm_fen是闹钟时间beep_alarm()是蜂鸣器响的函数
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次


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

原文地址: http://outofmemory.cn/yw/10536784.html

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

发表评论

登录后才能评论

评论列表(0条)

保存