找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1418|回复: 23
收起左侧

这是一个单片机红外解码的程序,但是长按会触发一次短按命令,怎么改成长按不触发短按啊

  [复制链接]
ID:1094127 发表于 2023-11-8 20:26 | 显示全部楼层 |阅读模式
本帖最后由 RDFGRSG 于 2023-11-10 11:41 编辑

#include <REGX52.H>
#include "ir2.h"




回复

使用道具 举报

ID:1094127 发表于 2023-11-8 23:04 | 显示全部楼层
有没有大佬指点一下
回复

使用道具 举报

ID:584814 发表于 2023-11-9 08:49 | 显示全部楼层
一般来说,这种情况是不松手测长按和短接造成的,长按中包含短按。
通常,改成松手后察看本次按键按下时长判断是长按还是短按就可以。
回复

使用道具 举报

ID:1094127 发表于 2023-11-9 09:16 | 显示全部楼层
man1234567 发表于 2023-11-9 08:49
一般来说,这种情况是不松手测长按和短接造成的,长按中包含短按。
通常,改成松手后察看本次按键按下时长 ...

怎么改啊
回复

使用道具 举报

ID:1090634 发表于 2023-11-9 15:44 | 显示全部楼层
加个接收时间长短判断,接收时间大于2秒的,可视为长按,否则为短按
回复

使用道具 举报

ID:1094127 发表于 2023-11-9 16:13 | 显示全部楼层
卡姿兰大眼睛 发表于 2023-11-9 15:44
加个接收时间长短判断,接收时间大于2秒的,可视为长按,否则为短按

程序里怎么改呢?
回复

使用道具 举报

ID:161164 发表于 2023-11-9 16:17 | 显示全部楼层
RDFGRSG 发表于 2023-11-9 16:13
程序里怎么改呢?

代码不完整
回复

使用道具 举报

ID:123289 发表于 2023-11-9 16:44 | 显示全部楼层
即然【长按会触发一次短按命令】哪么只要有长按,就去除一次短按。
如:
产生方,长按后N秒内的首个短按不放出。
使用方,长按后N秒内的首个短按不认可。
有其一即可。
回复

使用道具 举报

ID:1094127 发表于 2023-11-9 19:06 | 显示全部楼层

那部分不完整
回复

使用道具 举报

ID:1094127 发表于 2023-11-9 19:07 | 显示全部楼层
别说理论,上修改后代码
回复

使用道具 举报

ID:1094127 发表于 2023-11-9 19:15 | 显示全部楼层
理论我也能想到,怎么实现呢?
回复

使用道具 举报

ID:1094127 发表于 2023-11-9 19:15 | 显示全部楼层
卡姿兰大眼睛 发表于 2023-11-9 15:44
加个接收时间长短判断,接收时间大于2秒的,可视为长按,否则为短按

怎么实现呢?
回复

使用道具 举报

ID:161164 发表于 2023-11-9 21:12 | 显示全部楼层

main()呢?
回复

使用道具 举报

ID:161164 发表于 2023-11-9 21:13 | 显示全部楼层
RDFGRSG 发表于 2023-11-9 19:15
理论我也能想到,怎么实现呢?

说说你的理论
回复

使用道具 举报

ID:140489 发表于 2023-11-10 08:31 | 显示全部楼层
看看我这个帖子,也许能帮到你http://www.51hei.com/bbs/dpj-194975-1.html
回复

使用道具 举报

ID:161164 发表于 2023-11-10 09:00 | 显示全部楼层
RDFGRSG 发表于 2023-11-9 22:57
#include
#include "Delay.h"
#include "LCD1602.h"

Duanan_staet和Repeat_Flag在哪里置1?
回复

使用道具 举报

ID:1097455 发表于 2023-11-15 08:49 | 显示全部楼层
长按计时  松开判断
回复

使用道具 举报

ID:275826 发表于 2023-11-15 19:22 | 显示全部楼层
检测重复码次数,大于一定次数就作为长按
回复

使用道具 举报

ID:485350 发表于 2023-11-29 11:48 | 显示全部楼层
按键按下置位标志A并开始计时,如果长按时间到了,清除标志A,,,按键释放时,如果A为真,那么处理短按功能并清除标志A
回复

使用道具 举报

ID:57657 发表于 2023-11-29 13:12 | 显示全部楼层
按住按键计时毫秒,松开后再判断长短按并清零计时。
回复

使用道具 举报

ID:1101749 发表于 2023-11-29 16:09 | 显示全部楼层
char Scanf_Key(void) {         static unsigned char sta = 0;         static unsigned int cnt = 0;         switch(sta)         {                 case 0://用来检测是否有按键按下  有的话进入消抖状态 MODE_KEY==0为按下                                         if(MODE_KEY == 0) sta = 1;break;                 case 1:                                         if(++cnt > 50)//消抖50ms  如果50ms之后按键还是按下的状态则认为真的按下  否则就是抖动                                         {                                                         cnt=0;                                                         if(MODE_KEY == 0) sta = 2;//进入到下一个状态                                                         else sta = 0;//回归检测状态                                         }                                         break;                 case 2:                                         if(MODE_KEY==0)                                         {                                                  if(++cnt>1000)//长按                                                  {                                                                 sta = 3;                                                                 return 2;                                                  }                                         }                                         else //短按                                         {                                                         if(cnt>30)                                                         {                                                                 sta = 3;                                                                 return 1;                                                         }                                         }break;                 case 3:                                         if(MODE_KEY == 1)                                         {                                                         sta = 0;                                                         cnt = 0;                                         }                                         break;         }         return 0; }
回复

使用道具 举报

ID:1101749 发表于 2023-11-29 16:10 | 显示全部楼层
你试一下我发这个
回复

使用道具 举报

ID:1101749 发表于 2023-11-29 16:10 | 显示全部楼层
换个宏定义就可以了
回复

使用道具 举报

ID:275826 发表于 2023-11-30 09:06 | 显示全部楼层
luking 发表于 2023-11-29 16:09
char Scanf_Key(void) {         static unsigned char sta = 0;         static unsigned int cnt = 0;         switch(sta)         {  ...

楼主要的红外遥控器按键
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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