news 2026/5/8 9:57:55

15 模块化编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
15 模块化编程

一、为什么要模块化

分解为相对独立的模块或组件,每个模块只负责特定的功能或任务。

1、优点

  • 可维护性高——每个模块都有清晰的职责范围
  • 可重用性——可以被重复使用
  • 可扩展性——可以通过添加新的模块或替换现有的模块来满足新的需求
  • 并行开发——不同模块可以由不同的开发团队并行开发
  • 灵活架构——架构清晰,灵活开发

2、缺点

  • 性能损耗——由于系统分层和模块间通信
  • 调用链长——模块化系统的调用链较长,可能会影响系统的响应速度

3、总体来说

利大于弊

二、动态数码管显示的模块化实现

其实在第一个LED灯点亮的时候,我们已经用到了模块化编程。

接下来对模块化编程进行详细说明——以动态数码管为例子

1、main.c

只写业务逻辑

2、各个模块的说明

每个模块分为两部分

  • 模块名.c——模块函数的实现(如果函数中需要引用其他模块中的变量,也需要导入对应模块的.h文件)
  • 模块名.h——函数声明.h文件的预处理指令

(1)延时模块——Delay

a、Delay.c
//延时子函数 void Delay(unsigned int xms) { unsigned char i, j; while(xms--) { i = 2; j = 239; do { while (--j); } while (--i); } }
b、Delay.h
#ifndef __DELAY_H__ #define __DELAY_H__ void Delay(unsigned int xms); #endif

对预定义指令进行说明:

1、#ifndef __DELAY_H__

对模块名字是不区分大小写的。

这句的意思是:如果DELAY_H没有被定义

2、#define __DELAY_H__

这句的意思是:定义DELAY_H

3、函数的声明——后面必须加分号

4、#endif

条件编译块的结束

总结:避免重复被定义

(2)数码管显示模块——Nixie

a、Nixie.c
#include <REGX52.H> #include "Delay.h" //包含Delay头文件 //数码管段码表 unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //数码管显示子函数 void Nixie(unsigned char Location,Number) { switch(Location) //位码输出 { case 1:P2_4=1;P2_3=1;P2_2=1;break; case 2:P2_4=1;P2_3=1;P2_2=0;break; case 3:P2_4=1;P2_3=0;P2_2=1;break; case 4:P2_4=1;P2_3=0;P2_2=0;break; case 5:P2_4=0;P2_3=1;P2_2=1;break; case 6:P2_4=0;P2_3=1;P2_2=0;break; case 7:P2_4=0;P2_3=0;P2_2=1;break; case 8:P2_4=0;P2_3=0;P2_2=0;break; } P0=NixieTable[Number]; //段码输出 Delay(1); //显示一段时间 P0=0x00; //段码清0,消影 }
b、Nixie.h
#ifndef __NIXIE_H__ #define __NIXIE_H__ void Nixie(unsigned char Location,Number); #endif

(3)main.c

#include <REGX52.H> #include "Delay.h" //包含Delay头文件 #include "Nixie.h" //包含数码管头文件 void main() { while(1) { Nixie(1,1); //在数码管的第1位置显示1 Nixie(2,2); //在数码管的第2位置显示2 Nixie(3,3); //在数码管的第3位置显示3 Nixie(4,4); //在数码管的第4位置显示4 Nixie(5,5); //在数码管的第5位置显示5 Nixie(6,6); //在数码管的第6位置显示6 } }

只需导入两个模块,然后编写逻辑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 9:54:05

Python在TVA系统中的核心意义(10)

重磅预告&#xff1a;本专栏将独家连载新书《AI视觉技术&#xff1a;从入门到进阶》精华内容。本书是《AI视觉技术&#xff1a;从进阶到专家》的权威前导篇&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“AI教…

作者头像 李华
网站建设 2026/5/8 9:50:35

告别LNK1181:一份给C++新手的Visual Studio库目录配置保姆级图解教程

从零理解Visual Studio库配置&#xff1a;根治LNK1181错误的底层逻辑与实战图解 刚接触C开发的新手在Visual Studio中集成第三方库时&#xff0c;总会遇到那个令人头疼的红色错误提示&#xff1a;"LINK : fatal error LNK1181: 无法打开输入文件xxx.lib"。这就像一堵…

作者头像 李华
网站建设 2026/5/8 9:48:31

猫抓终极指南:构建专业级浏览器资源嗅探与流媒体处理系统

猫抓终极指南&#xff1a;构建专业级浏览器资源嗅探与流媒体处理系统 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓&#xff08;cat-catch&a…

作者头像 李华
网站建设 2026/5/8 9:48:30

Video Subtitle Remover:AI视频字幕去除终极解决方案

Video Subtitle Remover&#xff1a;AI视频字幕去除终极解决方案 【免费下载链接】video-subtitle-remover 基于AI的图片/视频硬字幕去除、文本水印去除&#xff0c;无损分辨率生成去字幕、去水印后的图片/视频文件。无需申请第三方API&#xff0c;本地实现。AI-based tool for…

作者头像 李华
网站建设 2026/5/8 9:47:30

Selenium菜鸟教程学习笔记

Selenium菜鸟教程学习笔记 本博客仅为个人学习记录与理解分享&#xff0c;非商业用途&#xff0c;所有代码与文档版权归原项目及其贡献者所有。selenium菜鸟教程 一、Selenium环境搭建 1.安装Selenium库 使用Python编写自动化脚本来控制浏览器 pip install selenium2.测试…

作者头像 李华