OpenEdv-开源电子网

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

关于按键,给个思路吧

[复制链接]

62

主题

202

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2013-11-15
在线时间
85 小时
发表于 2014-3-22 01:10:27 | 显示全部楼层 |阅读模式

 我想做个这样的:有4个按键,只有第一个按键按键按下,后面3个按下才有效。怎么实现?

谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

34

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-7-19
在线时间
0 小时
发表于 2014-3-22 01:12:17 | 显示全部楼层
比如说后面三个做成中断,中断中检测第一个按键的状态。其实不一定中断,只要在要执行的程序套上if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) )就好了。
ShawnLu
回复 支持 反对

使用道具 举报

10

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-1-20
在线时间
15 小时
发表于 2014-3-22 09:03:26 | 显示全部楼层
设置标志位flag,如当按键一按下,flag = 1; if(flag){其余三个按键的检测};
“你要保守你的心,胜过保守一切,因为一生的果效,都是由心发出”
("Above?all?else,guard?your?heart,for?it?is?the?wellspring?of?life"---NIV)。
哭着喊着也要进步。
回复 支持 反对

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2014-3-22 10:02:22 | 显示全部楼层
与一下不就好了
态度决定一切
回复 支持 反对

使用道具 举报

62

主题

202

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2013-11-15
在线时间
85 小时
 楼主| 发表于 2014-3-24 09:34:29 | 显示全部楼层
回复【3楼】yettt365:
---------------------------------
试了一下,貌似不行 。 大概给个例子?
回复 支持 反对

使用道具 举报

39

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2014-1-9
在线时间
8 小时
发表于 2014-3-24 10:47:37 | 显示全部楼层
我觉得2楼的方法可行啊,这是我写的三个按键的例子
 void  keyscan(void)
 {

   if(Key1 == 0)
 {
   delayms(10);
   if(Key1 == 0)
   {
Display_Control=1;//提示数码管显示更新
VOC_Display = 0; //剥夺AD显示的控制权

TR0 = 0;//关闭定时器0
TR1 = 1; //打开定时器1
   Key2_num=0;
   Key_time=0;
Key1_num++;

di();

   }
   while(!Key1);
 }

if( Key1_num !=0 )
{
  if(Key2 == 0)
  {
   delayms(10);
   if(Key2 == 0)
{  
   Display_Control=1;//提示显示更新

di();

Key_time=0;
Key2_num++;
if(Key2_num >= 5)
  Key2_num = 1;

}
while(!Key2);
  }

  if(Key3 == 0)
  {
   delayms(10);
   if(Key3 == 0)
   {    
        Key_time=0 ;
        Display_Control=1;//提示数码管显示更新
  di();
  switch(Key1_num)
  {
    case 1:
  switch(Key2_num)
  {
    case 1:
               if(Set_VOC_Control /1000 == 9)
                      Set_VOC_Control -=9000;
                else
    Set_VOC_Control +=1000;
break;
case 2:
               if(Set_VOC_Control /100%10 == 9)
                      Set_VOC_Control -=900;
               else
Set_VOC_Control +=100;
break;
case 3:
              if(Set_VOC_Control %100/10 == 9)
                     Set_VOC_Control-=90;
               else
    Set_VOC_Control +=10;
break;
case 4:
              if(Set_VOC_Control %10 == 9)
                      Set_VOC_Control -=9;
               else
Set_VOC_Control +=1;
break;
default:
break;
  }
 
 break;
  case 2:
  switch(Key2_num)
  {
    case 1:
                if(Set_Time_Control/1000 == 9)
                      Set_Time_Control -=9000;
                else
      Set_Time_Control +=1000;
                
break;
case 2:
               if(Set_Time_Control/100%10 == 9)
                      Set_Time_Control -=900;
               else
Set_Time_Control +=100;
break;
case 3:
               if(Set_Time_Control%100/10 == 9)
                      Set_Time_Control -=90;
               else
    Set_Time_Control +=10;
break;
case 4:
               if(Set_Time_Control%10 == 9)
                      Set_Time_Control -=9;
               else
Set_Time_Control +=1;
break;
default:
break;
  }


 break;
 default:
break;
  }
   }
   while(!Key3);
  }

  }

}
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 10:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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