(蓝桥杯)STM32G431RBT6(跑马灯)

一、简单代码

其实这个现象主要用的就是电平翻转函数 

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"
#include "led.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#define DELAY_TIME 500 //延时1000ms  也就是1秒
/* USER CODE END Includes */

 延时1000ms也就是1秒

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
 
/* LD1~LD8轮流亮灭,实现跑马灯 */

   
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	  
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);
	  HAL_Delay(DELAY_TIME);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_9);
	  HAL_Delay(DELAY_TIME);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_10);
	  HAL_Delay(DELAY_TIME);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_11);
	  HAL_Delay(DELAY_TIME);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_12);
	  HAL_Delay(DELAY_TIME);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
	  HAL_Delay(DELAY_TIME);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14);
	  HAL_Delay(DELAY_TIME);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_15);
      HAL_Delay(DELAY_TIME);    

  }
二、模块化代码
(1)LED.c的代码
/* led.c */
 
#include "led.h"
 
/* 点亮LED */
void LED_ON(uint16_t LED_Pin)
{
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOC, LED_Pin, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
 
/* 熄灭LED */
void LED_OFF(uint16_t LED_Pin)
{
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOC, LED_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
 
/* 翻转LED */
void LED_Toggle(uint16_t LED_Pin)
{
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    HAL_GPIO_TogglePin(GPIOC, LED_Pin);
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}

(2)LED.h的代码
/* led.h */
 
#ifndef __LED_H
#define __LED_H
 
#include "main.h"
 
#define LED1     GPIO_PIN_8
#define LED2     GPIO_PIN_9
#define LED3     GPIO_PIN_10
#define LED4     GPIO_PIN_11
#define LED5     GPIO_PIN_12
#define LED6     GPIO_PIN_13
#define LED7     GPIO_PIN_14
#define LED8     GPIO_PIN_15
#define LED_None 0x0000
#define LED_All  0xFF00
 
void LED_ON(uint16_t LED_Pin);
void LED_OFF(uint16_t LED_Pin);
void LED_Toggle(uint16_t LED_Pin);
 
#endif /* __LED_H */

(3)main.c的代码
while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  
     
 
/* LD1~LD8轮流亮灭,实现跑马灯 */

	  LED_Toggle(LED1);
	  HAL_Delay (500);
	  LED_Toggle(LED2);
	  HAL_Delay (500);
	  LED_Toggle(LED3);
	  HAL_Delay (500);
	  LED_Toggle(LED4);
	  HAL_Delay (500);
	  LED_Toggle(LED5);
	  HAL_Delay (500);
	  LED_Toggle(LED6);
	  HAL_Delay (500);
	  LED_Toggle(LED7);
	  HAL_Delay (500);
	  LED_Toggle(LED8);
	  HAL_Delay (500);
		

        
        

  }

三、附加知识二进制(不太懂)

 

FF就是全亮了灯,因为是1111 1111 0000 0000 其实相当于把0xFF左移八位变成0xFF00

 上面那个0x00 相当于是 0000 0000 0000 0000 左边八位赋值给PIN15-8了

 这是普遍的写法,15-0一共16个端口,就对应16位

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值