OpenEdv-开源电子网

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

按键程序

[复制链接]

38

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-7-12
在线时间
0 小时
发表于 2011-11-7 15:11:40 | 显示全部楼层 |阅读模式

#include "stm32f10x.h"
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;           //GPIOA初始化
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;          //PA8连接LED
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
 GPIO_Init(GPIOA,&GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;         //PA13连接KEY
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
 GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void RCC_Configuration(void)
{
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);     //使能GPIOA时钟
}
void System_Configuration(void)
{
 SystemInit();              //系统初始化,选定系统时钟为72M
}
void Delay(u32 times)
{
 for(;times!=0;times--);
}
int main(void)
{
 System_Configuration();
 RCC_Configuration();
 GPIO_Configuration();
 
 while(1)
 { 
  int i;
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); 
  i=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13); 
  if(i==0x00)
  {
   GPIO_ResetBits(GPIOA,GPIO_Pin_8);
   GPIO_SetBits(GPIOA,GPIO_Pin_13);
   Delay(12000000);
  }
 }
}




这是我自己写的调用库函数程序,但没有按下按键,LED没有亮,我是菜鸟,请问那里有问题。
谢谢啊
用的是原子的板子

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2011-11-7 16:34:37 | 显示全部楼层
P13被JTAG占用了,如果你是用JTAG在线仿真是PA13是起不到按键作用的,可以把JTAG去掉,或者换成PA15试一下。
?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2011-11-7 16:39:17 | 显示全部楼层

while(1)
 { 
  int i;
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); 
  i=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13); 
  if(i==0x00)
  {
     Delay();//消抖一下 200MS-300MS
if(i==0x00)
{
   GPIO_ResetBits(GPIOA,GPIO_Pin_8); 
   Delay(12000000); 
   GPIO_SetBits(GPIOA,GPIO_Pin_8);
   Delay(12000000);

 GPIO_ResetBits(GPIOA,GPIO_Pin_8); 
   Delay(12000000);

}
  }
 }
}

下面是我自己做的程序,你可以参考一下。
#include "stm32f10x.h"


u8 key_get;//读取按键值
void  Led_Init(void);
void  delay(u16 a);
u8  Key_scan(void);


int  main(void)
{
 SystemInit(); //初始化时钟
 Led_Init();//初始化LED
 while(1)
 { 
   key_get = Key_scan();//读按键的值
   if(key_get == 0)  //有按键按下
   {
    delay(10); //消抖
  if(key_get == 0) //有按键按下
    {
   GPIO_ResetBits(GPIOA, GPIO_Pin_8); //点亮LED
    GPIO_ResetBits(GPIOD, GPIO_Pin_2);
   delay(100); //亮一会
  }
   }
   else
   {
  GPIO_SetBits(GPIOA, GPIO_Pin_8);
   GPIO_SetBits(GPIOD, GPIO_Pin_2);
   }
 }
}

void  Led_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;//定义GPIO结构体变量
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD , ENABLE);//初始化GPIO外部设备

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //初始化PA.8
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//初始化为输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//输出速度
  GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIO结构体

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_Init(GPIOD,&GPIO_InitStructure);
  GPIO_SetBits(GPIOA, GPIO_Pin_8);
  GPIO_SetBits(GPIOD, GPIO_Pin_2);
}

u8  Key_scan(void)
{
  u8 key_value;
  GPIO_InitTypeDef  GPIO_InitStructure;//定义GPIO结构体变量
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);//初始化GPIO外部设备

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //初始化PA.8
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//初始化为输入
  GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIO结构体

  key_value = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15);//读PA15的值
  return   key_value;

}
void  delay(u16 a)
{
 u16 x, y;
 for(x=0;x<a;x++)
  for(y=0;y<5000;y++);
}

 


 

?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-11-7 18:33:53 | 显示全部楼层
和JTAG引脚冲突时,必须先关掉JTAG功能!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-7-12
在线时间
0 小时
 楼主| 发表于 2011-11-7 19:27:06 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
我没有连接JTAG,你看我的程序哪里有问题,前面初始化应该没问题,好像没进入循环里
回复 支持 反对

使用道具 举报

38

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-7-12
在线时间
0 小时
 楼主| 发表于 2011-11-7 19:29:28 | 显示全部楼层
回复【2楼】suqingxiao:
---------------------------------
我没有连接JTAG,PA15好像和JTAG共用
回复 支持 反对

使用道具 举报

38

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-7-12
在线时间
0 小时
 楼主| 发表于 2011-11-7 19:59:16 | 显示全部楼层
回复【3楼】suqingxiao:
---------------------------------
你这个程序演示过?好用吗,怎么我按下按键,Led不亮
回复 支持 反对

使用道具 举报

38

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-7-12
在线时间
0 小时
 楼主| 发表于 2011-11-7 21:55:58 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
是SystemInit();,去掉后就可以了,但不明白为什么,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-11-7 23:10:50 | 显示全部楼层
回复【8楼】天马:
---------------------------------
我也不知道你的systeminit函数里面写的啥东东...
不好说了,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-5-6
在线时间
3 小时
发表于 2013-5-25 22:13:47 | 显示全部楼层
 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==1))
 {
  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==1)return 4;
 }else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;     
  return 0;// 无按键按下
}


 static u8 key_up=1;//按键按松开标志
 if(mode)key_up=1;  //支持连按   
这两句的作用是什么?老弟 请指点
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-26 00:28:14 | 显示全部楼层
回复【10楼】吴月涛:
---------------------------------
大哥啊,这么点代码有这么难么?半个坛子的帖子都被你问了个遍...
直接电话我!15902020353.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-5-6
在线时间
3 小时
发表于 2013-5-26 07:53:16 | 显示全部楼层
 
回复 支持 反对

使用道具 举报

9

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-4-22
在线时间
0 小时
发表于 2015-5-3 10:06:44 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
原子哥 广东号  话费撑不住啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-5 00:37:21 | 显示全部楼层
回复【13楼】小白110:
---------------------------------
这点钱都舍不得花,我也没辙了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
发表于 2015-5-5 15:45:50 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
原子哥,有问题可以电话请教吗,一般你什么时候有空,方便接的。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 20:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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