STM32F1x系列——按键输入实验

来源:互联网 发布:淘宝裂变有危险吗 编辑:程序博客网 时间:2024/06/01 21:42

      今天学习了STM32F1x系列的按键输入实验,具体上分为三个步骤:

(1)使能按键对应IO口时钟,调用函数:RCC_APB2PeriphClockCmd()

(2)初始化IO模式:上拉/下拉输入。调用函数:GPIO_Init()

(3)扫描IO口电平(库函数/寄存器/位操作)

      主要说一下其中的按键扫描,思路图如下:

(1)按键扫描(支持连续按)的一般思路代码:

u8 KEY_Scan(void){if(KEY按下){delay_ms(10) ;   //延时10-20ms   用来去抖if(KEY确实按下){return  KEY_Value  ;}return 无效值 ;}}

(2)按键扫描(不支持连续按)的一般思路代码:(就是说按键按下了,没有松开只能算按了一次)

   在这里会用到c语言里的关键字:static

    a.   static声明的局部变量,存储在静态存储区

    b.   它在函数调用结束之后,不会被释放,它的值会一直保留下来

    c.    所以可以说static声明的局部变量,具有记忆功能

u8 KEY_Scan(void){static u8 key_up = 1 ;if(key_up&&KEY按下){dealy_ms(10) ; //延时,防抖key_up = 0 ; //标记这次key已经按下if(KEY确实按下){return  KEY_Value  ;}}else if(KEY没有按下){return 没有按下 ;}}

(3)按键扫描(两种模式合二为一)的一般思路:

u8 KEY_Scan(u8 mode){static u8 key_up = 1 ;if(mode == 1){key_up = 1 ;   //支持连续按}if(key_up&&KEY按下){dealy_ms(10) ; //延时,防抖key_up = 0 ; //标记这次key已经按下if(KEY确实按下){return  KEY_Value  ;}}else if(KEY没有按下){return 没有按下 ;}}
对函数传入的参数进行判断,就可以将两种模式合二为一,放入一个函数中去处理。



原创粉丝点击