×
单片机 > 单片机程序设计 > 详情

stm32学习笔记(二)按键实验

发布时间:2020-08-28 发布时间:
|

#include "key.h"

#include "delay.h"

//////////////////////////////////////////////////////////////////////////////////  

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//ALIENTEK Mini STM32开发板

//按键输入 驱动代码    

//正点原子@ALIENTEK

//技术论坛:www.openedv.com

//修改日期:2014/3/06

//版本:V1.0

//版权所有,盗版必究。

//Copyright(C) 广州市星翼电子科技有限公司 2009-2019

//All rights reserved    

//////////////////////////////////////////////////////////////////////////////////  

      

//按键初始化函数 

//PA15和PC5 设置成输入

void KEY_Init(void)

{


GPIO_InitTypeDef GPIO_InitStructure;

 

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟

 

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试


GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15;//PA15

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入

  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15


GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;//PC5

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入

  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5

 

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PA0

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉   

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0


//按键处理函数

//返回按键值

//mode:0,不支持连续按;1,支持连续按;

//返回值:

//0,没有任何按键按下

//KEY0_PRES,KEY0按下

//KEY1_PRES,KEY1按下

//WKUP_PRES,WK_UP按下 

//注意此函数有响应优先级,KEY0>KEY1>WK_UP!!

u8 KEY_Scan(u8 mode)

{  

static u8 key_up=1;//按键按松开标志

if(mode)key_up=1;  //支持连按   

if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))

{

delay_ms(10);//去抖动 

key_up=0;

if(KEY0==0)return KEY0_PRES;

else if(KEY1==0)return KEY1_PRES;

else if(WK_UP==1)return WKUP_PRES; 

}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;      

return 0;// 无按键按下

}

 

KEY0 对应PC5  KEY1 对应PA15   都设置为默认上拉

PA0设置为默认下拉


GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读的是GPIOx_IDR,读的是当IO口设置为输入状态时候的IO口值 

               GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读的是GPIOx_ODR,读的是当IO口设置为输出状态时候的IO口值 


GPIO_ReadInputDataBit函数,引脚设置为默认上拉,无按键返回值为1,有按键返回值为零


引脚设置为默认下拉,无按键返回值0,有按键返回值为1。




#include "led.h"

#include "delay.h"

#include "sys.h"

#include "key.h"

//ALIENTEK Mini STM32开发板范例代码2

//按键输入实验    

//技术支持:www.openedv.com

//广州市星翼电子科技有限公司

 int main(void)

 {

u8 t=0;   

delay_init();     //延时函数初始化   

LED_Init();   //初始化与LED连接的硬件接口

KEY_Init();          //初始化与按键连接的硬件接口

LED0=0; //点亮LED

while(1)

{

t=KEY_Scan(0); //得到键值

switch(t)

{  

case KEY0_PRES:

LED0=!LED0;

break;

case KEY1_PRES:

LED1=!LED1;

break;

case WKUP_PRES:

LED0=!LED0;

LED1=!LED1;

break;

default:

delay_ms(10);

}  

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机的抗干扰措施有哪些