找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11095|回复: 16
收起左侧

一个按键怎么实现开关的同时还带切换功能

[复制链接]
ID:108715 发表于 2016-11-21 20:15 | 显示全部楼层 |阅读模式
求教:一个按键怎么实现长按3秒开机的同时led1亮,再点按一下led2亮,再点按一下led3亮,再点按一下关机。求高手按键程序怎么写(我是新手,有点笨,请写具体点哦,谢谢)
回复

使用道具 举报

ID:138155 发表于 2016-11-21 21:18 | 显示全部楼层
用定时器计时处理
回复

使用道具 举报

ID:111634 发表于 2016-11-21 21:38 | 显示全部楼层
给你3个案例参考,一个是按键 4种不同方式响应,一个是一键3用,一个是短按长按不同方式。
回复

使用道具 举报

ID:111634 发表于 2016-11-21 21:39 | 显示全部楼层
本帖最后由 zl2168 于 2016-11-21 21:42 编辑

实例5  4种不同方式键控信号灯
4种不同方式键控灯电路.jpg


① 无锁按键:S0按下,VD0亮;S0释放,VD0暗;


② 无锁按键(前沿有效):S1按下,VD1亮;S1释放,VD1延时2s后暗。


③ 无锁按键(后沿有效):S2按下,VD2不亮;S2释放,VD2亮,并延时2s后暗。


模拟有锁按键:S3按第一次,VD3亮,并继续保持;按第二次,VD3才暗。


Proteus仿真一下,确认有效。
实例5 不同方式键控灯.rar (31.72 KB, 下载次数: 28)
回复

使用道具 举报

ID:111634 发表于 2016-11-21 21:46 | 显示全部楼层
本帖最后由 zl2168 于 2016-11-21 21:49 编辑

实例93  99.9秒秒表
按第一次K0(不闭锁),秒表按0.1s快速计时运行
按第二次K0(不闭锁),秒表停运行,但保持最后显示秒数。
按第三次K0(不闭锁),秒表显示清0。
先Proteus仿真一下,确认有效。
实例95 99.9秒秒表.rar (38.86 KB, 下载次数: 25)
回复

使用道具 举报

ID:111634 发表于 2016-11-21 21:51 | 显示全部楼层
本帖最后由 zl2168 于 2016-11-21 21:56 编辑

实例100 直流电机正反转及PWM调速
按一次加速键up占空比1;按住不放,快速加1;最大值100显示00)。
按一次减速键up占空比1;按住不放,快速减1;最小值20
先Proteus仿真一下,确认有效。
实例100 直流电机正反转及调速.rar (44.12 KB, 下载次数: 20)
回复

使用道具 举报

ID:123289 发表于 2016-11-21 23:41 | 显示全部楼层
主要是构思,要点有三:
回复

使用道具 举报

ID:123289 发表于 2016-11-21 23:42 | 显示全部楼层
要点1、键弹起起效。按下时做准备,不下结论。
回复

使用道具 举报

ID:123289 发表于 2016-11-21 23:42 | 显示全部楼层
要点2、做一个计时器,设为R_TIMER,键按下时开始记时,键弹起时清0。>3秒时判为长按。反之判为短按一次。
回复

使用道具 举报

ID:123289 发表于 2016-11-21 23:44 | 显示全部楼层
要点3、做一个计数器(设为R_TIMCE)和允许计数的开关(设为K_TIMCE)。
K_TIMCE:=1时允许R_TIMCE计数;=0时禁止R_TIMCE计数,长按后置1,R_TIMCE=4时清0。
R_TIMCE:长按后置1,短按则+1(当然必须在K_TIMCE=1时)。
当R_TIMCE=1时:开机、点亮led1、置K_TIMCE=1(相当于起动计数器);
当R_TIMCE=2时:点亮led2;
当R_TIMCE=3时:点亮led4;
当R_TIMCE=4时:关机,清K_TIMCE=0(相当于关闭计数器),灭所有灯。
回复

使用道具 举报

ID:123289 发表于 2016-11-21 23:48 | 显示全部楼层
初始化时,所有参数清0。计时用定时器。防键弹动另做(如排除<40ms键值)。
回复

使用道具 举报

ID:108715 发表于 2016-11-22 12:55 来自手机 | 显示全部楼层
yzwzfyz 发表于 2016-11-21 23:44
要点3、做一个计数器(设为R_TIMCE)和允许计数的开关(设为K_TIMCE)。
K_TIMCE:=1时允许R_TIMCE计数;= ...

好像有点思路了,我在想想,非常感谢。
回复

使用道具 举报

ID:149144 发表于 2016-11-22 13:41 | 显示全部楼层
给按键设置一个状态 i,0 1 2 3 ,按一下 +1  ,0关机, 1……3对应 LED 1  ……3
回复

使用道具 举报

ID:90566 发表于 2016-11-22 14:33 | 显示全部楼层
学习了,这样可以节约好几个口
回复

使用道具 举报

ID:108715 发表于 2016-12-4 11:18 来自手机 | 显示全部楼层
cuihaodianzi 发表于 2016-11-22 13:41
给按键设置一个状态 i,0 1 2 3 ,按一下 +1  ,0关机, 1……3对应 LED 1  ……3

这个我知道,可是我是要按键长按以后才工作,就是先长按三秒实现一个功能,然后再短按切换功能。没有长按的时候按键短按没效果。也等于是长按三秒开机,然后短按切换功能,不长按就是关机状态。
回复

使用道具 举报

ID:149144 发表于 2016-12-8 09:26 | 显示全部楼层
做一个松开的检测 if(BUTTON==0) 延时3S  if(BUTTON==0) 就是长按   然后 ==1 就是松开了(此时时间> 3s)
如果在 1s 内松开了 就是 短的按键
回复

使用道具 举报

ID:480120 发表于 2019-2-24 21:22 | 显示全部楼层
请问这个电路应该怎么设计呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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