OpenEdv-开源电子网

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

疑惑疑惑疑惑 按键控制跑马灯速度,为什么不能切换状态啊,求捞

[复制链接]

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2022-2-26
在线时间
15 小时
发表于 2022-3-25 21:39:38 | 显示全部楼层 |阅读模式
问题:为了让它以跑马灯形式亮,我得加个死循环吧,但是加了之后,我再按其他按键,它就跳不出来了,十分头疼
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"

int main(void)
{       
        u8 t=0;         //给mode赋值
        delay_init();                     //延时函数初始化          
        LED_Init();                                   //初始化与LED连接的硬件接口
        KEY_Init();                  //初始化与按键连接的硬件接口
        while(1)
        {
                t=KEY_Scan(0);                //mode得到键值
                if(t==KEY0_PRES)
                {
                        for(;;)
                        {                               
                                GPIO_ResetBits(GPIOA,GPIO_Pin_8); //LED0输出低
                                GPIO_SetBits(GPIOD,GPIO_Pin_2);//LED1输出高
                                delay_ms(300);
                                GPIO_SetBits(GPIOA,GPIO_Pin_8);//LED0输出高
                                GPIO_ResetBits(GPIOD,GPIO_Pin_2);//LED1输出低
                                delay_ms(300);
                        }
                }
                if(t==KEY1_PRES)
                {
                        for(;;)
                        {                               
                                GPIO_ResetBits(GPIOA,GPIO_Pin_8); //LED0输出低
                                GPIO_SetBits(GPIOD,GPIO_Pin_2);//LED1输出高
                                delay_ms(300);
                                GPIO_SetBits(GPIOA,GPIO_Pin_8);//LED0输出高
                                GPIO_ResetBits(GPIOD,GPIO_Pin_2);//LED1输出低
                                delay_ms(300);
                        }
                }
                if(t==WKUP_PRES)
                {
                        GPIO_SetBits(GPIOD,GPIO_Pin_2);//LED1输出高
                        GPIO_SetBits(GPIOA,GPIO_Pin_8);//LED0输出高
                }
                else
                        delay_ms(10);       
        }                 
}


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

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2021-5-15
在线时间
7 小时
发表于 2022-3-27 16:37:44 | 显示全部楼层
回复 支持 反对

使用道具 举报

34

主题

173

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1087
金钱
1087
注册时间
2017-3-10
在线时间
172 小时
发表于 2022-3-28 16:26:35 | 显示全部楼层
直接使用全局变量t,在按键中断处理中给t赋值哈。
回复 支持 反对

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2022-3-28 16:44:11 | 显示全部楼层
全局变量或者外部中断呗
回复 支持 反对

使用道具 举报

11

主题

114

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1128
金钱
1128
注册时间
2021-6-17
在线时间
206 小时
发表于 2022-3-28 18:26:26 | 显示全部楼层
t改为全局变量,用外部中断判断按键给t赋值,while(1)里只判断t的值把for的死循环删了,或者在for死循环里在加t的判断,让for的死循环能够退出,
回复 支持 反对

使用道具 举报

32

主题

187

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1123
金钱
1123
注册时间
2021-3-21
在线时间
172 小时
发表于 2022-3-29 14:28:57 | 显示全部楼层
感觉设置外部中断会比较好,判断哪个引脚按下再执行操作
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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