OpenEdv-开源电子网

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

求助~请大家指点一下我这个按键实验程序错误之处

[复制链接]

3

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-4-14
在线时间
6 小时
发表于 2016-7-15 10:33:42 | 显示全部楼层 |阅读模式
[mw_shl_code=c,true]#include "KEY.h"
#include "delay.h"
#include "sys.h"
int main()
{
   //KEY_Init();
     GPIO_InitTypeDef GPIO_InitStruct;
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOB,ENABLE);
         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;  //初始化按键KEY0,KEY1,KEY2
         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;

         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;  //初始化LED1灯DS1
         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
         GPIO_Init(GPIOE,&GPIO_InitStruct);

         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;  //初始化LED0灯DS0
         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
         GPIO_Init(GPIOB,&GPIO_InitStruct);
         LED0=1;  //使LED0和LED1处于灭的状态
         LED1=1;
   while(1)
   {
                static u8 key_up=1;//按键按松开标志
              if(key_up&&(KEY0==0||KEY1==0||KEY2==0))
            {
                   key_up=0;
               delay_ms(10);//防抖动
              if(KEY0==0) //如果检测到KEY0按下,则翻转LED0
                  {LED0=!LED0;}
                  if(KEY1==0) //如果检测到KEY1按下,则翻转LED1
                  {LED1=!LED1;}
                  if(KEY2==0)  //如果检测到KEY2按下,则同时翻转LED0和LED1
                  {LED0=!LED0;
                   LED1=!LED1;}
            }
                else if(KEY0==1&&KEY1==1&&KEY2==1)key_up=1;
   }
}
[/mw_shl_code]
我想过按键实验来实现这样一个简单的功能,KEY0控制LED0灯的翻转,KEY1控制LED1灯的翻转,KEY2控制LED0以及LED1的同时翻转,但程序编完后烧录进stm32战舰开发板中两个LED灯都不亮,按键按下后无反应,软件仿真结果也不对~麻烦各位帮忙看一下问题出现在哪,谢谢大家
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
发表于 2016-7-15 10:35:07 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-4-14
在线时间
6 小时
 楼主| 发表于 2016-7-15 10:36:19 | 显示全部楼层
[mw_shl_code=c,true]#ifndef _KEY_H
#define _KEY_H
#include "stm32f10x.h"
void KEY_Init(void);
void KEY_scan(void);
#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)
#define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)
#define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)

#define LED0 PBout(5)
#define LED1 PEout(5)
#endif[/mw_shl_code]
回复 支持 反对

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-1-27
在线时间
184 小时
发表于 2016-7-15 10:38:05 | 显示全部楼层
程序逻辑有问题,好好看看
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-4-14
在线时间
6 小时
 楼主| 发表于 2016-7-15 10:39:16 | 显示全部楼层
sorry~帖子发错类型了,应该发悬赏贴的,头文件中的KEY_Init()和KEY_scan函数都是不用的~~
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-4-14
在线时间
6 小时
 楼主| 发表于 2016-7-15 10:41:06 | 显示全部楼层
不吃鱼的老鼠 发表于 2016-7-15 10:38
程序逻辑有问题,好好看看

你是说while死循环中吗?
回复 支持 反对

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-1-27
在线时间
184 小时
发表于 2016-7-15 11:22:19 | 显示全部楼层
微笑每一天 发表于 2016-7-15 10:41
你是说while死循环中吗?

按键扫描怎么做的
回复 支持 反对

使用道具 举报

8

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-7-14
在线时间
12 小时
发表于 2016-7-15 11:34:31 | 显示全部楼层
应该是static 用法有问题吧?以前貌似也遇到过这样的问题,不能第二次初始化,static只能第一次初始化
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-7-15
在线时间
0 小时
发表于 2016-7-15 12:51:58 | 显示全部楼层
static u8 key_up=1;//按键按松开标志   这个不应该在While语句里吧
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-4-14
在线时间
6 小时
 楼主| 发表于 2016-7-15 21:35:44 | 显示全部楼层
dream顺 发表于 2016-7-15 11:34
应该是static 用法有问题吧?以前貌似也遇到过这样的问题,不能第二次初始化,static只能第一次初始化

可是我查过C语言程序设计,上面说块内的static变量只在程序执行前进行一次初始化,这句是不是说static没影响啊
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-4-14
在线时间
6 小时
 楼主| 发表于 2016-7-15 21:36:14 | 显示全部楼层
shabiguanghuan 发表于 2016-7-15 12:51
static u8 key_up=1;//按键按松开标志   这个不应该在While语句里吧

我放到循环体外面开发板还是没反应~~
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 05:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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