复用功能按键输入(一键多用)

简介: 复用功能按键输入(一键多用)宏定义按键初始化延迟函数按键处理复位主函数


宏定义


#define LED_ON GPIO_ResetBits(GPIOC,GPIO_Pin_8)//亮
#define LED_OFF GPIO_SetBits(GPIOC,GPIO_Pin_8)//不亮
#define Key_DownStatu GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==0//按下
#define Key_UpStatu GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==1//松开
#define LEDPORT GPIO_Pin_8
#define KEYPORT GPIO_Pin_15
#define LEDOutputMode GPIO_Mode_Out_PP
#define Speed GPIO_Speed_50MHZ
#define KeyOutputMode GPIO_Mode_IPU


按键初始化


void Init_LED_Ked_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructrue;
  RCC_APB2PeriphClockCmd(Rcc_APB2Periph_GPIOC|Rcc_APB2Periph_GPIOB,ENABLE);
  //使能GPIOC,GPIOB端口时钟
  GPIO_InitStructrue.GPIO_Pin = LEDPORT;
  GPIO_InitStructrue.GPIO_Mode = LEDOutputMode;
  GPIO_InitStructrue.GPIO_Speed = Speed;
  GPIO_Init (GPIOC,&GPIO_InitStructrue);
  GPIO_SetBits(GPIOC,LEDPORT);
  GPIO_InitStructrue.GPIO_Pin = KEYPORT;
  GPIO_InitStructrue.GPIO_Mode =  KeyOutputMode;
  GPIO_InitStructrue.GPIO_Speed = Speed;
  GPIO_Init (GPIOB,&GPIO_InitStructrue);
  GPIO_SetBit(GPIOB,KEYPORT);
}


延迟函数


/*****************************************/
//1ms延迟函数
void Delay_ms(u16 time)
{
  u16 i=0;
  while(time--)
  {
    i = 12000;
  while(i--);
  }
}


按键处理


u8 KeyPressed(u16 time)
{
  u16 count = 0;
  if (Key_DownStatu)
  {
    Delay_ms(10);
  if (Key_DownStatu)
  { 
    while(!Key_DownStatu)
    {
           Delay_ms(10);
       count++;
    }
  }
  }
//返回0 无动作
//返回1 短按,灯亮与灭切换
//返回2 系统复位
 if (count == 0)
   return 0;
  else if (count < time/10)
   return 1;
  else
    return 2;
}


复位


void SYSReset(void)
{
  _set_FAULTMASK(1);//关闭中断
  NVIC_SystemReset();//系统复位
}


主函数


main(void)
{
  u16 count = 0;
  Init_LED_Ked_GPIO_Config();
  while(1)
  {
    switch(KeyPressed(3000))
    {
    case 0: break;
    case 1: count++;
      if (count % 2 == 0)
         LED_ON;
      else
       LED_OFF;
      break;
    case 2:
      Delay_ms(10);
      SYSReset();
      break;
    }
  }
  return 0;
}


相关文章
|
3月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
104 3
|
3月前
|
开发框架 前端开发 JavaScript
在Winform程序中增加隐藏的按键处理,用于处理一些特殊的界面显示或者系统初始化操作
在Winform程序中增加隐藏的按键处理,用于处理一些特殊的界面显示或者系统初始化操作
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
|
设计模式 Java 测试技术
使用命令模式重构播放器控制条
假如我们开发一个播放器,播放器有播放功能、拖动进度条功能、停止播放功能、暂停功能,我们在操作播放器的时候并不是直接调用播放器的方法,而是通过一个控制条去传达指令给播放器内核,具体传达什么指令,会被封装为一个个按钮。那么每个按钮就相当于对一条命令的封装。用控制条实现了用户发送指令与播放器内核接收指令的解耦。下面来看代码,首先创建播放器内核GPlayer类。
125 0
|
内存技术
STM32Fxx位带操作还不会?哲学三问让你实现位带自由(含位带操作核心代码)以LED与键盘为例
STM32Fxx位带操作还不会?哲学三问让你实现位带自由(含位带操作核心代码)以LED与键盘为例
蓝桥杯之单片机学习(五)——独立按键的基本操作与扩展应用
蓝桥杯之单片机学习(五)——独立按键的基本操作与扩展应用
313 0
蓝桥杯之单片机学习(五)——独立按键的基本操作与扩展应用
STM32:输入捕获模式测频率和占空比(内置1.实物图+2.代码部分/注释)
STM32:输入捕获模式测频率和占空比(内置1.实物图+2.代码部分/注释)
487 0
STM32:输入捕获模式测频率和占空比(内置1.实物图+2.代码部分/注释)