找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4789|回复: 14
打印 上一主题 下一主题
收起左侧

关于单片机独立按键程序里判断key1 和key2同时按下的意义

[复制链接]
跳转到指定楼层
楼主
ID:753985 发表于 2020-5-17 14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机设置两个独立按键,key1 和key2 key1 按下加0.1或10 ,key2 按下减0.1或10 ,想问一下,这个程序里判断key1 和key2同时按下有什么意义吗,是消抖吗还是什么,在仿真里反正是同时按下不增也不减,程序如下:
void key()
{
if(OK==1)
{
if(!key_1) //判断按键是否按下
{
OK=0;
if(sec==3) //执行按键对应的控制内容
{
if(shu<3000)shu+=10; //长按处理
}elseif(sec>1)
{
if(shu<3000)shu+=1; //短按处理
}
else
{
if(key_flag1)
{
key_flag1=0;
if(shu<3000)shu+=1;
}
}
SectorErase(0x2000); //保存数据到单片机EEPROM中
byte_write(0x2000,shu/256);
byte_write(0x2001,shu%256);

}
elsekey_flag1=1;

if(!key_2) //判断按键是否按下
{
OK=0; //执行按键对应的控制内容
if(sec==3)
{
if(shu>200)shu-=10;//长按处理
}elseif(sec>1)
{
if(shu>200)shu-=1; //短按处理
}
else
{
if(key_flag2)
{
key_flag2=0;
if(shu>200)shu-=1; //短按处理
}
}
SectorErase(0x2000); //保存数据到单片机EEPROM中
byte_write(0x2000,shu/256);
byte_write(0x2001,shu%256);
}
elsekey_flag2=1;
}
if(key_1==1&&key_2==1) //判断按键是否按下
{
sec=0; //重新计时
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:754172 发表于 2020-5-17 17:44 | 只看该作者
应该是消抖,普中的视频里有讲这个
回复

使用道具 举报

板凳
ID:584814 发表于 2020-5-17 19:26 | 只看该作者
程序设计逻辑有点呵呵,程序不完整先猜着:
双键同按是按键按下的计时归零(可能是在中断里,抬起按键并不归零)
回复

使用道具 举报

地板
ID:753985 发表于 2020-5-18 10:07 | 只看该作者
Magiks 发表于 2020-5-17 17:44
应该是消抖,普中的视频里有讲这个

还望楼主能不能详细指点一下,或者可不可以分享一下视频内容
回复

使用道具 举报

5#
ID:753985 发表于 2020-5-18 10:13 | 只看该作者
man1234567 发表于 2020-5-17 19:26
程序设计逻辑有点呵呵,程序不完整先猜着:
双键同按是按键按下的计时归零(可能是在中断里,抬起按键并不归零 ...

对楼主 猜对了,中断里也涉及了按键控制,但是还不太懂,我觉得可能是是消抖,中断程序如下,还望楼主指点
void init_1() interrupt 1  //定时器1 计数器0  interrupt 1 是定时器T0中断
{
        TL0 = 0xB0;               
        TH0 = 0x3C;                //设置定时初值
        ms++;                   //50ms定时计数
        if(ms%4 ==0)          //按键处理时间控制  每200ms处理一次
        {
                OK=1;
        }
        if(ms%5==0)          //蜂鸣器报警,指示灯闪烁处理
        {
                if(beep1==1)
                {
                        led=0;
                        beep=!beep;
                }else
                {
                    led=1;
                        beep=1;
                }
        }
        if(ms>19)            //1s定时  处理 定时器定时50ms,故20次中断就表示1s钟到达
        {
                shu1=(long)cs*65535+TH1*256+TL1;        //计算频率
                cs=TH1=TL1=0;
                ms=0;
                if(!key_1||!key_2)           //按键长按处理
                {
                        sec++;
                        if(sec>3)                 //长按3s判断
                        {
                                sec=3;
                        }
                }else
                {
                        sec=0;
                }
        }
}

void init_3() interrupt 3  //外部中断检测当前传感器频率  //定时器计数器1
{
        cs++;        //中断溢出计数
}


回复

使用道具 举报

6#
ID:282850 发表于 2020-5-18 14:55 | 只看该作者
同时按下是对sec清零
回复

使用道具 举报

7#
ID:753985 发表于 2020-5-18 17:24 | 只看该作者
f556 发表于 2020-5-18 14:55
同时按下是对sec清零

清零的意义是什么呢 ? 仿真里 同时按下是不加也不减,不加也不减为什么要设计判断它呢?我好蒙圈
回复

使用道具 举报

8#
ID:420836 发表于 2020-5-19 04:57 | 只看该作者
为了避免无效的按键操作,必须检测到同时或几乎同时发生的两个按键。 如果发生这种情况,则将其视为无效的键操作。
回复

使用道具 举报

9#
ID:213173 发表于 2020-5-19 08:25 | 只看该作者
wuxinxin 发表于 2020-5-18 17:24
清零的意义是什么呢 ? 仿真里 同时按下是不加也不减,不加也不减为什么要设计判断它呢?我好蒙圈

楼主理解错误并误导大家。程序中根本没有两个按键同时按下的语句。只是判断在没有按键按下时sec清0。
        if(key_1==1 && key_2==1) //判断按键是否按下        {
                sec=0; //重新计时
        }


回复

使用道具 举报

10#
ID:282850 发表于 2020-5-19 09:51 | 只看该作者
wuxinxin 发表于 2020-5-18 17:24
清零的意义是什么呢 ? 仿真里 同时按下是不加也不减,不加也不减为什么要设计判断它呢?我好蒙圈

清零就是 sec=0;
K1、K2才设计成加减,清零是到一定值后,迅速变成0,不用再一步步加减。
回复

使用道具 举报

11#
ID:695961 发表于 2020-5-19 11:24 | 只看该作者
两个按键同时按是有意议的判断。

现在的触摸屏都支持10个触点判断的。
回复

使用道具 举报

12#
ID:695961 发表于 2020-5-19 11:27 | 只看该作者
我觉得主要是节约硬件资源开销,减少GPIO的使用。

按键一般有【短按,长按,双击,三击】,这样使用一个GPIO就可以让用户有四种操作。如果再配上组合(不建议使用),如三长两短,就像发信号一样,就可以触发一些内置的管理员操作,就更高大上了。

个人观点。
回复

使用道具 举报

13#
ID:753985 发表于 2020-5-19 11:30 | 只看该作者
wulin 发表于 2020-5-19 08:25
楼主理解错误并误导大家。程序中根本没有两个按键同时按下的语句。只是判断在没有按键按下时sec清0。
        i ...

楼主说的对,我理解错了,就是正如你所说的,没有按下时计时清零
回复

使用道具 举报

14#
ID:753985 发表于 2020-5-19 11:32 | 只看该作者
TTQ001 发表于 2020-5-19 04:57
为了避免无效的按键操作,必须检测到同时或几乎同时发生的两个按键。 如果发生这种情况,则将其视为无效的 ...

一语惊人的大佬,这是我最想要的答案,
回复

使用道具 举报

15#
ID:1120100 发表于 2024-5-10 15:36 | 只看该作者
能给我讲讲吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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