尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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反而熄灭灯光调试很久才修正逻辑。
RELATED

相关推荐

Signal Tap II 调试实战:从“invalid JTAG configuration”到“instance not found”的完整排错指南

Signal Tap II 调试实战:从“invalid JTAG configuration”到“instance not found”的完整排错指南

1. 当Signal Tap II罢工时:两个经典错误背后的真相刚接触FPGA调试的新手,十有八九会在Signal Tap II逻辑分析仪上栽跟头。最常见的就是程序明明能正常下载到板子,一运行分析就弹出"invalid JTAG configuration"和"instance no…

📅 2026/10/20 20:37:19
HarmonyOS7 ArkUI 实战:Tabs 可滚动标签栏与 TabContent 内容联动

HarmonyOS7 ArkUI 实战:Tabs 可滚动标签栏与 TabContent 内容联动

文章目录前言代码讲解页面入口怎么安排数据模型先稳住状态变量控制页面反馈布局代码不要从样式开始读Builder 和方法承担复用使用方式完整代码关键代码解析interface 不是摆设State 是交互的开关列表和卡片要靠数据驱动事件回调要短一点样式参数别急着抽常量总结前言 新闻封面最…

📅 2026/10/6 22:17:19
Java Web开发实战:从基础到进阶的典型问题解析

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

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

📅 2026/10/7 23:35:51
MORE NEWS

更多资讯

📰

瑞安几级电工证有补贴多久拿证怕考不过白交培训费

瑞安几级电工证有补贴多久拿证怕考不过白交培训费 怕考不过白交培训费,你不是一个人。瑞安地区电工证补贴政策清晰,报考流程规范,拿证周期也有明确标准,只要方法对, 多久拿证 根本不是问题。 什么等级的电工证在瑞安有补贴? 在瑞安, 低压电工证…

📰

呼市有没有人考电工证 别踩坑了,实操考试真不难

呼市有没有人考电工证 别踩坑了,实操考试真不难 实操考试心里没底怕挂科?别担心,呼市考电工证的人可不少,关键是要避开那些坑。很多人因为信息不对称,走了弯路,最后浪费时间又浪费钱。其实,只要你按流程走,材料准备到位,考试也不难。千万别踩坑,下…

📰

重庆电工证复审日期怎么算 值不值得考还得看这份实操指南

重庆电工证复审日期怎么算 值不值得考还得看这份实操指南 你是不是也遇到过这种情况:好不容易考了个电工证,结果复审日期一到就手忙脚乱,不知道去哪办,怕被中介坑?更别提现在市场上培训机构鱼龙混杂,报名材料五花八门,让人一头雾水。别急,这篇文章就…

📰

日照市考电工证实操考试心里没底?看看郑州报考避坑指南

日照市考电工证实操考试心里没底?看看郑州报考避坑指南 实操考试心里没底怕挂科,这几乎是每个准备考电工证的学员心里最真实的写照。特别是像济源这样的建筑工地一线工人,平时接触电工具多,但真正要考试,还是有不少人被实操环节搞得手忙脚乱。别担心,下…

📰

电工证太难考?亭林电工证代审点保姆级教程帮你搞定

电工证太难考?亭林电工证代审点保姆级教程帮你搞定 工地太忙根本没时间复习考试,尤其是像你这样从鹤壁转岗过来的电工,天天在工地赶工期、抢进度,哪还有精力去复习电工证?别急,今天这波【亭林电工证代审点】保姆级教程,就是为你这种忙得脚不沾地的电工…

📰

青海电工证考试时间网上查询,学历不高也能考的真相

青海电工证考试时间网上查询,学历不高也能考的真相 你是不是也担心自己学历不高,报不了电工证?别急,我来给你说说青海电工证考试时间网上查询的实情,还有怎么才能顺利报考的干货,别再被“学历门槛”给吓退了。…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬