【51 单片机入门到进阶】10 入门:51单片机模块化编程

一,什么是模块化设计

把一个大程序,按功能拆成一个个独立的小文件、小函数,分开写、分开管理。

例如:

  • led.c / led.h → 负责 LED
  • key.c / key.h → 负责按键
  • uart.c / uart.h → 负责串口
  • hc_sr04.c / hc_sr04.c → 负责超声波
  • main.c → 只负责整体逻辑

这就叫模块化

二,为什么要模块化设计

1. 51 单片机资源少、程序容易乱

51 单片机程序虽然不大,但一旦功能变多:

  • LED
  • 按键
  • 定时器
  • 串口
  • 显示屏
  • 传感器

所有代码堆在 main.c 里 → 几百行、几千行混在一起根本没法维护

2. 不模块化 → 改一个地方,全程序崩

新手最常见问题:

我只想改个 LED,结果整个程序不运行了。

因为代码混在一起、互相干扰

3. 不模块化 → 无法复用

写好的 LED 驱动、按键驱动,下次做新项目不能直接复制用,必须重新写。

三,模块化设计的好处

1. 结构清晰,一眼看懂程序

不用翻几百行代码,看文件名就知道功能:

  • led → 灯
  • key → 按键
  • uart → 串口
  • hc_sr04 → 超声波
2. 易于维护,改哪里点哪里,不会影响其他功能。

想改 LED → 只动 led.c

想改按键 → 只动 key.c

3. 代码可复用

写好一次驱动:

  • LED
  • KEY
  • Ds18b20
  • HC-SR04

以后任何 51 项目 直接复制粘贴就能用,不用重复造轮子。

4. 程序可读性强

别人拿到你的代码,立刻能看懂

这就是工程师规范

5. 便于升级功能

比如想换一种 OLED 屏

只需要替换 oled.c主程序完全不用改

6. 养成正规编程习惯(从 51 开始)

模块化不是 51 专属

STM32、Arduino、Linux、嵌入式底层 通用标准

51 学会模块化,以后学任何单片机都轻松。

四,51单片机模块程序化设计结构(以蜂鸣器工程为例)

在这里插入图片描述

驱动蜂鸣器/                  ← 工程根目录
├── 驱动蜂鸣器.uvproj         ← Keil工程主文件(双击打开工程)
├── 驱动蜂鸣器.uvopt
├── 驱动蜂鸣器.uvgui.Administrator
├── 驱动蜂鸣器_Target 1.cfg
├── STARTUP.A51              ← 51单片机启动文件(系统默认,不动)
├── Apps/                    ← 【驱动程序文件夹】:所有硬件驱动
├── User/                    ← 【主程序文件夹】:主逻辑、公共函数
├── Listings/                ← 【编译输出文件夹】:编译生成的列表文件(自动生成)
└── Objects/                 ← 【编译输出文件夹】:编译生成的hex/obj文件(自动生成)
Apps/
├── App.h                    ← 【驱动总头文件】:汇总所有驱动头文件
├── led/                     ← LED驱动模块
│   ├── led.c
│   └── led.h
├── key/                     ← 按键驱动模块
│   ├── key.c
│   └── key.h
├── buzzer/                  ← 蜂鸣器驱动模块(本工程核心)
│   ├── buzzer.c
│   └── buzzer.h
├── uart/                    ← 串口驱动模块(可选)
│   ├── uart.c
│   └── uart.h
└── ...                      ← 其他驱动(按需添加)
User/
├── main.c                  ← 主程序入口,业务逻辑
├── main.h                  ← 51头文件重命名(替代reg51.h,统一管理)
├── Public.c                ← 公共函数:延时、通用工具等
└── Public.h                ← 公共函数头文件、全局宏定义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值