//LED.C
#include "led.h"
#include "stm32f10x.h"
void led_init(){
GPIO_InitTypeDef GPIO_InitStruture;//定义结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //使能PE时钟
GPIO_InitStruture.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruture.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruture.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruture);
GPIO_SetBits(GPIOB,GPIO_Pin_9);
GPIO_InitStruture.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruture.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruture.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStruture);
GPIO_SetBits(GPIOE,GPIO_Pin_0);
GPIO_InitStruture.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruture.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStruture.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStruture);
GPIO_SetBits(GPIOE,GPIO_Pin_1);
}
//led.h
#ifndef _LED_H
#define _LED_H
#include "sys.h"
#define LED1 PEout(1)//使用宏定义方便后面调用
#define LED2 PEout(0)
#define LED3 PBout(9)
void led_init();
#endif
//key.h
#ifndef _key_h
#define _key_h
#include "sys.h"
//这里用宏定义,使key0等分别对应几个针脚,并读取他的电平
#define key0 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_9)//PE9==>key0
#define key1 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_8)//PE8==>key1
#define key2 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_7)//PE7==>key2
void key_init();
int key_scan();
#endif
//key.c
#include "key.h"
#include "stm32f10x.h"
#include "delay.h"
void key_init(){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//打开PE时钟
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7;//PE8&PE9&PE7
GPIO_Init(GPIOE,&GPIO_InitStructure);
}
int key_scan(){//定义一个扫描函数
static u8 flag=1;//定义一个静态变量flag作为判断
if (flag==1&&(key0==0||key1==0||key2==0)){//key=0表上这个按钮被按下
delay_ms(10);//消抖:等待10毫秒,看看他是不是真的被按下
flag=0;
if(key0==0){//如果key0被按下...
return 1;//返回1
}else if(key1==0){
return 2;
}else if(key2==0){
return 3;
}
}else if(key0==1&&key1==1&&key2==1) flag=1;//所有键都没被按下,flag还是为1
return 0;//返回0代表没有被按下
}
//main.c
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int main(void)
{
u8 key = 0;
key_init();
led_init();
delay_init();
while(1)
{
key=key_scan();//将key_scan的结果赋值给key
if (key){//key不等于0时,往下执行
switch(key){//用了switch语句判断哪个按钮被按下
case 1:
PEout(1)=!PEout(1);
break;
case 2:
PEout(0)=!PEout(0);
break;
case 3:
PBout(9)=!PBout(9);
break;
}
}
}
}
Comments | NOTHING