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

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


宏定义


#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;
}


相关文章
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
|
11天前
|
Windows
MyKeymap按键映射工具
MyKeymap能减少键鼠切换、实现全键盘操作,让「编辑文字」和「窗口管理」更快捷。提升工作学习中写代码、编辑文字、整理笔记、管理窗口的效率,掌握MyKeymap后,能让使用Windows的日常,拥有流畅、舒适、顺滑的操作体验。
36 2
MyKeymap按键映射工具
|
8月前
多按键多界面二维数组表驱动设计
多按键多界面二维数组表驱动设计
44 0
|
9月前
|
设计模式 Java 测试技术
使用命令模式重构播放器控制条
假如我们开发一个播放器,播放器有播放功能、拖动进度条功能、停止播放功能、暂停功能,我们在操作播放器的时候并不是直接调用播放器的方法,而是通过一个控制条去传达指令给播放器内核,具体传达什么指令,会被封装为一个个按钮。那么每个按钮就相当于对一条命令的封装。用控制条实现了用户发送指令与播放器内核接收指令的解耦。下面来看代码,首先创建播放器内核GPlayer类。
93 0
|
9月前
|
Web App开发 缓存 JavaScript
简洁、巧妙、高效的长列表,无限下拉方案
简洁、巧妙、高效的长列表,无限下拉方案
85 0
|
11月前
一个案例带你了解独立式键盘设计原理
一个案例带你了解独立式键盘设计原理
126 0
|
Windows
scrlk键是什么意思(电脑键盘每个按键的作用详细图解)
scrlk键是什么意思(电脑键盘每个按键的作用详细图解)
3556 0
按键精灵设计的简单的重复输入动作
按键精灵设计的简单的重复输入动作
92 0