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

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


宏定义


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


相关文章
|
机器学习/深度学习 人工智能 算法
小白教程-阿里云快速搭建Stable-Diffusion WebUI环境+免费试用
Stable-Diffusion 是目前热门的AIGC图像生成方案,通过开源与社区共享模型的方式,成为AI艺术与创意产业的重要工具。本文介绍通过阿里云快速搭建SD WebUI的服务,并有免费试用权益,适合新手入门。通过详细步骤指导,帮助读者轻松上手,享受创作乐趣。
2238 0
|
传感器 数据采集 人工智能
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
1226 2
|
消息中间件 SQL 容灾
深度剖析 RocketMQ 5.0,消息进阶:如何支撑复杂业务消息场景?
本文主要学习 RocketMQ 的一致性特性,一致性对于交易、金融都是刚需。从大规模复杂业务出发,学习 RocketMQ 的 SQL 订阅、定时消息等特性。再从高可用的角度来看,这里更多的是大型公司对于高阶可用性的要求,如同城容灾、异地多活等。
109335 287
|
机器学习/深度学习 PyTorch 算法框架/工具
图像数据增强库综述:10个强大图像增强工具对比与分析
在深度学习和计算机视觉领域,数据增强是提升模型性能和泛化能力的关键技术。本文全面介绍了10个广泛使用的图像数据增强库,分析其特点和适用场景,帮助研究人员和开发者选择最适合需求的工具。这些库包括高性能的GPU加速解决方案(如Nvidia DALI)、灵活多功能的Albumentations和Imgaug,以及专注于特定框架的Kornia和Torchvision Transforms。通过详细比较各库的功能、特点和适用场景,本文为不同需求的用户提供丰富的选择,助力深度学习项目取得更好的效果。选择合适的数据增强库需考虑性能需求、任务类型、框架兼容性及易用性等因素。
1889 10
|
算法 芯片 异构计算
Quartus II 中常见Warning 原因及解决方法
这篇内容是关于2010年作者在进行嵌入式FPGA开发时遇到的问题及解决方案的总结。主要问题包括时钟敏感信号在时钟边缘同时变化、信号截断、输出端口未使用、未定义的时钟信号、时钟延迟分析未启用、时序违规等。对应的解决措施涉及编辑vector source file、调整信号位数、添加约束信息、优化设计和设置时序要求等。此外,还包括对预发布设备时序特性的警告以及关于行波和门控时钟的注意事项。
|
Linux 数据处理
Linux中的mknod命令:深入解析与实用指南
**mknod命令详解:Linux下创建设备文件与FIFO的工具** mknod是Linux命令,用于创建设备文件(块设备、字符设备)和命名管道。设备文件连接用户空间与内核驱动,用于硬件交互;命名管道实现进程间通信。需root权限,语法:`mknod NAME TYPE MAJOR MINOR`,类型为&#39;b&#39;或&#39;c&#39;,主次设备号依硬件定。示例:创建块设备`/dev/sda`、字符设备`/dev/null`和FIFO`/tmp/myfifo`。使用时注意设备号正确性、避免名称冲突,并考虑使用udev自动管理。
|
C语言
深入理解C语言中的printf函数及数据输出
深入理解C语言中的printf函数及数据输出
1003 0
|
存储 Java 编译器
C 语言指针完全指南:创建、解除引用、指针与数组关系解析
创建指针 我们可以使用引用运算符 & 获取变量的内存地址:
527 0
|
人工智能 监控 搜索推荐
使用LangChain的自定义Tool+Agent, 构建全新的AIOps故障分析流程?
如果能够利用LangChain的Agent对问题的推理、任务的编排能力, 再进一步结合自定义的检查脚本工具, 是否就能够更好的实现故障分析的流程化智能编排和执行。
5966 0