你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

用枚举内型写的简单按键驱动,很方便!

[复制链接]
caizhiwei 发布时间:2015-1-13 08:59
//按键端口定义,有些电路是上拉,要特别注意原理图sch

//KEY1 : PB12  10K pull down 高电平有效
//KEY2 : PB13  10K pull down 高电平有效
//KEY3 : PB14  10K pull down 高电平有效
//KEY4 : PB15  10K pull down 高电平有效
//

  1. #ifndef __KEY_H
  2. #define __KEY_H

  3. #include "stm32f10x.h"
  4. #include "delay.h"


  5. typedef enum
  6. {
  7. KEY_NONE   =  0X00, //
  8. KEY_UP     =  0X10, //
  9. KEY_DOWN   =  0x20, //
  10. KEY_LEFT   =  0x40, //
  11. KEY_RIGHT  =  0x80
  12. } KeyValue;


  13. #define KEY1  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)
  14. #define KEY2  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)
  15. #define KEY3  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)
  16. #define KEY4  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)

  17. void KEY_Init(void);
  18. KeyValue KEY_Scan(void);

  19. #endif
复制代码
下面是C文件:
  1. #include "key.h"


  2. void KEY_Init(void) //IO初始化
  3. {
  4.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  
  5.   GPIO_InitTypeDef GPIO_InitStructure;      //初始化KEY
  6.   GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  7.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  // pull-DOWN input
  8.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  9.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  10. }


  11. KeyValue KEY_Scan(void)
  12. {         

  13.   if(KEY1==1||KEY2==1||KEY3==1||KEY4==1)        //任意一个按键按下
  14.     {
  15.       delay_ms(10);   //去抖动
  16.       
  17.       if(KEY1==1)
  18.       {         
  19.           return KEY_UP;     //keyvalue in your app   
  20.       }
  21.       else if(KEY2==1)
  22.       {      
  23.         return KEY_DOWN;     //keyvalue in your app         
  24.       }
  25.        else if(KEY3==1)
  26.       {   
  27.         return KEY_LEFT;      //keyvalue in your app         
  28.       }
  29.        else if(KEY4==1)
  30.       {      
  31.         return KEY_RIGHT;      //keyvalue in your app         
  32.       }      
  33.     }
  34.     else //if(KEY1&&KEY2)            
  35.     return (KEY_NONE);// 无按键按下
  36.     return KEY_NONE;
  37. }
复制代码
main函数调用:
  1. KeyValue KeyCurrentValue = KEY_NONE;
  2.    
  3.     KeyCurrentValue = KEY_Scan();

  4.     if(KeyCurrentValue==KEY_UP)printf("######## The KEY UP is OK ! \r\n");
  5.     if(KeyCurrentValue==KEY_DOWN)printf("######## The KEY DOWN is OK ! \r\n");
  6.     if(KeyCurrentValue==KEY_LEFT)printf("######## The KEY LEFT is OK ! \r\n");
  7.     if(KeyCurrentValue==KEY_RIGHT)printf("######## The KEY RIGHT is OK ! \r\n");
复制代码
哈哈,很简洁,很好用,任何mcu都可以直接用!

收藏 评论14 发布时间:2015-1-13 08:59

举报

14个回答
caizhiwei 回答时间:2015-1-13 09:01:11
源文件

key.zip

下载

1.22 KB, 下载次数: 10

沐紫 回答时间:2015-1-13 09:06:55
谢谢村长大大
lovewyufeng 回答时间:2015-1-13 09:06:56
无用、、、、、、、、、、
那片清茶 回答时间:2015-1-13 09:09:10
caizhiwei 回答时间:2015-1-13 09:14:35
lovewyufeng 发表于 2015-1-13 09:06
无用、、、、、、、、、、

哈哈,我看看你都发了那些垃圾帖子。。。你还好意思说
zhexingwei 回答时间:2015-1-13 10:34:46
好帖,帮顶
AndyYau-268557 回答时间:2015-1-13 10:47:49
很干净,风格好。
oipk 回答时间:2015-1-13 13:40:38
楼主这样写可读性很好,学习了。
witnessiz 回答时间:2015-1-13 13:41:40
无用,楼下保持队形
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版