简单来说就是控制不同口电平高低,来控制亮灯状态。
先来个弱智版的:
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_WritePin(GPIOA, A0_Pin, 0);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOA, A0_Pin, 1);
HAL_GPIO_WritePin(GPIOA, A1_Pin, 0);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOA, A1_Pin, 1);
HAL_GPIO_WritePin(GPIOA, A2_Pin, 0);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOA, A2_Pin, 1);
HAL_GPIO_WritePin(GPIOA, A3_Pin, 0);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOA, A3_Pin, 1);
HAL_GPIO_WritePin(GPIOA, A4_Pin, 0);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOA, A4_Pin, 1);
HAL_GPIO_WritePin(GPIOA, A5_Pin, 0);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOA, A5_Pin, 1);
HAL_GPIO_WritePin(GPIOA, A6_Pin, 0);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOA, A6_Pin, 1);
HAL_GPIO_WritePin(GPIOA, A7_Pin, 0);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOA, A7_Pin, 1);
/* USER CODE BEGIN 3 */
}
如此每个口都单独控制实在愚不可及,然而地球人都知道LL库就是成组编辑的,所以
void SystemClock_Config(void);
uint8_t i,led=0xfe;
while (1)
{
/* USER CODE END WHILE */
LL_GPIO_WriteOutputPort(GPIOA, led);
led=led<<1|led>>7;
HAL_Delay(200);
/* USER CODE BEGIN 3 */
来而不往非礼也,往复式流水灯:
while (1)
{
/* USER CODE END WHILE */
if(i<8)
{
LL_GPIO_WriteOutputPort(GPIOA, led);
led=led<<1|led>>7;
HAL_Delay(200);
i++;
}
else{
led=led>>1|led<<7;
LL_GPIO_WriteOutputPort(GPIOA, led);
HAL_Delay(200);
i++;if(i==16){i=0;}
}
/* USER CODE BEGIN 3 */
}