找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1779|回复: 10
打印 上一主题 下一主题
收起左侧

求助大佬,怎么利用一个按钮来控制led点一下长亮点一下长灭

[复制链接]
跳转到指定楼层
楼主
我的这个程序有问题吗?

屏幕截图 2024-11-26 142338.png (25.4 KB, 下载次数: 0)

屏幕截图 2024-11-26 142338.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:276663 发表于 2024-11-26 21:14 | 只看该作者
  1. int main(void)
  2. {
  3.         u8 flag;

  4.         while(1)
  5.         {
  6.                 if(key==0)
  7.                 {
  8.                         if(flag)
  9.                         {
  10.                                 led=0;//灭
  11.                                 flag=0;
  12.                         }else
  13.                         {
  14.                                 led=1;//亮
  15.                                 flag=1;
  16.                         }
  17.                         while(key==0);
  18.                 }
  19.         }
  20. }
复制代码
回复

使用道具 举报

板凳
ID:498757 发表于 2024-11-26 21:44 | 只看该作者
第100行 写错了吧 ,这个逻辑有有点问题,  按键可以用中断
回复

使用道具 举报

地板
ID:1137686 发表于 2024-11-26 21:47 | 只看该作者
tianxiazone 发表于 2024-11-26 21:44
第100行 写错了吧 ,这个逻辑有有点问题,  按键可以用中断

就是我这个按键接的地,所以按下去读取的应该是0,所以用的reset,这个中断是什么意思啊,请教一下,我们老师上可就讲了这几个函数》
回复

使用道具 举报

5#
ID:161164 发表于 2024-11-26 23:21 | 只看该作者
有问题
没消抖
没松手检测
回复

使用道具 举报

6#
ID:23640 发表于 2024-11-27 09:44 | 只看该作者
判断按键里面加个延时再判断一次就实现你的功能了,你目前的程序因为没有延时,单片机跑太快按键可能会乱变灯
回复

使用道具 举报

7#
ID:583948 发表于 2024-11-28 10:17 | 只看该作者
本帖最后由 zpwgf 于 2024-11-28 10:21 编辑

HAL_GPIO_TogglePin使用这个函数就方便撒。比如:
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11) == 0)
    {
        HAL_Delay(10);
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11) == 0)
        {
            HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_10);
        }
    }
没错的话应该这样也可以。当然,这样不松手的话理论上会一直来回跳
回复

使用道具 举报

8#
ID:1091344 发表于 2024-11-28 11:21 | 只看该作者
按按键的时间和HAL_Delay(150),最好延时时间大于按键时间,让按一次只进入一次A11接地判定,还有A10一般做串口用,点灯有点大材小用了
回复

使用道具 举报

9#
ID:1091344 发表于 2024-11-28 11:25 | 只看该作者
在第一个if里面加延时,保证按一次按键只执行第一个一次if
回复

使用道具 举报

10#
ID:1137686 发表于 2024-11-28 15:33 | 只看该作者
会飞的鱼KKK 发表于 2024-11-28 11:21
按按键的时间和HAL_Delay(150),最好延时时间大于按键时间,让按一次只进入一次A11接地判定,还有A10一般做 ...

哈哈哈,小白一个,老师上课都没讲什么直接就让我们写了
回复

使用道具 举报

11#
ID:916493 发表于 2024-12-13 13:32 | 只看该作者
发表于 2024-11-28 15:33
哈哈哈,小白一个,
  1. u8 flag1 = 0;
  2. void key1_control (void)
  3. {
  4.         if (GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_0) != 0)
  5.         {
  6.                 delay_ms (10);
  7.                 if (GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_0) != 0)
  8.                 {
  9.                         while (GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_0) != 0) {}
  10.                         flag1++;
  11.                 }
  12.         }
  13.         if (flag1 % 2 == 1)
  14.                 GPIO_ResetBits (GPIOE, GPIO_Pin_2 | GPIO_Pin_3) ;
  15.         else
  16.                 GPIO_SetBits (GPIOE, GPIO_Pin_2 | GPIO_Pin_3);
  17. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表