标题:
如何结合单片机定时器实现按键按一下灯闪烁一次(我是菜鸟)
[打印本页]
作者:
barret.zhang
时间:
2019-8-21 16:28
标题:
如何结合单片机定时器实现按键按一下灯闪烁一次(我是菜鸟)
cnt=0;
按键按下;cnt++;
if(cnt>3)
{
cnt=0;
}
要求按键每按一次灯闪烁一次,不能用delay(100)
这样子的延时函数,我写不出来,求大神帮忙。。。
作者:
xianfajushi
时间:
2019-8-21 20:53
假设LED=0亮;按键=0表示按下,那么,LED=按键按下;即可
作者:
jiangkeqin_sy
时间:
2019-8-21 21:27
用中断啊
作者:
bbandpp
时间:
2019-8-21 23:03
结合定时器去做就好
作者:
zhy123654
时间:
2019-8-21 23:14
这个要学一下,不是用定时器,用外中断0,外中断很容易,就三句EA=1;EX0=1;IT0=0;不过中断服务内闪灯还会用到延时
作者:
hantu
时间:
2019-8-22 00:47
不能用delay就用定时中断呗
作者:
whx.000
时间:
2019-8-22 08:29
if(按键按下)
{
开启定时器中断;
}
void 定时器中断函数(100ms)
{
LED = !LED;
关定时器中断;
}
作者:
aking991
时间:
2019-8-22 08:47
如果只是想按一下按键灯闪一下,那连定时器都不需要,三种方法,一种是放在你按键函数中去作,因为你按键时软件有防抖,所以时间足够灯闪一下了;另一种是设置一个标志位,按下按键时标志位置1,在主函数中判断该标志位,是1先清标志位后则灯闪一下,但这个需要用到延时函数;第3种就是用定时器,你按下按键时打开定时器,定时器设置多少时间后LED亮多久,时间到即关闭LED灯并关闭定时器,这样就可以了
作者:
Host
时间:
2019-8-22 09:40
cnt=0;按键按下;cnt++;
if(cnt>3)
{
cnt=0;
}
首先我觉得延时函数很简单,相较于定时器,不如采用延时。
其次就楼主简单的程序我觉得你可能是想通过按键按一下亮,按一下不亮
那么
可以这样写:
cnt=0;
cnt++;
if(a%2==0)
D1=1;//关
if(a%2==1)
D1=0;//开
这样就可以实现按键奇数次亮,偶数次灭。不要忘了写按键消抖。
作者:
那个谁和谁
时间:
2019-8-22 10:00
按键程序要设置一个消抖,检测到按键弹起是定时器开始计数,同时点亮灯,定时时间到后,灯灭。也可以设置一个标志位,当按下时,标志位置1,时间到时标志位置0;在主函数里面检测到标志位时灯亮,标志位为0时灯灭。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1