找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5231|回复: 9
收起左侧

如何结合单片机定时器实现按键按一下灯闪烁一次(我是菜鸟)

[复制链接]
ID:358564 发表于 2019-8-21 16:28 | 显示全部楼层 |阅读模式
cnt=0;
按键按下;cnt++;

if(cnt>3)
{
cnt=0;
}

要求按键每按一次灯闪烁一次,不能用delay(100)
这样子的延时函数,我写不出来,求大神帮忙。。。
回复

使用道具 举报

ID:332444 发表于 2019-8-21 20:53 | 显示全部楼层
假设LED=0亮;按键=0表示按下,那么,LED=按键按下;即可
回复

使用道具 举报

ID:267330 发表于 2019-8-21 21:27 | 显示全部楼层
用中断啊
回复

使用道具 举报

ID:602531 发表于 2019-8-21 23:03 | 显示全部楼层
结合定时器去做就好
回复

使用道具 举报

ID:437615 发表于 2019-8-21 23:14 | 显示全部楼层
这个要学一下,不是用定时器,用外中断0,外中断很容易,就三句EA=1;EX0=1;IT0=0;不过中断服务内闪灯还会用到延时
回复

使用道具 举报

ID:462827 发表于 2019-8-22 00:47 | 显示全部楼层
不能用delay就用定时中断呗
回复

使用道具 举报

ID:138097 发表于 2019-8-22 08:29 | 显示全部楼层
if(按键按下)
{
开启定时器中断;
}


void 定时器中断函数(100ms)
{
LED = !LED;
关定时器中断;
}
回复

使用道具 举报

ID:65956 发表于 2019-8-22 08:47 | 显示全部楼层
如果只是想按一下按键灯闪一下,那连定时器都不需要,三种方法,一种是放在你按键函数中去作,因为你按键时软件有防抖,所以时间足够灯闪一下了;另一种是设置一个标志位,按下按键时标志位置1,在主函数中判断该标志位,是1先清标志位后则灯闪一下,但这个需要用到延时函数;第3种就是用定时器,你按下按键时打开定时器,定时器设置多少时间后LED亮多久,时间到即关闭LED灯并关闭定时器,这样就可以了
回复

使用道具 举报

ID:214223 发表于 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;//开
这样就可以实现按键奇数次亮,偶数次灭。不要忘了写按键消抖。
回复

使用道具 举报

ID:601639 发表于 2019-8-22 10:00 | 显示全部楼层
按键程序要设置一个消抖,检测到按键弹起是定时器开始计数,同时点亮灯,定时时间到后,灯灭。也可以设置一个标志位,当按下时,标志位置1,时间到时标志位置0;在主函数里面检测到标志位时灯亮,标志位为0时灯灭。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表