接上篇LED点亮;http://t.csdnimg.cn/9r6z7
目录
一.硬件设计
二.软件设计
三.完整代码
四.结束语
一.硬件设计
按钮接电源插入PB0引脚,如上图所示
二.软件设计
void key_init()
{GPIO_InitTypeDef GPIO_InitStruct;//使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//B1 B11GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //上拉输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 ;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //对于输入用途不大GPIO_Init(GPIOB, &GPIO_InitStruct);
}
首先就是初始化,输入引脚.开打相应时钟,初始化相应引脚,
GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0; 读取相应变化,就可以了
三.完整代码
key.c
#include "key.h"
/*
函数功能:按键初始化
硬件连接:PA1
特性: 按下为低电平---没按下高电平
*/
void Delay_s()
{unsigned char i;for(i=0;i<=200;i++) ;
}void key_init()
{GPIO_InitTypeDef GPIO_InitStruct;//使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//B1 B11GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //上拉输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 ;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //对于输入用途不大GPIO_Init(GPIOB, &GPIO_InitStruct);
}u8 key_scan( )
{u8 ret = 0;if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0){ret = 1;} return ret;
}
key.h
#ifndef __KEY_H__
#define __KEY_H__//标准头文件
#include "stm32f10x.h"void Delay_s(void);
void key_init(void);
u8 key_scan(void);#endif
led.c
#include "led.h"//LED 初始化程序
void led_init(void)
{ GPIO_InitTypeDef GPIO_LED; //定义GPIO结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOB端口的时钟GPIO_LED.GPIO_Pin = GPIO_Pin_1; //LED端口配置GPIO_LED.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_LED.GPIO_Speed = GPIO_Speed_2MHz; //IO口速度为2MHzGPIO_Init(GPIOA, &GPIO_LED); //根据设定参数初始化GPIOB0GPIO_SetBits(GPIOA,GPIO_Pin_1); //GPIOB0输出高电平,初始化LED灭}
led.h
#ifndef __LED_H__
#define __LED_H__//标准头文件
#include "stm32f10x.h"void led_init(void);#endif
main.h
#ifndef __MAIN_H
#define __MAIN_H//用户自定义头文件
#include "led.h"
#include "key.h"void delay_ms(void);#endif
main.c
#include "main.h"void Delay(){unsigned char i;for(i=0;i<=200;i++) ;
}int main(void)
{led_init(); //LED初始化key_init();//按键初始化while(1){if (key_scan() == 0){GPIO_ResetBits(GPIOA,GPIO_Pin_1); //点亮LED}else{GPIO_SetBits(GPIOA,GPIO_Pin_1); //关闭}}
}
四.结束语
以上就是STM32仿真按键点灯的全部了.