STM32 按键检测
来源:互联网 发布:淘宝用户画像 编辑:程序博客网 时间:2024/05/17 08:20
#include <stm32f10x_lib.h>/********************************LED端口定义******************************/#define LED0 PAout(8)// PA8#define LED1 PDout(2)// PD2/*************************************按键IO口定义***********************************/ #define KEY0 PAin(13) //PA13#define KEY1 PAin(15)//PA15 void delayms(unsigned int xms) //非精确延时函数,8MHZ下大约延时1ms{ unsigned int i,j;for(i=xms;i>0;i--) for(j=860;j>0;j--);}/******************************************************************* 函 数 名:void LED_Init(void) ** 功 能:LED模块初始化** 参 数:无** 描 述:PA8与PD2两个IO端口** 使用说明LEDx为0时点亮,默认灭 ******************************************************************/void LED_Init(void){RCC->APB2ENR|=1<<2; //使能PORTA时钟当外设时钟没有启用时,软件不能读出外设寄存器的数值RCC->APB2ENR|=1<<5; //使能PORTD时钟 GPIOA->CRH&=0XFFFFFFFF; GPIOA->CRH|=0X00000001;//PA8 推挽输出 默认输入 GPIOA->IDR|=1<<8; //PA8 上拉,初始化时使PA8输出高 GPIOD->CRL&=0XFFFFF1FF;GPIOD->CRL|=0X00000100;//PD2 推挽输出默认输入GPIOD->IDR|=1<<2; //PD2 上拉,初始化时使PD2输出高 }/******************************************************************* 函 数 名:void KEY_Init(void) ** 功 能:键盘模块初始化** 参 数:无** 描 述:KEY0和KEY1两个按键对应IO口为PA13和PA15** 使用说明:无 ******************************************************************/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上拉GPIOA->ODR|=1<<15; //PA15上拉} /*********************************************************************** 函 数 名:unsigned char KEY_Scan(void) ** 功 能:键盘检测** 参 数:返回unsigned char 类型的键盘检测值** 描 述:KEY0和KEY1两个按键对应IO口为PA13和PA15** 使用说明KEY0按下,函数返回0,KEY1按下,函数返回1,若无按键按下,返回0 **********************************************************************/unsigned char KEY_Scan(void){ static unsigned char key_sign=1;//按键松开标志if(key_sign&&(KEY0==0||KEY1==0)){key_sign=0;if(KEY0==0){return 1;}else if(KEY1==0){return 2;}}else if(KEY0==1&&KEY1==1)key_sign=1; return 0;// 无按键按下返回0}/******************************************************************* 函数库说明:STM32 按键检测** 版 本:V0.9** 修 改:赵露 芜湖联大飞思卡尔工作室** 修改 日期:2011年9月8日** 使用 说明:PA8和PD2口LED随着PA13与PA15IO口按键按下闪烁** 版本 更新:详见readme.txt ******************************************************************//******************************************************************* 注意:** PA13与PA15口经过键盘接地,所以需开两个IO的上拉,具体见程序 ******************************************************************/ int main(void){ unsigned char K; //接收键盘检测返回的值LED_Init(); //LED模块初始化KEY_Init(); //键盘模块初始化while(1){K = KEY_Scan();//提取按键返回值 if(K){ switch(K){ case 1:LED0 = !LED0; //对LED取反达到可见效果break;case 2:LED1 = !LED1;break;}}else delayms(10); //延时,消抖} }