18

帖子

0

TA的资源

一粒金砂(中级)

21
 

好的哈  我是看国民官方历程照着加个按键控制 还没学到状态机

此帖出自无线连接论坛
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

22
 

这段代码是按键控制LED1的亮灭,也是按键没反应,上电瞬间按下按键才有反应,上电后再次按下led的状态不变的 

此帖出自无线连接论坛
 
 

回复

7003

帖子

11

TA的资源

版主

23
 
J1anbean 发表于 2023-5-5 16:28 这段代码是按键控制LED1的亮灭,也是按键没反应,上电瞬间按下按键才有反应,上电后再次按下led的状态 ...

你那个delay这样写不行的。按键检测不能这么写死的。特别是消抖的应用,一定要有状态机的思维来写。晚上我回去给你写个demo吧,主要我还没有写到中断的作业,到时录个视频。这样就容易接受一些。

此帖出自无线连接论坛
 
 
 

回复

7003

帖子

11

TA的资源

版主

24
 

我这里用状态机写大概写了一下检测的伪代码,你可以根据这样的思路写一下:

按键检测:

//假设 按键是上拉输入

#define 按下 0

#define 抬起 1

#define 消抖时间 10毫秒

typedef enum_按键状态{

抬起状态,

消抖状态,

按下状态,

};

 

int 按键检测(void)

{

static int 按键状态=抬起;

int 按键值;

static int 消抖计时=0;

if( 按键值 == 按下) //说明按键按下了

if ((按键状态 == 抬起装态)&& (消抖计时<消抖时间))

按键状态 = 消抖状态

计时开始

else if ((按键状态 == 消抖状态)&& (消抖计时>=消抖时间))

按键状态 = 按下状态

else if (( 按键值 == 抬起) && (按键状态 == 消抖状态)&&(消抖计时<消抖时间))

按键状态 = 消抖状态

else

按键装态 = 抬起状态;

消抖计时 停止;

消抖计时=0

}

 

main

{

while(1)

{

if 开始计时

消抖计时++

else

消抖计时 = 0;

if 按键状态 == 按下状态

做什么

else if 按键状态 == 抬起状态

按什么

 

//while里面最好不要加过多的延时

}

}


 

此帖出自无线连接论坛
 
 
 

回复

7003

帖子

11

TA的资源

版主

25
 
按键检测:
//假设 按键是上拉输入
#define 按下   0
#define 抬起   1
#define 消抖时间 10毫秒
typedef enum_按键状态{
    抬起状态,
    消抖状态,
    按下状态,
};

int   按键检测(void)
{
    static int 按键状态=抬起;
    int 按键值; 
    static int 消抖计时=0;
    if( 按键值 == 按下)   //说明按键按下了
        if ((按键状态 == 抬起装态)&& (消抖计时<消抖时间))
            按键状态 = 消抖状态
            计时开始
        else if ((按键状态 == 消抖状态)&& (消抖计时>=消抖时间))
            按键状态 = 按下状态
    else if  (( 按键值 == 抬起)  &&  (按键状态 == 消抖状态)&&(消抖计时<消抖时间)) 
        按键状态 = 消抖状态
    else
        按键装态 = 抬起状态;
        消抖计时 停止;
        消抖计时=0
}

main
{
    while(1)
    {
        if 开始计时
           消抖计时++
        else 
           消抖计时 = 0;
        if 按键状态 == 按下状态
           做什么
        else if 按键状态 == 抬起状态
           按什么

           //while里面最好不要加过多的延时
          
    }
}


    

 

此帖出自无线连接论坛
 
 
 

回复

7003

帖子

11

TA的资源

版主

26
 
J1anbean 发表于 2023-5-5 16:28 这段代码是按键控制LED1的亮灭,也是按键没反应,上电瞬间按下按键才有反应,上电后再次按下led的状态 ...

还有个中断函数的,我回去看看你的工程吧。

此帖出自无线连接论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

27
 

好的 就是实现上电LED1亮  然后按键PA5控制LED1的亮灭

此帖出自无线连接论坛
 
 
 

回复

7003

帖子

11

TA的资源

版主

28
 
J1anbean 发表于 2023-5-5 15:33 #ifndef __MAIN_H__ #define __MAIN_H__ #ifdef __cplusplus extern “C” { #endif #i ...

我回来看了一下你的代码:

#define KEY_INPUT_PORT GPIOA
#define KEY_INPUT_PIN GPIO_PIN_5

PA5最后别配置给普通IO使用,要不会下载不了固件。开发板的按键 的IO是PB1、PB2。你换成PB1,PB2试一下。

此帖出自无线连接论坛
 
 
 

回复

7003

帖子

11

TA的资源

版主

29
 

 这是开发板原理图中按键部分。

我有个帖子是,专门因为PA4、PA5配置成普通IO后下载不了固件的,你可以去看看。

image.png (27.1 KB, 下载次数: 0)

image.png
此帖出自无线连接论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

30
 

但是我的开发板按键是PA4 PA5 PA6    

 

此帖出自无线连接论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

31
 

知道是什么问题了  是PA5按键有问题开发板  换成PA4 PA6就没问题能实现了

此帖出自无线连接论坛
 
 
 

回复

7003

帖子

11

TA的资源

版主

32
 
J1anbean 发表于 2023-5-6 09:05 知道是什么问题了  是PA5按键有问题开发板  换成PA4 PA6就没问题能实现了

可能这款芯片要验证一下吧,我感觉也有得特殊。

此帖出自无线连接论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

33
 
lugl4313820 发表于 2023-5-6 09:48 可能这款芯片要验证一下吧,我感觉也有得特殊。

N32G031C8L

此帖出自无线连接论坛
 
 
 

回复

7003

帖子

11

TA的资源

版主

34
 

我的是N32WB031,不在一个频道呀。你可以到国民技术的论坛上提问题,他们的技术非常好的。

此帖出自无线连接论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

35
 
lugl4313820 发表于 2023-5-6 10:03 我的是N32WB031,不在一个频道呀。你可以到国民技术的论坛上提问题,他们的技术非常好的。

我想问问国民库函数Flash存储的读写函数是哪个啊

此帖出自无线连接论坛
 
 
 

回复

7003

帖子

11

TA的资源

版主

36
 
J1anbean 发表于 2023-5-6 11:25 我想问问国民库函数Flash存储的读写函数是哪个啊

有例程的呀,

 

此帖出自无线连接论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

37
 

这个函数?  

此帖出自无线连接论坛
 
 
 

回复

7003

帖子

11

TA的资源

版主

38
 

应该是吧。你看一下readme.txt说明文档。

此帖出自无线连接论坛
 
 
 

回复

238

帖子

2

TA的资源

纯净的硅(初级)

39
 
J1anbean 发表于 2023-5-5 16:28 这段代码是按键控制LED1的亮灭,也是按键没反应,上电瞬间按下按键才有反应,上电后再次按下led的状态 ...

建议看看反汇编代码,国民的delay函数在c99规范下会被常规gcc编译器优化掉。我之前用他们的N32G45x,搭配gcc的时候就遇到过。

此帖出自无线连接论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表