OpenEdv-开源电子网

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

求助难倒很多初学者的程序之按键实现LED闪烁

[复制链接]

32

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2011-11-21
在线时间
32 小时
发表于 2020-7-14 22:37:59 | 显示全部楼层 |阅读模式
1金钱
原子哥的历程中都是按一次点亮一个led灯,现在我想实现扫描到按键0时实现led0闪烁,扫描到按键1时实现led0和led1一起闪烁。这里涉及到一个死循环如何处理的问题?我觉得这个难倒好多初学者,请教下各位怎么实现?

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

使用道具 举报

12

主题

3397

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8670
金钱
8670
注册时间
2020-5-11
在线时间
4135 小时
发表于 2020-7-15 14:16:55 | 显示全部楼层
专治疑难杂症
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2020-7-15 15:18:05 | 显示全部楼层
看明白怎么亮灭的你说的应该不难吧
回复

使用道具 举报

32

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2011-11-21
在线时间
32 小时
 楼主| 发表于 2020-7-15 15:34:47 | 显示全部楼层
a5820736 发表于 2020-7-15 15:18
看明白怎么亮灭的你说的应该不难吧

难点在于松开按键,灯继续执行按键按下的状态(该闪烁闪烁,该流水灯就继续流水灯),直到扫描到新的按键按下后灯进入新的状态。
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2020-7-15 19:07:02 | 显示全部楼层
六画玄辉 发表于 2020-7-15 15:34
难点在于松开按键,灯继续执行按键按下的状态(该闪烁闪烁,该流水灯就继续流水灯),直到扫描到新的按键 ...

没明白难点在哪?你是要松开变不变?不变的话原子的教程就行,变得话,来个松开判断不进行了?
回复

使用道具 举报

48

主题

179

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2017-6-19
在线时间
90 小时
发表于 2020-7-16 14:49:53 | 显示全部楼层
你可以用
switch (表达式)
{
    case 常量表达式1:    语句1
    case 常量表达式2:    语句2
}
来做。参考历程如下:
/************************************************************/
int main(void)
{                       
        delay_init();                     //延时函数初始化          
        LED_Init();                         //LED端口初始化
        KEY_Init();          //按键端口初始化main()
while(1)                                                  
        switch(key)                  //判断key的值
        {                                 
                case KEY0_PRES:                 //KEY0 按下,key0=1
                        LED0=~LED0;          //LED0闪烁               
                        delay_ms(300);                                       
                break;
                               
                case KEY1_PRES:          //KEY1 按下,key1=1
                        LED0=~LED0;          //LED0和LED1闪烁       
                        LED1=~LED1;
                        delay_ms(300);       
                break;
        }
}

回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4500
金钱
4500
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-7-16 14:52:40 | 显示全部楼层
状态机了解下,你可以把分成两个状态,一个是LED1闪烁的状态,一个是LED0和1闪烁的状态,然后用switch case语句扩出来。用按键的触发实现状态转移
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
发表于 2020-7-16 16:17:25 | 显示全部楼层
这个其实很简单,读到key值以后,在主函数加switch  判断key值就行了,不加延时,这个很快
回复

使用道具 举报

5

主题

152

帖子

0

精华

高级会员

Rank: 4

积分
777
金钱
777
注册时间
2016-7-15
在线时间
119 小时
发表于 2020-7-16 20:55:36 | 显示全部楼层
闹呢?搞个标志位不就解决了。。。
好好学习,天天向上。
回复

使用道具 举报

5

主题

54

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2020-5-25
在线时间
85 小时
发表于 2020-7-17 08:50:18 | 显示全部楼层
按键自锁
回复

使用道具 举报

5

主题

54

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2020-5-25
在线时间
85 小时
发表于 2020-7-17 08:50:41 | 显示全部楼层
按键自锁
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 10:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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