OpenEdv-开源电子网

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

六个独立按键用原子程序发现只有3个有用,其它三个没用,请问是什么原因

[复制链接]

23

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2015-5-30
在线时间
9 小时
发表于 2015-9-21 19:43:01 | 显示全部楼层 |阅读模式
5金钱
程序如下
h文件部分:
#define KEY0   GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)
#define KEY1   GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)
#define KEY2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)
#define KEY3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)
#define KEY4  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)
#define KEY5 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)


#define KEY_UP      1
#define KEY_RIGHT   2
#define KEY_DOWN    3
#define KEY_LEFT    4
#define KEY_START   5
#define KEY_SELEC   6


按键扫描程序:
#include "key.h"

void KEY_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//KEY,????????
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13;
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_SetBits(GPIOB,GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13);

}

u16 KEY_Scan(u16 mode)
{
  static u16 key_up=1;//°??ü????±ê????
if (mode) key_up=1;//?§??????°?
if(key_up&&KEY0==0||KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0)
{
   key_up=0;//???ü°???,
 if(KEY0==0) return KEY_UP ;
else if(KEY1==0) return KEY_RIGHT ;
else if(KEY2==0) return KEY_DOWN ;
else if(KEY3==0) return KEY_LEFT ;
else if(KEY4==0) return KEY_START ;
else if(KEY5==0) return KEY_SELEC ;

}
else if (KEY0==1&&KEY1==1 &&KEY2==1 &&KEY3==1 &&KEY4==1&&KEY5==1) key_up=1;
return 0;
}


下载发现PB8,9,12三个键发现没反应,然后我参考了网上,加了这个就有用了
uint8_t KeyScan( GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin_x )
{

    if ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON )
    {
        KeyDelay(0x57E40);  /* ???±5ms */
        if ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON )
        {
            while ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON ); /* ?????? */
            return KEY_ON;
        }
        else
        {
            return KEY_OFF;
        }
    }
    return KEY_OFF;
}

所以我想问下,是不是原子独立按键只能支持4个???




最佳答案

查看完整内容[请看2#楼]

当然不是.可以支持大于4个的. 你代码有bug,慢慢查
要学的东西很多,不要慌,一步一个脚印,扎扎实实的学
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-21 19:43:02 | 显示全部楼层
当然不是.可以支持大于4个的.
你代码有bug,慢慢查
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

23

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2015-5-30
在线时间
9 小时
 楼主| 发表于 2015-9-21 22:18:51 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
哦哦哦,好的,谢谢原子哥
要学的东西很多,不要慌,一步一个脚印,扎扎实实的学
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 01:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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