按键控制 技术点
- 控制LED的 GPIO 设置为输出
- 控制按键的GPIO 设置为上拉输入
按键部分代码
Key.c
#include "stm32f10x.h"
#include "Delay.h"
void Key_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU; //ÉÏÀÊäÈëGPIO_InitStructure.GPIO_Pin= GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz ;GPIO_Init(GPIOB,&GPIO_InitStructure);}
uint8_t Key_GetNum(void)
{uint8_t KeyNum = 0;if( GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) ==0 ){Delay_ms(20);while( GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) ==0 );Delay_ms(20);KeyNum = 1;}return KeyNum;}
Key.h
#ifndef __KEY_H
#define __KEY_Hvoid Key_Init(void);
uint8_t Key_GetNum(void);#endif
Led部分代码
Led.c
#include "stm32f10x.h"void LED_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //ÍÆÃâÊä³öGPIO_InitStructure.GPIO_Pin= GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz ;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_ResetBits(GPIOA,GPIO_Pin_1);}void LED_ON(){ ///chose a onGPIO_ResetBits(GPIOA,GPIO_Pin_1);
}void LED_OFF(){GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
Main
#include "stm32f10x.h"
#include "Delay.h"
#include "Led.h"
#include "Key.h"#define dm Delay_ms
uint8_t KeyNum;
uint8_t flag=0;int main(void){LED_Init();Key_Init();while(1){KeyNum = Key_GetNum();if(KeyNum) flag=!flag;if(flag) LED_ON();else LED_OFF();}}
光敏传感部分
光敏传感器设置为上拉输入
无光为亮 有光则暗
Light.c
#include "stm32f10x.h"void Light_Init(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU; //ÉÏÀÊäÈëGPIO_InitStructure.GPIO_Pin= GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz ;GPIO_Init(GPIOA,&GPIO_InitStructure);}uint8_t get_num(){return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7);
}
Led.c
#include "stm32f10x.h"void LED_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //ÍÆÃâÊä³öGPIO_InitStructure.GPIO_Pin= GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz ;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_ResetBits(GPIOA,GPIO_Pin_1);}void LED_ON(){ ///chose a onGPIO_ResetBits(GPIOA,GPIO_Pin_1);
}void LED_OFF(){GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
main
#include "stm32f10x.h"
#include "Delay.h"
#include "Led.h"
#include "Light.h"#define dm Delay_ms
uint8_t KeyNum;
uint8_t flag=0;int main(void){LED_Init();Light_Init();while(1){if(get_num()==1) LED_ON();else LED_OFF();}}