OpenEdv-开源电子网

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

【求助】多个低电平按钮的困惑?

[复制链接]

7

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-9-16
在线时间
0 小时
发表于 2013-9-28 17:27:56 | 显示全部楼层 |阅读模式
用八个低电平有效的按钮 控制8个led灯开关。 前六个按钮正常。 后面两个 总是不正常不知道原因。求解 代码如下
应为KEY6 KEY7不正常所以没在if语句里
#include "key.h"
#include "delay.h"


//按键初始化
void KEY_Init(void)
{
RCC->APB2ENR|=1<<2;
GPIOA->CRH&=0x00000000;
GPIOA->CRH|=0x88888888; //默认下拉
GPIOA->ODR|=0xFF00; //设置上拉
}

//按键扫描处理
//mode:0不支持连续按,1支持连续按。
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1; //按键松开标志
if(mode)key_up=1; //支持连按

if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0))
{
delay_ms(10);
key_up=0;
if(KEY0==0)return 1;
else if(KEY1==0)return 2;
else if(KEY2==0)return 3;
else if(KEY3==0)return 4;
else if(KEY4==0)return 5;
else if(KEY5==0)return 6;
else if(KEY6==0)return 7;
else if(KEY7==0)return 8;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1&&KEY5==1)key_up=1;
return 0;
}
======================================================
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include "led.h"

int main(void)
{
u8 tabKey;
u8 i=0;
Stm32_Clock_Init(9); //初始化时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化为9600
KEY_Init();
LED_Init();
while(1)
{
i++;
tabKey=KEY_Scan(0); //获得键值
//printf("获得键值");
if(tabKey)
{
switch(tabKey)
{
case KEY_UP: //控制led0
LED0=~LED0;
printf("key_up\n");
break;
case KEY_DOWN:
LED1=~LED1;
printf("key_down\n");
break;
case KEY_LEFT:
LED2=~LED2;
printf("key_left\n");
break;
case KEY_RIGHT:
LED3=~LED3;
printf("key_right\n");
break;
case KEY_K5:
LED4=~LED4;
printf("key_k5\n");
break;
case KEY_K6:
LED5=~LED5;
printf("key_k6\n");
break;
case KEY_K7:
LED6=~LED6;
printf("key_back\n");
break;
case KEY_K8:
LED7=~LED7;
printf("key_enter\n");
break;
}
}else delay_ms(5);
if(i==100)
{
LED8=~LED8; //系统运行指示灯
i=0;
}
}
}

一天又过去了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-9-16
在线时间
0 小时
 楼主| 发表于 2013-9-28 19:02:10 | 显示全部楼层
没有、人能解开我的疑惑吗? 
我是通过排线吧led和key链接到了51的开发板上。。。。 为什么 后面两个按键不正常?
一天又过去了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-28 21:22:24 | 显示全部楼层
关闭JTAG先!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-9-16
在线时间
0 小时
 楼主| 发表于 2013-9-28 21:41:02 | 显示全部楼层
我没接jtag呀?
程序里 也要关?怎么关呢?
一天又过去了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-28 21:49:28 | 显示全部楼层
回复【4楼】chinayeren:
---------------------------------
这些IO默认是JTAG功能的,你再好好了解下stm32吧。
不是看你接不接,而是看内部设置的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-9-16
在线时间
0 小时
 楼主| 发表于 2013-9-28 22:00:24 | 显示全部楼层
翻了 光盘里的资料。 果然,关掉jtag就可以正常使用了。 谢谢
一天又过去了
回复 支持 反对

使用道具 举报

56

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2013-4-25
在线时间
0 小时
发表于 2013-9-28 22:07:33 | 显示全部楼层
key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0)
你这明明只控制了6个啊怎么可能实现8个
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-12 07:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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