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);   //延时,消抖} } 
原创粉丝点击