OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2793|回复: 6

战舰板上的按钮是带自锁功能的吗 我想用按钮控制LED亮灭 不分优先级的那种

[复制链接]

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2020-7-27
在线时间
17 小时
发表于 2020-7-27 11:31:08 | 显示全部楼层 |阅读模式
1金钱
if(KEY0 ==0&&KEY1 ==0)
    return 1;
  if(KEY0 ==0&&KEY1==1)
    return 2;
  if(KEY0 ==1&&KEY1==0)
    return 3;
  if(KEY0 ==1&&KEY1 ==1)
    return 4;


while(1)
{
   key=KEY_Scan(0); //µÃµ½¼üÖµ
  if(key)
  {         
   switch(key)
   {     
    case 1:
     LED1 =0;
     LED0 =0;
     break;
    case 2:  
     LED0 =0;
     LED1 =1;
     break;
    case 3:  
     LED0 =1;
     LED1 =0;
     break;
    case 4:
     LED1 =1;
     LED0 =1;
     break;
   
  }
  }else delay_ms(10);


这是我写的程序  不能实现我的想法

最佳答案

查看完整内容[请看2#楼]

各位 我测试的结果是按键不带自锁功能 ,由于我的程序里加了按键连续按下判断,当不开启连按功能时,按键松手灯保持,按下另一个键可切换 但不会同时亮,两个键同时按下时两个灯会同时亮,当开启连按功能的时候,按下按钮灯亮 松手之后灯灭 可以做到无视优先级 和我预想的一致 可以通过判断奇偶来做软件自锁
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2020-7-27
在线时间
17 小时
 楼主| 发表于 2020-7-27 11:31:09 | 显示全部楼层
本帖最后由 gm1204 于 2020-7-27 15:42 编辑

各位 我测试的结果是按键不带自锁功能 ,由于我的程序里加了按键连续按下判断,当不开启连按功能时,按键松手灯保持,按下另一个键可切换 但不会同时亮,两个键同时按下时两个灯会同时亮,当开启连按功能的时候,按下按钮灯亮 松手之后灯灭 可以做到无视优先级 和我预想的一致  可以通过判断奇偶来做软件自锁
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2020-7-27
在线时间
17 小时
 楼主| 发表于 2020-7-27 13:32:44 | 显示全部楼层
哪位大佬能给我讲一下吗
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3627
金钱
3627
注册时间
2019-8-14
在线时间
1054 小时
发表于 2020-7-27 13:41:13 | 显示全部楼层
战舰的按键实验不是有控制LED的功能吗
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4498
金钱
4498
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-7-27 14:00:39 | 显示全部楼层
你这个肯定不能实现的,松开就全灭了
回复

使用道具 举报

0

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2019-3-6
在线时间
36 小时
发表于 2020-7-27 14:03:44 | 显示全部楼层
把代码贴完整了

4个按键怎么初始化的,判断真假的逻辑是怎么做的
回复

使用道具 举报

0

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
432
金钱
432
注册时间
2016-6-23
在线时间
66 小时
发表于 2020-7-31 16:12:01 | 显示全部楼层
可以设置一个变量使按键带有自锁功能。
void KeySan(void)
{
   static unsigned char Su8KeyLock1; //1 号按键的自锁
   static unsigned int Su16KeyCnt1; //1 号按键的计时器
   static unsigned char Su8KeyTouchCnt1; //1 号按键的次数记录
   static unsigned int Su16KeyIntervalCnt1; //1 号按键的间隔时间计数器

   if(0!=KEY_INPUT1)//IO 是高电平,说明按键没有被按下,这时要及时清零一些标志位
   {
       Su8KeyLock1=0;
       Su16KeyCnt1=0;
   }

    if(Su8KeyTouchCnt1>1)
    {
        Su16KeyIntervalCnt1++;
       if(Su16KeyIntervalCnt1>=KEY_INTERVAL_TIME)
        {
             Su16KeyIntervalCnt1=0;
             Su8KeyTouchCnt1=0;
        }
    }   
}
else
{  
   if(0==Su8KeyLock1)//有键按下
   {
       Su16KeyCnt1++;
       if(Su16KeyCnt1>=KEY_FILTER_TIME)
       {
          Su8KeyLock1=1; //按键的自锁,避免一直触发
          Su16KeyIntervalCnt1=0; //按键有效间隔的时间计数器清零
          Su8KeyTouchCnt1++; //记录当前单击的次数

         if(1==Su8KeyTouchCnt1)
           {
              vGu8SingleKeySec=1;
           }
            else if(Su8KeyTouchCnt1>=2)
             {
                 Su8KeyTouchCnt1=0; //统计按键次数清零
                 vGu8SingleKeySec=1; //单击任务
                 vGu8DoubleKeySec=1; //双击任务  
                  
                     
              }
        }
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 00:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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