简介
继上篇 普中STM32-PZ6806L开发板(有点悲伤的故事) 说到 关于 普中STM32-PZ6806L开发板的LED流水灯也被烧坏掉了,再也无法玩流水灯, 内心充满了只会流水灯的不甘, 流水灯就是单片机的Hello World,怎么能没有呢?
事情发展
好巧不巧想起最近电磁炉坏掉啦,这不是《歇后语》省略…, 拆掉了电磁炉上的四个数码管, LED灯10个,又可以玩LED灯啦…
电路
电路原理图
高电平驱动
实物图
步骤
STM32CubeMX 创建STM32F103CBT6
不说太多, 参考简介说到的上篇, 画葫芦吧
引脚初始化
初始化 PA0~PA7 & PC13 为推挽输出, 下拉;
用户代码
流水灯示例
main.c
typedef enum {LED_OFF,LED_ON,
}LED_Status;typedef enum {LED1,LED2,LED3,LED4,LED5,LED6,LED7,LED8,LED_ALL
}LED_Number;/***
* LED_LightControl : LED控制
* num : LED1 ~ LED8 / LED_ALL
* status: LED_ON/LED_OFF
***/
void LED_LightControl(LED_Number num, LED_Status status)
{uint16_t pin = 0;if (num == LED_ALL)pin = 0xFF; // 引脚0 ~ 7elsepin = 0x01<<num;HAL_GPIO_WritePin(LED_PORT, pin, status==LED_ON ? GPIO_PIN_SET:GPIO_PIN_RESET);
}/***
* LED_DoFlowAction : 流水灯效果实现
* num : LED1 ~ LED8 / LED_ALL
* delay_ms: 延时, 亮灭的间隔
* time : 执行的次数
***/
void LED_DoFlowAction(uint32_t delay_ms, uint16_t time)
{int i = 0;int offset = 0;int ledNum = 0;LED_LightControl(LED_ALL, LED_OFF);while (time--){for (i = LED1; i < LED_ALL; ++i){ledNum = offset > 0 ? ( offset - i ) : i; LED_LightControl((LED_Number)ledNum, LED_ON);HAL_Delay(delay_ms);LED_LightControl((LED_Number)ledNum, LED_OFF);HAL_Delay(delay_ms);}if (offset)offset = 0;elseoffset = LED_ALL-1;}
}int main(void)
{
...
while (1)
{LED_DoFlowAction(100, 1);
}
...
}
代码
上面都提供了,不需要下载
共赏
普中STM32-PZ6806L开发板(有点悲伤的故事续-人灯还未了)