初级会员
- 积分
- 116
- 金钱
- 116
- 注册时间
- 2017-7-3
- 在线时间
- 30 小时
|
8金钱
#include "stm32f10x.h"
#include "stm32_eval.h"
#include "led.h"
#include "key.h"
#include "usart.h"
#include <stdio.h>
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
int main(void)
{
unsigned char key;
Myusart_Init();
LED_Init();
KEY_Init();
while (1)
{
key = Key_Scan();
switch(key)
{
case '1': GPIO_ResetBits(GPIOB, GPIO_Pin_5);//Led1亮起 led0熄灭
GPIO_SetBits(GPIOE, GPIO_Pin_5);
break;
case '2':
break;
case '3': GPIO_ResetBits(GPIOE, GPIO_Pin_5);//反之
GPIO_SetBits(GPIOB, GPIO_Pin_5);
break;
case '0':
break;
}
}
}
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(EVAL_COM1, (uint8_t) ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
{}
return ch;
}
#include "key.h"
#include "led.h"
#include "usart.h"
#include <stdio.h>
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
//PA0 = key1; PE3 = key2; PE4 = key3;
void delay_ms(u16 time)//12MHz晶振延时函数
{
u16 i=0;
while(time--)
{
i=12000;
while(i--) ;
}
}
unsigned char Key_Scan(void)
{
//判断按键按了哪个
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON )//key1 按下
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON )
{
printf("done\r\n");
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON);
return key1;
}
}
else if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == KEY_ON )//key2 按下
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == KEY_ON )
{
printf("done\r\n");
while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == KEY_ON);
return key2;
}
}
else if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == KEY_ON )//key3 按下
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == KEY_ON )
{
printf("done\r\n");
while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == KEY_ON);
GPIO_ResetBits(GPIOE, GPIO_Pin_5);//led0亮起
return key3;
}
}
return 0;
}
#ifndef __KEY_H
#define __KEY_H
#include "stm32f10x.h"
#define key1 1
#define key2 2
#define key3 3
#define KEY_ON 0
#define KEY_OFF 1
void KEY_Init(void);
unsigned char Key_Scan(void);
void delay_ms(u16 time);
#endif
如题。。。另外两个按键按下去都能识别 不知道为什么WK_UP(PA0)无法识别 求解答我哪里出错了
|
最佳答案
查看完整内容[请看2#楼]
精英版上WK_UP(PA0) 按下去 是置高(自己找原理图看), 你这里写的 if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON )//key1 按下 又定义#define KEY_ON 0 是有问题的。 而且初始化的时候要把PA0下拉,不然是有问题的。 你可以 对照着按键例程学习。
|