32单片机 小项目1-跑马灯

发布时间:2026/9/14 23:28:12

32单片机 小项目1-跑马灯 一、前言前两篇分别记录了无封装单灯、无封装多路流水灯今天我尝试做了简单工程分层新建Hardware文件夹存放LED驱动文件把引脚初始化、点灯控制逻辑封装成独立函数代码整洁很多。依旧是初学阶段封装思路比较基础有写得不合理、不规范的地方欢迎各位大佬指点。二、实验目标学会简单工程分层区分驱动文件与主程序​掌握GPIO初始化封装、独立引脚控制函数编写​实现5路LED依次点亮流动的跑马灯效果。三、本地工程真实结构工程新增Hardware文件夹整体目录Start启动文件底层初始化​LibrarySTM32标准外设库​System系统延时、时钟工具​Hardware本次新建存放LED.c、LED.h驱动文件​User仅存放main.c主逻辑不再堆砌初始化代码。四、硬件说明五路LED分别对应PA0、PA1、PA2、PA3、PA4传入参数1代表点亮LED0代表熄灭每路LED串联220Ω限流电阻保护。五、完整代码1.main.c主函数#includestm32f10x.h// Device header#includedelay.h#includeLED.h//Îå¸öµÆÅÝ·Ö±ðÁ¬A0,A1,A2,A3,A4intmain(){led_init();while(1){led2(1);Delay_ms(500);led2(0);led1(1);led3(1);Delay_ms(500);led1(0);led3(0);led0(1);led4(1);Delay_ms(500);led0(0);led4(0);}}2.Hardware/LED.c#includestm32f10x.h// Device headervoidled_init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_PinGPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;GPIO_InitStruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStruct);GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);}//µÆÅݲÙ×÷º¯Êý£¬0ÊDz»ÁÁ£¬1ÊÇÁÁvoidled0(uint16_tx){if(x0)GPIO_SetBits(GPIOA,GPIO_Pin_0);if(x1)GPIO_ResetBits(GPIOA,GPIO_Pin_0);}voidled1(uint16_tx){if(x0)GPIO_SetBits(GPIOA,GPIO_Pin_1);if(x1)GPIO_ResetBits(GPIOA,GPIO_Pin_1);}voidled2(uint16_tx){if(x0)GPIO_SetBits(GPIOA,GPIO_Pin_2);if(x1)GPIO_ResetBits(GPIOA,GPIO_Pin_2);}voidled3(uint16_tx){if(x0)GPIO_SetBits(GPIOA,GPIO_Pin_3);if(x1)GPIO_ResetBits(GPIOA,GPIO_Pin_3);}voidled4(uint16_tx){if(x0)GPIO_SetBits(GPIOA,GPIO_Pin_4);if(x1)GPIO_ResetBits(GPIOA,GPIO_Pin_4);}3.Hardware/LED.h#ifndef__LED_H#define__LED_Hvoidled_init(void);voidled0(uint16_tx);voidled1(uint16_tx);voidled2(uint16_tx);voidled3(uint16_tx);voidled4(uint16_tx);#endif六、粗浅学习感悟第一次尝试分层封装把硬件驱动放到单独Hardware文件夹主函数变得特别简洁可读性提升很多​把每个LED控制写成独立函数主程序只需要调用不用重复写GPIO操作代码​本次跑马灯不是逐个单灯流动而是中间1个亮→中间2个亮→两边一起亮自己设计的灯光流动逻辑熟悉多灯同时点亮控制​目前封装方式还比较冗余五个led函数逻辑高度重复之后学习数组、循环后可以简化代码。七、本次踩坑记录新建Hardware分组后没添加路径编译提示找不到LED.h头文件​头文件忘记加#ifndef防重复包含出现重复定义报错​延时函数大小写写错Delay_ms写成delay_ms直接编译报错​高低电平搞反传入1反而熄灭灯光调试很久才修正逻辑。
延伸阅读

更多相关文章

2026/9/9 13:18:12

Java Web开发实战:从基础到进阶的典型问题解析

1. Java Web开发基础概念解析Java Web开发是构建动态网站的核心技术栈,它基于Java EE规范,通过Servlet、JSP等技术实现服务器端逻辑处理。很多初学者容易混淆一些基本概念,这里我用实际项目中的经验帮你理清思路。首先明确一点:动…

2026/9/15 6:06:36

affinitic-caching实战:用装饰器优雅管理Python缓存

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 6:06:36

电梯接油盒模具设计要点与工艺优化

1. 电梯底盘接油盒模具设计概述电梯底盘接油盒作为电梯安全运行的关键部件,其模具设计直接关系到产品的精度和使用寿命。在实际工程中,一套合格的接油盒模具需要同时满足尺寸精度、结构强度和批量生产稳定性三大核心要求。根据我十多年的模具设计经验&am…

2026/9/15 6:06:36

EPLAN P8部件库从入门到实战:EDZ导入、线号联动与报错排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 6:06:36

STC8蜂鸣器程序:用无源蜂鸣器实现消防车警报与音效

简介:这份资源是一套面向单片机初学者与嵌入式开发者的STC8蜂鸣器程序合集,重点解决“如何用蜂鸣器模拟不同报警音效”的编程问题。程序基于STC8系列芯片编写,通过配置定时器与IO翻转,输出不同频率方波来驱动蜂鸣器发声。压缩包为…

2026/9/15 6:01:36

信号继电器厂家怎么选?五个核心指标+三步验厂避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码