OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2664|回复: 2

初学者之—按键控制LED灯闪烁,

[复制链接]

32

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2011-11-21
在线时间
32 小时
发表于 2020-7-15 19:44:46 | 显示全部楼层 |阅读模式
对于初学者来说,学会点亮LED灯和按键读取是比较容易的事,往往初学者会在这个基础上有一些其他的想法。比如之前是按下按键0点亮LED0,按下按键1点亮LED1;那么现在想按键按键0使LED0闪烁,即使松开也LED0也继续闪烁,直到按下按键1跳转到LED1闪烁。这个怎么去实现呢?我捣鼓了两天还是没有弄出了,今天弄出来了。我只想通过自己的经历让一些像我这样的人理清下思维。
要使按键0按下LED0闪烁,并且按键0松开LED0仍然闪烁,只要没有其他按键按下,LED0就一直闪烁。我一开始总是在主函数那里想逻辑,怎么跳出LED0闪烁。后来发现问题应该放在按键扫描那里,在按键扫描函数那里定义一个静态变量用来保存按键值,有按键按下时扫描是哪个按键按下并把按键值保存到静态变量中,然后返回这个静态变量,没有按键按下时任然返回这个静态变量就可以了。具体的程序如下:
uint8_t key_scan(void)
{
//   static uint8_t keyup = 1;

    static uint8_t cKeyState = 0;

    HAL_Delay ( 5 );


    if ( sw1 == 0 )
        cKeyState =  sw1_press;
    else if ( sw2 == 0 )
        cKeyState =  sw2_press;
    else if ( sw3 == 0 )
        cKeyState =  sw3_press;
    else if ( sw4 == 0 )
        cKeyState =  sw4_press;


/*

    if ( keyup && ( sw1 == 0 || sw2 == 0 || sw3 == 0 || sw4 == 0 ) )
    {
        HAL_Delay ( 50 );
        keyup = 0;

        if ( sw1 == 0 )
            cKeyState =  sw1_press;
        else if ( sw2 == 0 )
            cKeyState =  sw2_press;
        else if ( sw3 == 0 )
            cKeyState =  sw3_press;
        else if ( sw4 == 0 )
            cKeyState =  sw4_press;

    }
    else if ( sw1 == 1 && sw2 == 1 && sw3 == 1 && sw4 == 1 )
        keyup = 1;
*/


    return cKeyState;
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

172

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3142
金钱
3142
注册时间
2014-11-29
在线时间
183 小时
发表于 2020-7-15 20:27:55 | 显示全部楼层
lutigers
回复 支持 反对

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-7-15 21:54:03 | 显示全部楼层
能实现,方法不过不可取    还是学习学习状态机 这是个简单的http://www.openedv.com/forum.php ... d=301414&extra=
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 16:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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