OpenEdv-开源电子网

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

新手按键遇问题简单求解!

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-9-10
在线时间
12 小时
发表于 2019-9-19 16:15:42 | 显示全部楼层 |阅读模式
2金钱
初学小白,在做按键试验时下载后按键无作用,在线求解!!!
用的是STM32f103系列
主函数:
#include "stm32f10x.h"
#include "sys.h"
#include "led.h"
#include "delay.h"
#include "been.h"
#include "key.h"
#define led0 PBout(5)
#define led1 PEout(5)
#define been PBout(8)
int main()
{
void key_init();
void been_init();
void led_init();
void delay_init();
int key = 0;
while(1)
{
  key=key_scan();
  if(key==0|key==1|key==2|key==3)
   led0=0;led1=0;
  switch (key)
  {
   case 0:
    led0=!led0; led1=!led1; break;
   case 1:
    led0=!led0;break;
   case 2:
    led1=!led1;break;
   case 3:
    been=!been;break;
   default:
    delay_ms(20); break;
}
}
}
按键驱动函数:
#include "key.h"
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"
#define key0 PAin(0)
#define key1 PEin(2)
#define key2 PEin(3)
#define key3 PEin(4)
void key_init()
{
GPIO_InitTypeDef GPIO_Init_key;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);


GPIO_Init_key.GPIO_Mode=GPIO_Mode_IPD;
GPIO_Init_key.GPIO_Pin=GPIO_Pin_0;
GPIO_Init_key.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_Init_key);

GPIO_Init_key.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init_key.GPIO_Pin=GPIO_Pin_2;
GPIO_Init_key.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_Init_key);

GPIO_Init_key.GPIO_Pin=GPIO_Pin_3;
GPIO_Init(GPIOE,&GPIO_Init_key);


GPIO_Init_key.GPIO_Pin=GPIO_Pin_4;
GPIO_Init(GPIOE,&GPIO_Init_key);
}
int key_scan(void)
{
static int key_p=1;
if(key0==1&&key_p==1)
{
  delay_ms(20);
  key_p=1;
  if(key0==1)
  {
  return 0;
  key_p=0;
  }
  
}
else if(key1==0&&key_p==1)
{
  delay_ms(20);
  key_p=1;
  if(key1==0)
  {
  return 1;
  key_p=0;
  }
}
  else if(key2==0&&key_p==1)
{
  delay_ms(20);
  key_p=1;
  if(key2==0)
  {
  return 2;
  key_p=0;
  }
}
else if(key3==0&&key_p==1)
{
  delay_ms(20);
  key_p=1;
  if(key1==0)
  {
  return 3;
  key_p=0;
  }
}
return 4;
}
按键驱动头文件:
#ifndef __KEY_H__  //__KEY_H
#define __KEY_H__
#include "sys.h"
#define key0 PAin(0)
#define key1 PEin(2)
#define key2 PEin(3)
#define key3 PEin(4)
void key_init(void);
int key_scan(void);
#endif
前面led驱动和蜂鸣器驱动应该没有问题,求解!!!
其中使用了正点原子sts.h函数的PAout()与PAin()函数!




最佳答案

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

通过硬件仿真...直接在按键判断里边打个断点 全速运行 之后按下你判断的那个按键 然后看能不能运行到断点处
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14422
金钱
14422
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-9-19 16:15:43 | 显示全部楼层
ai804483253 发表于 2019-9-20 18:36
请问在调试系统 怎样按下按键??

通过硬件仿真...直接在按键判断里边打个断点  全速运行  之后按下你判断的那个按键 然后看能不能运行到断点处
啊哈~加油!!
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-9-10
在线时间
12 小时
 楼主| 发表于 2019-9-19 16:16:49 | 显示全部楼层
是正点原子的sys.h中的函数!
回复

使用道具 举报

6

主题

412

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2718
金钱
2718
注册时间
2019-8-14
在线时间
415 小时
发表于 2019-9-19 18:26:54 | 显示全部楼层
参照一下我们的例程
臭妹妹,冲冲冲
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14422
金钱
14422
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-9-19 18:55:58 | 显示全部楼层
简单点 直接仿真 在对应按键执行的函数下边打个断点 全速运行 按下按键 看看能不能走进去 走不进去代表你的扫描函数的代码都有问题 或者初始化都有问题 这个自己找了
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-9-10
在线时间
12 小时
 楼主| 发表于 2019-9-20 18:36:17 | 显示全部楼层
翼行园子 发表于 2019-9-19 18:55
简单点 直接仿真 在对应按键执行的函数下边打个断点 全速运行 按下按键 看看能不能走进去 走不进去代表你的 ...

请问在调试系统 怎样按下按键??
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-9-10
在线时间
12 小时
 楼主| 发表于 2019-9-21 15:20:44 | 显示全部楼层
翼行园子 发表于 2019-9-19 18:55
简单点 直接仿真 在对应按键执行的函数下边打个断点 全速运行 按下按键 看看能不能走进去 走不进去代表你的 ...

谢谢~已经找到问题,谢谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 23:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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