按键控制 技术点
控制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_H
void 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 on
GPIO_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 on
GPIO_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();
}
}
————————————————
版权声明:本文为CSDN博主「牛郎恋刘娘,刘娘念牛郎」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52172364/article/details/132545793
|