05节-51单片机-模块化编程

1.两种编程方式的对比

传统方式编程:
所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路
模块化编程:
把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等

2.模块化程序结构

要将Delay延时函数进行模块化,我们需要建立一个.c文件和.h文件,分别用于存放函数原型和函数声明。
在这里插入图片描述
注意事项:
.c文件:函数、变量的定义
.h文件:可被外部调用的函数、变量的声明

任何自定义的变量、函数在调用前必须有定义或声明(同一个.c)
使用到的自定义函数的.c文件必须添加到工程参与编译
使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)
.h文件的存放位置:
情况1:和工程文件不在同一目录,则需要如图中所示位置,进行配置.h文件的路径:
在这里插入图片描述
情况2:和工程文件在同一目录,使用即可,为了方便查看,可以添加显示到keil中,如不添加也无妨。
在这里插入图片描述
在这里插入图片描述
这样我们在该处可以看到创建好的.h文件了,并在可方便的打开进行编辑

3.C预编译

C语言的预编译以#开头,作用是在真正的编译开始之前,对代码做一些处理(预编译)
在这里插入图片描述此外还有#ifdef,#if,#else,#elif,#undef等

4.实战

将上一节中的数码管显示,进行模块化
首先,新建Delay.c文件
在这里插入图片描述
Delay.c

void Delay(int ms)	//@12.000MHz
{unsigned char data i, j;while(ms--){i = 2;j = 239;do{while (--j);} while (--i);
}
}

然后,使用同样的方式建立Delay.h文件,并将.h文件添加到该处,在这里插入图片描述
在这里插入图片描述
并编写如下代码:
Delay.h

#ifndef __DELAY_H__
#define __DELAY_H__
unsigned char Delay(int ms);
#endif

同理处理Nixie函数,模块化为Nixie.c和Nixie.h
Nixie.c

#include <REGX52.H>  //该文件中需要用到P2,P0,所以需要包含void Nixie(unsigned char Location,unsigned char Number)
{unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77F,0x7C,0x39,0x5E,0x79,0x71,0x00};switch(Location){case 1:  P2_2=1;P2_3=1;P2_4=1;break;case 2:  P2_2=0;P2_3=1;P2_4=1;break;case 3:  P2_2=1;P2_3=0;P2_4=1;break;case 4:  P2_2=0;P2_3=0;P2_4=1;break;case 5:  P2_2=1;P2_3=1;P2_4=0;break;case 6:  P2_2=0;P2_3=1;P2_4=0;break;case 7:  P2_2=1;P2_3=0;P2_4=0;break;case 8:  P2_2=0;P2_3=0;P2_4=0;break;}P0=NixieTable[Number];
}

Nixie.h

#ifndef __NIXIE_H__
#define __NIXIE_H__
void Nixie(unsigned char Location,unsigned char Number);
#endif

main.c
其中< >的表示从keil安装目录寻找.h
" "则表示从当前目录寻找

使用<>:这种方式用于包含标准库文件或者编译器提供的头文件,编译器会在标准库路径或者编译器指定的路径下查找这些头文件。
例如:#include <REGX52.H>,REGX52.H应该是一个标准库或者编译器提供的头文件,编译器会在标准库路径或者编译器指定的路径下查找并包含该文件。
使用"":这种方式用于包含用户自定义的头文件或者当前目录下的头文件,编译器会首先在当前目录下查找这些头文件,如果找不到才会到标准库路径或者编译器指定的路径下查找。

#include <REGX52.H>
#include "Delay.h"
#include "Nixie.h"
void main()
{while(1){Nixie(1,1);Delay(1000); //Nixie(2,2);Delay(1000);Nixie(3,3);Delay(1000);Nixie(4,4);Delay(1000);Nixie(5,5);Delay(1000);Nixie(6,6);Delay(1000);Nixie(7,7);Delay(1000);Nixie(8,8);Delay(1000);}
}

补充:字体问题

在keil中编写代码,可能出现中文乱码等问题,因此需要改变编码格式:
通常采用的是UTF-8编码方式。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/311736.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字革命的先锋:Web3对社会的影响

引言 在信息技术飞速发展的当下&#xff0c;Web3作为一个新兴的互联网模式&#xff0c;正在逐渐改变我们的生活方式、商业模式和社会结构。本文将深入探讨Web3的核心特点、它在各个领域中的应用以及对社会产生的深远影响。 1. Web3的核心特点 1.1 去中心化 Web3强调去中心化…

Day 27 39. 组合总和 40.组合总和II 131.分割回文串

组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 target&#xff09;都是正整数。解集不能…

stm32实现hid键盘

前面的cubelmx项目配置参考 stm32实现hid鼠标-CSDN博客https://blog.csdn.net/anlog/article/details/137814494?spm1001.2014.3001.5502两个项目的配置完全相同。 代码 引用 键盘代码&#xff1a; 替换hid设备描述符 先屏蔽鼠标设备描述符 替换为键盘设备描述符 修改宏定…

Shell循环以及条件语句使用

Shell脚本基础已经发过&#xff0c;可在主页查找&#xff0c;现在讲解case&#xff0c;for&#xff0c;while语句&#xff0c;以及语句的练习。 1.case语句 等同于C语⾔的switch-case 格式&#xff1a; case $变量 in # 判断变量的值 a) # 值是什么语句;; # 相当于break 但…

机器学习和深度学习的区别

机器学习与深度学习的区别 一、原理差异二、应用差异三、实现方式差异四、在实际应用中扮演的角色1、图像识别和计算机视觉2、自然语言处理NLP3、语音识别领域4、其它—智能制造/医疗健康/金融/教育 五、总结 在人工智能领域&#xff0c;机器学习和深度学习是两个重要的概念&am…

『FPGA通信接口』串行通信接口-SPI

文章目录 1.SPI简介2.控制时序3.Dual、Qual模式4.例程设计与代码解读5.SPI接口实战应用5.1时序要求5.2仿真时序图5.3代码设计 6.传送门 1.SPI简介 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;通常说SPI接口或SPI协议都是指SPI这…

多模态之ALBEF—先对齐后融合,利用动量蒸馏学习视觉语言模型表征,学习细节理解与论文详细阅读:Align before Fuse

Align before Fuse: Vision and Language Representation Learning with Momentum Distillation &#xff08;ALBEF&#xff09;在融合之前对齐&#xff1a;利用动量蒸馏进行视觉与语言表示学习 Paper: arxiv.org/pdf/2107.07651.pdf Github: https://github.com/salesforce/…

NineData正式将SQL开发正式升级为数据库DevOps

NineData SQL 开发早期主要提供 SQL 窗口&#xff08;IDE&#xff09;功能&#xff0c;产品经过将近两年时间的打磨&#xff0c;新增了大量的企业级功能&#xff0c;时至今日已经服务了上万开发者&#xff0c;覆盖了数据库设计、开发、测试、变更等生命周期的功能。 为了让企业…

Vue3 + Element-Plus 使用 Table 预览图片发生元素遮挡

Vue3 Element-Plus 使用 Table 预览图片发生元素遮挡 问题代码问题重现解决方法最终效果 问题代码 <el-table-column label"视频" align"center"><template #default"scope" style"display: flex;"><div style"…

Prime (2021): 2

前言 这个靶机有亿点难,收获很多。打靶的时候&#xff0c;前面很顺&#xff0c;到创建ssh公钥之后就一点不会了。 1 01 arp扫描&#xff0c;发现有一个130&#xff0c;再查看端口 有22&#xff0c;80&#xff0c;129&#xff0c;445&#xff0c;10123 dirb扫描目录 这…

【Git】安装 Git

文章目录 1. CentOS 下安装2. Ubuntu 下安装 Git 是开放源代码的代码托管工具&#xff0c;最早是在 Linux 下开发的。开始也只能应用于 Linux 平台&#xff0c;后面慢慢的被移植到 Windows 下。现在&#xff0c;Git 可以在 Linux、Unix、Mac 和 Windows 这几大平台上正常运行了…

在Qt中如何简单设计一个文件和图像浏览器

文本浏览器 设计一个文本浏览器程序&#xff0c;可以打开、显示 txt、html等文件。 1.在Qt Designer中设计一个菜单其中包含打开和退出选项&#xff1a; 2. 在 QMainWindow 构造函数中把 textBrower 设为主窗口的中心部件&#xff0c;这样整个窗口就成了包含 textBrower 的单文…

Samtec应用分享 | 汽车应用中的视觉系统

【前言】 视觉系统在未来的汽车设计中扮演着关键的角色。 在过去&#xff0c;一直是由驾驶员掌握和应对道路上的危险&#xff0c;但现代车辆在保障驾驶安全方面发挥着前所未有的作用。 视觉系统&#xff0c;无论是可见光摄像头还是先进的探测系统&#xff0c;如激光雷达&…

解读科技智慧公厕改变生活的革命性创新之路

公共厕所&#xff0c;作为城市基础设施的一部分&#xff0c;一直以来都备受人们诟病。脏乱差、设施老旧、管理混乱&#xff0c;成为公共厕所长期存在的问题。然而&#xff0c;随着科技的不断进步&#xff0c;智慧公厕应运而生&#xff0c;为解决公厕难题&#xff0c;智慧公厕源…

CentOS 7开机启动过程,引导和服务,密码的修改

开机启动过程&#xff1a; 引导过程&#xff1a;1.开机自检(BIOS)->2.MBR引导->GRUB菜单->加载内核kernel->systemd进程初始化 程序&#xff1a;执行特定任务的一串代码&#xff0c;静态&#xff0c;存在硬盘中。 进程&#xff1a;运行中的程序叫进程&#xff0…

分类损失函数与评估指标

目录 1 评估指标 1.1 准确率 1.2 精确率 1.3 召回率 1.4 F1 score 1.5 ROC曲线 1.6 AUC 1.7 PRC曲线的优势 2 损失函数 1. 负对数似然损失 2. 交叉熵损失 3. 指数损失 3 分类问题为什么用交叉熵损失不用 MSE 损失 1 评估指标 混淆矩阵 TP(True Positive) ---- 正…

AUTOCAD输出或打印PDF文件时,如何将图形居中且布满图纸?

AUTOCAD输出或打印PDF文件时,如何将图形居中且布满图纸? 如下图所示,我们打开一份DWG格式的图纸文件,然后点击上方的“打印“图标, 如下图所示, 打印机/绘图仪这里选择“DWG To PDF“; 图纸尺寸:这里以普通的A4纸为例进行说明; 打印比例选择“布满图纸“; 打印偏移…

【微信小程序之分包】

微信小程序之分包 什么是分包分包的好处分包前的结构图分包后的结构图分包的加载规则分包的体积限制使用分包打包原则引用原则独立分包独立分包的配置方法独立分包的引用原则分包预下载配置分包的预下载分包预下载限制 什么是分包 分包指的是把一个完整小程序项目&#xff0c;…

公园高速公路景区校园IP网络广播音柱SIP音柱

公园高速公路景区校园IP网络广播音柱SIP音柱 适用于学校、车站、教堂、工厂、仓库、公园停车场及露天市场高速公路等场所播放录制语音文件或背景音乐节目&#xff0c;专业一体化音箱设计&#xff0c;高强度防水设计&#xff0c;符合IP54防护等认证&#xff0c;数字化产品&…

酷开系统丨酷开科技打造P9系列智能投影,让智能化更进一步

近些年&#xff0c;随着科技的进步&#xff0c;家用投影仪已经成为家庭娱乐中不可或缺的一部分。尤其对年轻人来说&#xff0c;他们更喜欢在巨幕上看电影、玩游戏或听歌唱歌&#xff0c;投影仪在巨幕上的光影效果确实能带来更好的沉浸感体验&#xff0c;但这也是需要强大的系统…