[HAL库] STM32 流水点灯模块功能

该代码段展示了如何使用STM32的GPIO接口读取PB4和PB5引脚状态来控制LED灯的正反向循环流动。当PB4或PB5为高电平时,对应设置LED编号并执行循环。循环中,LED灯按照设定顺序点亮和熄灭,每轮循环结束后,如果达到5次,所有LED灯将关闭。此外,文章提到了使用Proteus进行仿真实验。
摘要由CSDN通过智能技术生成

 一 、主程序部分

		
		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4)==1)          // 读取pb4高电平
		HAL_Delay(10);     

		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4)==1)
		{
	  led_number=1;
		}
	}

	
	 if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5)==1)            // 读取pb5高电平
{
		HAL_Delay(10);                                       //	 抖动delay
        if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5)==1)
		{
		led_number=2;
		}
		
	}	
  

二、流水循环部分

LED灯正反循环流水

while(1)部分

 


switch(led_number){
	

		 case 0:      //全部关闭

			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
	   	break;
		 
			case 1:            //正方向
		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
			HAL_Delay(100);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
			HAL_Delay(100);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
		  HAL_Delay(100);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
			HAL_Delay(100);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
			HAL_Delay(100);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
			 n++;                 //计数5次循环后关闭
			if(n==5)         
			{led_number=0;
				n=0;
			}
	   	break;
			
			case 2:    //反方向
	
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
			 HAL_Delay(100);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
			 HAL_Delay(100);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
		   HAL_Delay(100);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
		 	 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
		   HAL_Delay(100);
		   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
		   HAL_Delay(100);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
	    n++;                      //计数5次循环后关闭
			if(n==5)      
			{
			led_number=0;
			n=0;
			}
			break;
			
			default:
			led_number=0;
			

三、proteus仿真

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值