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

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

[复制链接]
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
无用,楼下保持队形
liuqihui-347226 回答时间:2015-1-13 13:42:29

无用,楼下保持队形
oipk 回答时间:2015-1-13 13:43:25
不过老实说,这样无用,真的,楼主。
lovewyufeng 回答时间:2015-1-13 13:43:33
哈哈 哈哈  英雄所见略同略同啊
caizhiwei 回答时间:2015-1-13 16:02:23
lovewyufeng 发表于 2015-1-13 13:43
哈哈 哈哈  英雄所见略同略同啊

有用也好无用也罢,你们纯属娱乐
我的目的是分享,即使没有也没碍着你呀,呵呵
fjjjnk1234 回答时间:2015-1-13 16:05:45
感谢分享

所属标签

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