高中生
最后登录1970-1-1
在线时间 小时
注册时间2017-8-5
|
k1控制Led_G,k2控制Led_B
#ifndef __BSP_KEY_H
#define __BSP_KEY_H
#include "stm32f10x.h"
#define KEY_ON 1
#define KEY_OFF 0
#define KEY1_GPIO_PIN GPIO_Pin_0
#define KEY1_GPIO_PORT GPIOA
#define KEY1_GPIO_CLK RCC_APB2Periph_GPIOA
#define KEY2_GPIO_PIN GPIO_Pin_13
#define KEY2_GPIO_PORT GPIOC
#define KEY2_GPIO_CLK RCC_APB2Periph_GPIOC
void KEY1_GPIO_Config(void);
void KEY2_GPIO_Config(void);
uint8_t Key_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin);
#endif /* __BSP_KEY_H */
#include "bsp_key.h"
void Delay(uint32_t count)
{
for(;count!=0;count--);
}
void KEY1_GPIO_Config(void)
{
GPIO_InitTypeDef KEY1_GPIO_InitStruct;
RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK,ENABLE);
KEY1_GPIO_InitStruct.GPIO_Pin = KEY1_GPIO_PIN;
KEY1_GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(KEY1_GPIO_PORT,&KEY1_GPIO_InitStruct);
}
void KEY2_GPIO_Config(void)
{
GPIO_InitTypeDef KEY2_GPIO_InitStruct;
RCC_APB2PeriphClockCmd(KEY2_GPIO_CLK,ENABLE);
KEY2_GPIO_InitStruct.GPIO_Pin = KEY2_GPIO_PIN;
KEY2_GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(KEY2_GPIO_PORT,&KEY2_GPIO_InitStruct);
}
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON)
{
Delay(20000);//软件消抖
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON)
{//松手检测
while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);
return KEY_ON;
}
else return KEY_OFF;
}
else return KEY_OFF;
}
#include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h>
#include "bsp_led.h"
#include "bsp_key.h"
int main(void)
{
// 来到这里的时候,系统的时钟已经被配置成72M。
LED_G_GPIO_Config();
LED_B_GPIO_Config();
KEY1_GPIO_Config();
KEY2_GPIO_Config();
LED_B(OFF);
LED_G(OFF);
while(1)
{
if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == ((uint8_t)KEY_ON))
LED_G_TOGGLE;
if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == ((uint8_t)KEY_ON))
LED_B_TOGGLE;
}
// if
}
#ifndef __BSP_LED_H
#define __BSP_LED_H
#include "stm32f10x.h"
#define LED_G_GPIO_PIN GPIO_Pin_0
#define LED_G_GPIO_PORT GPIOB
#define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED_B_GPIO_PIN GPIO_Pin_1
#define LED_B_GPIO_PORT GPIOB
#define LED_B_GPIO_CLK RCC_APB2Periph_GPIOB
#define ON 1
#define OFF 0
// \ C语言里面叫续行符,后面不能有任何的东西
#define LED_G(a) if(a) \
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); \
else GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
#define LED_B(a) if(a) \
GPIO_ResetBits(LED_B_GPIO_PORT, LED_G_GPIO_PIN); \
else GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
// ^ 异或,C语言的一个二进制的运算符
// 与1异或改变,与0异或不变
#define LED_G_TOGGLE {LED_G_GPIO_PORT->ODR ^= LED_G_GPIO_PIN;}
#define LED_B_TOGGLE {LED_B_GPIO_PORT->ODR ^= LED_B_GPIO_PIN;}
void LED_G_GPIO_Config(void);
void LED_B_GPIO_Config(void);
#endif /* __BSP_LED_H */
// bsp :board support package 板级支持包
#include "bsp_led.h"
void LED_G_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
}
void LED_B_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(LED_B_GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Pin = LED_B_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_B_GPIO_PORT, &GPIO_InitStruct);
}
前几天下雨断电,没想到笔记本主板电源芯片烧坏了,真的心痛
|
|