• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

如何实现按键按一次改变一次IO口的动作

liuxiaofei126 2019-04-22 浏览量:1413
如何实现按键按一次改变一次IO口的动作,比如按一次开灯,再按一次关灯,一直循环,
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 在程序上定义一个变量来记录开关的动作次数,通过与2取余的方式来判断当前的是开还是关,再进行不同的状态输出
    • 发布于 2019-04-22
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:9
  • #define LEDG_Reverse() GPIO_WriteBit(GPIOA GPIO_Pin_9 (BitAction)((1-GPIO_ReadOutputDataBit(GPIOA GPIO_Pin_9))))

    这个宏定义就是将PA9的IO口电平翻转,控制小灯亮灭

    • 发布于2019-04-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以用位带操作,直接用~paout(0)就可以了,这样就把pa0取反,每次检测按键的就执行这条语句

    如果是51单片机可以用翻转io功能实现,if(!key)P0^0=~P0^0,检测到按键值翻转led电平,用stm32和51一样通过位带操作翻转电平

    • 发布于2019-04-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 通用的定一个FLAG不就好了吗,按第一次加1,再按一次减1。判断FLAG就行了。
    • 发布于2019-04-23
    • 举报
    • 评论 0
    • 0
    • 0

  • C语言中可以对变量取反,对这种情况非常适用。
    • 发布于2019-04-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 你可以先读取IO口的状态,根据读取的状态取反后,输出到IO口,这样就可以每按一次,输出的状态都是上一次不一样了
    • 发布于2019-04-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种用一个状态位来指示当前IO电平的状态,然后每按下一次按键,就触发一次状态位的改变,然后另一个地方一直判断这个状态位,状态位改变的时候就改变IO电平
    • 发布于2019-04-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接调用库函数 ,有个 gpio triger 的 api ,就是反转 gpio 状态的

    没按一次按键,就 triger 一次,搞定。 现成的 库函数

    • 发布于2019-04-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个的实现不复杂,但也有一些需要了解的知识才方便完成:

    1. 按键行为监控(中断处理)

    2. 状态变量的翻转处理

    3. GPIO配置和控制

    • 发布于2019-04-25
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

如何实现按键按一次改变一次IO口的动作