#include "stm32f10x.h"
#include "led.h"
void led_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11);
}
void led1_Open(void) //led亮
{
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}
void led1_Off(void) //led灭
{
GPIO_SetBits(GPIOB,GPIO_Pin_1);
}
void led1_turn(void) //按键控制亮灭
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)
{
GPIO_SetBits(GPIOB,GPIO_Pin_1);
}else
{
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}
}
void led2_Open(void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_10);
}
void led2_Off(void)
{
GPIO_SetBits(GPIOB,GPIO_Pin_10);
}
void led2_turn(void)
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==0)
{
GPIO_SetBits(GPIOB,GPIO_Pin_10);
}else
{
GPIO_ResetBits(GPIOB,GPIO_Pin_10);
}
}
void led3_Open(void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_11);
}
void led3_Off(void)
{
GPIO_SetBits(GPIOB,GPIO_Pin_11);
}
void led3_turn(void)
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)
{
GPIO_SetBits(GPIOB,GPIO_Pin_11);
}else
{
GPIO_ResetBits(GPIOB,GPIO_Pin_11);
}
}
#ifndef _LED_H_
#define _LED_H_
void led_Init(void);
void led1_Open(void);
void led1_Off(void);
void led2_Open(void);
void led2_Off(void);
void led3_Open(void);
void led3_Off(void);
void led1_turn(void);
void led2_turn(void);
void led3_turn(void);
#endif
#include "stm32f10x.h"
#include "key.h"
#include "delay.h"
void key_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU; //上拉输入
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
}
uint8_t key_Getnum(void)
{
uint8_t keyNum=0;
//判断按键是否按下
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)
{
delay_ms(20); //消抖
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);
delay_ms(20);
keyNum=1;
}
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0)
{
delay_ms(20); //消抖
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0);
delay_ms(20);
keyNum=2;
}
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==0)
{
delay_ms(20); //消抖
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==0);
delay_ms(20);
keyNum=3;
}
return keyNum;
}
#ifndef _KEY_H_
#define _KEY_H_
#include "stdint.h"
void key_Init(void);
uint8_t key_Getnum(void);
#endif
#include "stm32f10x.h"
#include "led.h"
#include "key.h"
#include "delay.h"
uint8_t keyNum;
int main (void)
{
//初始化
led_Init();
key_Init();
while(1)
{
keyNum=key_Getnum();
/*按下按键1灯亮再次按下灯灭,按下按键2灯亮再次按下灯灭,按下按键3灯亮再次按下灯灭
if(keyNum==1)
{
led1_Open();
}
if(keyNum==2)
{
led1_Off();
}
*/
if(keyNum==1)
{
led1_turn();
}
if(keyNum==2)
{
led2_turn();
}
if(keyNum==3)
{
led3_turn();
}
}
}