STM32——不同的按键对应实现不同功能的灯闪烁

   日期:2021-04-13     浏览:150    评论:0    
核心提示:STM32——不同的按键对应实现不同功能的灯闪烁功能介绍程序解读总结功能介绍本程序使用STM32F103VE板子实现功能:按键1:实现单个灯闪烁按键2:实现全部灯闪烁按键3:实现流水灯按键4:实现跑马灯程序解读#include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h>void InitScan(void);void InitLed(void);void Delay_us(unsigned long time);v

STM32——不同的按键对应实现不同功能的灯闪烁

    • 功能介绍
    • 程序解读
    • 总结

功能介绍

本程序使用STM32F103VE板子
实现功能:
按键1:实现单个灯闪烁
按键2:实现全部灯闪烁
按键3:实现流水灯
按键4:实现跑马灯

程序解读

#include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
void InitScan(void);
void InitLed(void);
void Delay_us(unsigned long time);
void Delay_ms(unsigned long time);
void InitLedStatus();
void ControlSingleLed(GPIO_TypeDef* GPIO_Scan,u16 GPIO_Pin_ScanKey,GPIO_TypeDef* GPIO_LED,u16 GPIO_Pin_Led);
void ControlAllLed(GPIO_TypeDef* GPIO_Scan,u16 GPIO_Pin_ScanKey);
void ControlHorseRaceLed(GPIO_TypeDef* GPIO_Scan,u16 GPIO_Pin_ScanKey);
void ControlWaterLed(GPIO_TypeDef* GPIO_Scan,u16 GPIO_Pin_ScanKey);

 int Flag_SingleLed = 0;
 int Flag_AllLed = 0; 
 int Flag_WaterLed = 0;
 int Flag_HorseRaceLed = 0;
int main(void)
{
	InitLedStatus();
		InitScan();
	// 来到这里的时候,系统的时钟已经被配置成72M。
	InitScan();
  InitLed();

	while(1){
	
	ControlSingleLed(GPIOC,GPIO_Pin_0,GPIOA,GPIO_Pin_0); //控制灯闪烁
	
	ControlAllLed(GPIOC,GPIO_Pin_1);//控制全部灯亮与灭
	
	ControlWaterLed(GPIOC,GPIO_Pin_2);//实现流水灯
	
	ControlHorseRaceLed(GPIOC,GPIO_Pin_3);//实现跑马灯
 }
	
}
void Delay_us(unsigned long time){
	unsigned long i;
	while(time--){
		i = 8;
		while(i--);
	}
	
}
void Delay_ms(unsigned long time){
	while(time--)
	Delay_us(1100);	
	
}

void InitScan(void){
	 GPIO_InitTypeDef GPIO_Scan;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	  GPIO_Scan.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
	  GPIO_Scan.GPIO_Mode = GPIO_Mode_IPU;
	 GPIO_Init(GPIOC,&GPIO_Scan);
		
	}
void InitLedStatus(){
		GPIO_SetBits(GPIOA,GPIO_Pin_All);		
}

void InitLed(void){
	  GPIO_InitTypeDef GPIO_Led;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); 
	  GPIO_Led.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
	  GPIO_Led.GPIO_Mode =  GPIO_Mode_Out_PP;
	  GPIO_Led.GPIO_Speed = GPIO_Speed_10MHz;
	 GPIO_Init(GPIOA,&GPIO_Led);
	}

void ControlSingleLed(GPIO_TypeDef* GPIO_Scan,u16 GPIO_Pin_ScanKey,GPIO_TypeDef* GPIO_LED,u16 GPIO_Pin_Led){
		if(GPIO_ReadInputDataBit(GPIO_Scan,GPIO_Pin_ScanKey) == 0){
			Delay_ms(50);
		if(GPIO_ReadInputDataBit(GPIO_Scan,GPIO_Pin_ScanKey) == 0)		
			Flag_SingleLed = !Flag_SingleLed;
		
			if(Flag_SingleLed == 1){
			    InitLedStatus(); 
				  GPIO_ResetBits(GPIO_LED,GPIO_Pin_Led);	
			}else{				
				GPIO_SetBits(GPIO_LED,GPIO_Pin_Led);	
			}
	}
}

void ControlAllLed(GPIO_TypeDef* GPIO_Scan,u16 GPIO_Pin_ScanKey){
	if(GPIO_ReadInputDataBit(GPIO_Scan,GPIO_Pin_ScanKey) == 0){
			Delay_ms(50);
		if(GPIO_ReadInputDataBit(GPIO_Scan,GPIO_Pin_ScanKey) == 0)	
      Flag_AllLed	= !Flag_AllLed;

		if(Flag_AllLed == 1){
		 GPIO_ResetBits(GPIOA,GPIO_Pin_0);
	   GPIO_ResetBits(GPIOA,GPIO_Pin_1);
	   GPIO_ResetBits(GPIOA,GPIO_Pin_2);
	   GPIO_ResetBits(GPIOA,GPIO_Pin_3);
			}else{				
		 GPIO_SetBits(GPIOA,GPIO_Pin_0);	
		 GPIO_SetBits(GPIOA,GPIO_Pin_1);	
		 GPIO_SetBits(GPIOA,GPIO_Pin_2);	
		 GPIO_SetBits(GPIOA,GPIO_Pin_3);		
			} 
	}
}

void ControlWaterLed(GPIO_TypeDef* GPIO_Scan,u16 GPIO_Pin_ScanKey){
	if(GPIO_ReadInputDataBit(GPIO_Scan,GPIO_Pin_ScanKey) == 0){
			Delay_ms(50);
		if(GPIO_ReadInputDataBit(GPIO_Scan,GPIO_Pin_ScanKey) == 0)	
      Flag_WaterLed	= !Flag_WaterLed;

		if(Flag_WaterLed == 1){
		  GPIO_ResetBits(GPIOA,GPIO_Pin_0);
			Delay_ms(300);
			GPIO_SetBits(GPIOA,GPIO_Pin_0);
			Delay_ms(300);
	    GPIO_ResetBits(GPIOA,GPIO_Pin_1);
			Delay_ms(300);
			GPIO_SetBits(GPIOA,GPIO_Pin_1);	
			Delay_ms(300);
	    GPIO_ResetBits(GPIOA,GPIO_Pin_2);
			Delay_ms(300);
			GPIO_SetBits(GPIOA,GPIO_Pin_2);
			Delay_ms(300);
	    GPIO_ResetBits(GPIOA,GPIO_Pin_3);
			Delay_ms(300);
			GPIO_SetBits(GPIOA,GPIO_Pin_3);
			Delay_ms(300);
			}else{				
				InitLedStatus();
			} 
	}
	
}


void ControlHorseRaceLed(GPIO_TypeDef* GPIO_Scan,u16 GPIO_Pin_ScanKey){
	
	if(GPIO_ReadInputDataBit(GPIO_Scan,GPIO_Pin_ScanKey) == 0){
			Delay_ms(50);
		if(GPIO_ReadInputDataBit(GPIO_Scan,GPIO_Pin_ScanKey) == 0)	
      Flag_HorseRaceLed	= !Flag_HorseRaceLed;

		if(Flag_HorseRaceLed == 1){
		  GPIO_ResetBits(GPIOA,GPIO_Pin_0);
			Delay_ms(300);
	    GPIO_ResetBits(GPIOA,GPIO_Pin_1);
			Delay_ms(300);
	    GPIO_ResetBits(GPIOA,GPIO_Pin_2);
			Delay_ms(300);
	    GPIO_ResetBits(GPIOA,GPIO_Pin_3);
			Delay_ms(300);
			InitLedStatus();
			}else{				
				InitLedStatus();
			} 
	}
}

总结

上面程序所用到的4个灯,4个按键在电路图上的位置

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服