思路
1初始化io
2模式为输入
3调用函数uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
将返回输入的高低电平
程序
1led.h
#include "stm32f10x.h"
//初始化io口
void led(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef chushi;
chushi.GPIO_Mode=GPIO_Mode_Out_PP;
chushi.GPIO_Pin=GPIO_Pin_1 ;
chushi.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&chushi);
GPIO_SetBits(GPIOA,GPIO_Pin_1 );
}
//打开led
void led_on(void){
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
//关闭led
void led_off(void){
GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
2按键程序
#include "stm32f10x.h"
#include "Delay.h"//延迟函数
//初始化io
void key_init(void){
RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef keychu;
keychu.GPIO_Mode=GPIO_Mode_IPU;//上拉输入
keychu.GPIO_Pin=GPIO_Pin_2 ;
keychu.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&keychu);
}
//判断io输入的值
int8_t key_zhi(void){
int8_t a1=0;
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){//返回输入的值GPIO_ReadInputDataBit
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2==0))
{
}
Delay_ms(20);
a1=1;
}
return a1;
}
main函数
#include "stm32f10x.h" // Device header
#include "key.h"//按键文件
#include "ledJian.h"//led文件
#include "Delay.h"
int main(void)
{
led();
key_init();
int8_t a=0;
while (1)
{
if(key_zhi()==1){//判断是否按下
a=a+1;
if(a==1){//按一次点亮
led_on();
}
if(a==2){//按二次熄灭
led_off();
a=0;
}
}
}
}