51单片机如何用一个定时器当多个延时电路用, 就是按下开关一,灯泡亮三秒。 按下开关二,灯泡亮五秒。

如题所述

可以的,定时器先定时出一个秒周期,然后对秒进行计数,得变量M。这个M,可以从1计数到一万、一百万等,也可以循环计数,即计数到100就又从1开始;
然后按下开关一时,就取当前的M值=K1,并且使灯泡亮,当M=K1+3时,使灯泡灭就是了。
同理,按下开关二时,就取当前的M值=K2,并使灯泡亮,当M=K2+5时,使灯泡灭就是了。追问

给写段示例代码可以吗,谢谢

追答

定时器输出秒周期的中断例程,就不说了;
处理方法很多种的;
方法一:
设置一个全局变量M,以便在中断例程里计数;
当发现有开关一(或者开关二等等),按下时,取 K1=M,同时触发驱动指定的灯泡亮,然后循环扫描,判断 M-K1=>3,成立即触发驱动指定的灯泡灭;
循环扫描可能会浪费运行时间;
方法二:
可以,将全局变量 K1、K2 放在中断例程中,初始化 K1=K2=-1;
当开关一按下时,置K1=0,同时触发驱动指定的灯泡亮;
而中断例程是每一秒钟运行一次,除了做 M++外,还要判断,K1、K2,≠-1,就+1,然后判断 K1>=3(K2>=5),成立,就触发驱动指定的灯泡灭,并且记得把 K1=-1;
大概这样,代码还是你自己去写;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-08-30
同时按二下