OpenEdv-开源电子网

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

初学者 关于按键实验

[复制链接]

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2012-3-25
在线时间
0 小时
发表于 2012-3-26 20:50:53 | 显示全部楼层 |阅读模式
初学者 关于按键实验



void KEY_Init(void)
{
 RCC->APB2ENR|=1<<2;     //使能PORTA时钟
 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
 GPIOA->CRL|=0X00000008;  
 GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入  
 GPIOA->CRH|=0X80800000;       
 GPIOA->ODR|=1<<13;    //PA13上拉,PA0默认下拉
 GPIOA->ODR|=1<<15;    //PA15上拉
}
//按键处理函数
//返回按键值
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2!!
u8 KEY_Scan(void)

 static u8 key_up=1;//按键按松开标志 
 JTAG_Set(JTAG_SWD_DISABLE);
 if(key_up&&(KEY0==0||KEY1==0||KEY2==1))
 {
  delay_ms(10);//去抖动
  key_up=0;
  if(KEY0==0)
  {
   JTAG_Set(SWD_ENABLE);
   return 1;
  }
  else if(KEY1==0)
  {
   JTAG_Set(SWD_ENABLE);
   return 2;
  }
  else if(KEY2==1)
  {
   JTAG_Set(SWD_ENABLE);
   return 3;
  }
 }else if(KEY0==1&&KEY1==1&&KEY2==0)key_up=1;     
 JTAG_Set(SWD_ENABLE);
 return 0;// 无按键按下
}


黑体部分语句什么意思?谢谢
STM32爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2012-3-25
在线时间
0 小时
 楼主| 发表于 2012-3-26 20:52:11 | 显示全部楼层
此段程序是原子大哥开发板中的实验2
STM32爱好者
回复 支持 反对

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2012-3-26 21:27:48 | 显示全部楼层
黑体的加上之后程序只对你按下的时候那个边沿起作用,而对于你按下的低电平则不起作用……也就是说长按和单击是一样的效果了
努力,前进。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-26 21:37:49 | 显示全部楼层
回复【2楼】无痕:
---------------------------------
用于避免一次按下多次响应.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2012-3-26 21:40:37 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
长按的情况
努力,前进。
回复 支持 反对

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2012-3-25
在线时间
0 小时
 楼主| 发表于 2012-3-26 21:43:04 | 显示全部楼层
在此处static u8 key_up=1都设置key_up=1了 那if(key_up&&(KEY0==0||KEY1==0||KEY2==1))中“&&” 有什么意义呢
STM32爱好者
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-26 22:46:49 | 显示全部楼层
if(key_up&&(KEY0==0||KEY1==0||KEY2==1))

意思是,如果之前按下的键已经松开,并且现在有按键按下

&&是逻辑与的意思,说是“并且”也行。
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-26 22:52:31 | 显示全部楼层
"在此处static u8 key_up=1都设置key_up=1了 "

static 类型的变量,只初始化一次,可以认为是在函数第一次被调用的时候才进行初始化,
事实在,static类型的变量的生命周期和全局变量是一样的,只不过,函数外部无法使用这个变量。
打个比方,如果在函数里有key_up = 0;的动作,那么下次进入函数后,key_up == 0 而不是 key_up == 1

建议楼主找些C语言的书籍看看。C rimer lus, 很经典,听说谭浩强的书也不错,不过我没看过。
https://github.com/roxma
回复 支持 反对

使用道具 举报

5

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2013-10-14
在线时间
0 小时
发表于 2013-10-28 15:16:54 | 显示全部楼层
有帮助的文章都顶一下!
靡不有初?鲜克有终
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-9 14:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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