按键控制LED
按键抖动,电平发生变化,可用延时函数抵消按键抖动对系统的影响
传感器电路图
按键电路图
c语言对应类型
“_t”后缀表示使用typedef重命名的数据类型
枚举类型
#include<iostream>
using namespace std;
typedef enum{
Mon=1,
Tue=2,
Wed=3
} week_t;
int main(){
week_t w;
w=Wed;
cout << w << endl;
return 0;
}
按键控制LED灯
主函数
#include "stm32f10x.h"
#include "MyDelay.h"
#include "Delay.h"
#include "Button.h"
#include "stdio.h"
uint8_t KeyNum ;
int main(void){
Led_Init();
Button_Init();
while(1){
KeyNum = Key_GetNum();
if(KeyNum==1) {
Led_One_Turn();
}
if(KeyNum==2){
Led_Two_Turn();
}
}
return 0;
}
Button
#ifndef Led_h
#define led_h
void Led_Init(void);
void Button_Init(void);
uint8_t Key_GetNum(void);
void Led_One_Turn(void);
void Led_Two_Turn(void);
#endif
#include "stm32f10x.h"
#include "Delay.h"
#include "stdio.h"
void Led_Init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GI;
GI.GPIO_Mode = GPIO_Mode_Out_PP;
GI.GPIO_Pin = GPIO_Pin_All;
GI.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GI);
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1);
}
void Button_Init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef Button;
Button.GPIO_Mode = GPIO_Mode_IPU;
Button.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_11;
Button.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&Button);
}
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;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0){
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0);
Delay_ms(20);
KeyNum=2;
}
return KeyNum;
}
void Led_One_Turn(void){
uint8_t Light_Status = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
if(Light_Status==0) GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
else GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
}
void Led_Two_Turn(void){
uint8_t Light_Status = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
if(Light_Status==0) GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);
else GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);
}
光敏传感蜂鸣器(绿灯常亮,光线变暗,红灯亮,警报响起,光线恢复,警报解除)
#ifndef Buzzer
#define Buzzer
uint8_t Read_Buzzer_Data(void);
void Buzzer_PhotoResitors_Init(void);
void Reaction_PhotoResitors(void);
void Buzzer_Ring(void);
void Buzzer_Slient(void);
#endif
#include "stm32f10x.h"
#include "Button.h"
#include "Delay.h"
uint8_t Read_Buzzer_Data(void){
return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);
}
void Buzzer_PhotoResitors_Init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef Buzzer;
Buzzer.GPIO_Mode = GPIO_Mode_IPU;
Buzzer.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_12;
Buzzer.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&Buzzer);
GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);
}
void Buzzer_Ring(void){
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);
while(1){
GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);
Delay_ms(200);
GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);
Delay_ms(300);
GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);
Delay_ms(300);
GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);
Delay_ms(100);
GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);
Delay_ms(200);
GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);
Delay_ms(300);
break;
}
}
void Buzzer_Slient(void){
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);
GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);
}
void Reaction_PhotoResitors(void){
uint8_t RP = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);
if(RP==1) Buzzer_Ring();
else Buzzer_Slient();
}
项目结构