按键控制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();
}
 
项目结构
 
