51单片机最强模块化封装(1)

news2024/10/9 12:28:40

文章目录

  • 前言
  • 一、sys文件创建和路径添加
    • 1.创建文件夹添加文件夹路径
  • 二、sys文件编写
    • 1.sys.h
    • 2.sys.c
  • 三、模块化的测试
  • 总结


前言

今天将为大家讲解51单片机的模块化封装,为什么要讲这个模块化封装呢?模块化封装将提高我们代码的可移植性和可复用性,方便我们后续项目的进行。
后续我们将推出几个51单片机项目:
1.智能密码锁
2.温控风扇
3.环境监测系统
大家想做什么项目也可以联系我私信我。

一、sys文件创建和路径添加

1.创建文件夹添加文件夹路径

在工程目录下我们建立一个名为sys的文件夹。
在这里插入图片描述
在文件夹下我们添加sys.c和sys.h
在这里插入图片描述
将sys文件夹添加进工程代码,然后添加文件夹路径。
这里可以添加一个名为sys的文件夹。
在这里插入图片描述
在这里插入图片描述
然后进行编译测试添加是否成功。
编译之前我们需要先勾选此项,不然编译过后无法生成hex文件。
在这里插入图片描述

二、sys文件编写

1.sys.h

首先我们先编写一个sys头文件。
在头文件的开头和结尾处加上:
#ifndef __SYS_H
#define __SYS_H

#endif
这样的宏。
使用这样的宏可以防止头文件的重复包含。

sys头文件处我们包含了<reg52.h>的头文件,和重定义了unsigned char和unsigned int类型变量。
重定义这两个变量可以方便我们以后调用时的编写代码。
sys中还包含了delayms ms级延时函数,延时函数实现原理这里我就不多说。大家可以看我之前的文章都有讲到。
原理

/*此宏作用:防止头文件重复包含*/
#ifndef __SYS_H
#define __SYS_H

#include <reg52.h>

/*
	类型重定义
	当以后使用到unsigned char 和 unsigned int时可以使用u8和u16代替
*/
typedef unsigned char u8;
typedef unsigned int u16;


/*
	延时函数
	延时单位:ms
*/
void delayms(u16 ms);


#endif


2.sys.c

我们开始编写sys.c文件,sys.c文件主要就是实现delayms这个函数,相信大家学习过C语言都明白这样写的作用,这里就不多展开说明。

#include "sys.h"

void delayms(u16 ms)
{
	u8 i;

	while(ms--)
	{
		for(i=0;i<113;i++);
	}	
}

三、模块化的测试

每当我们编写好一个模块的时候都需要进行测试调试,假如不进行测试的话那么以后出现了问题再来修改就比较麻烦了。所以我们要养成写一个模块测试一个模块的好习惯。

我们在main.c中包含"sys.h",调用里面定义的u8,u16,delayms进行测试,编译发现无错误说明测试成功。

#include "sys.h"


void main(void)
{
	u8 num;
	u16 data1;
	delayms(1000);
	/*主函数*/
	while(1)
	{

	}
	
}

总结

后期将持续更新模块化文章请大家多多点赞,多多留言评论。
后期将会出对应视频提供大家学习:
B站地址:B站

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数组、 977. 有序数组的平方

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数…

服务器被ddos攻击的处置策略

如果您的服务器遭到了DDoS攻击&#xff0c;以下是一些可以采取的措施&#xff1a;使用防火墙和安全组进行限制&#xff1a;限制服务器的流量以防止进一步的攻击。升级服务器资源&#xff1a;为了应对更高的流量&#xff0c;可以升级服务器的内存&#xff0c;处理器等资源。安装…

GraspNet-1Billion

目录 .1 intro .2 Dataset 2.1 data collection&#xff1a; 2.2 data annotation 2.3 evaluation .3 backbone 3.1 Training and Inference 3.2 Experiment References .1 intro contribution: 一个具有统一评价体系的大规模抓取姿态检测数据集 评估系统通过解析计…

顶会论文 | 虚拟网络探测技术的探索与实践

作者&#xff1a;吕彪 阿里云网络齐天负责人 云网络由物理网络和虚拟网络共同组成&#xff0c;两者都会影响网络性能。过去的研究主要集中于解决物理网络探测&#xff0c;而在虚拟网络探测领域的相应研究则较少。本文将为大家分享一种专为大规模多租户虚拟网络设计的主动探测系…

SAP进阶技术分享一:ABAP增强(1)

一&#xff1a;基于源代码的增强 1.定义 源代码增强以子程序形式发布&#xff0c;可以用PERFORM调用这些子程序&#xff0c;发布的时候是空的&#xff0c;提供一个空代码的子过程&#xff0c;用户可以添加自己的代码。 2.特点 需要修改sap的标准代码。   屏幕增强以客户屏幕…

opencv轮廓相关函数

查找轮廓contours, hierarchy cv2.findContours(image,mode,method)参数&#xff1a;image&#xff1a;寻找轮廓所使用的图像。&#xff08;寻找过程不修改此图像&#xff09;mode&#xff1a;模式。cv2.RETR_EXTERNAL只检测外轮廓&#xff1b;cv2.RETR_LIST检测的轮廓不建立等…

【Qt】10.Linux下,Qt连接云MySQL数据库

目录 下载MySQL压缩包 配置MySQL Qt下编译MySQL 测试 下载MySQL压缩包 网址&#xff1a; MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 我为了跟云服务器上的MySQL版本一致&#xff0c;减少不必要的麻…

带你手撕排序算法

文章目录前言一、排序的相关概念二、插入排序1.直接插入&#xff08;1&#xff09;算法思想&#xff08;2&#xff09;算法讲解&#xff08;3&#xff09;代码及解析&#xff08;4&#xff09;代码总结2.希尔排序( 缩小增量排序 )&#xff08;1&#xff09;算法思想&#xff08…

maxcomputer的分区表相关操作

– 查看xsxw(学生行为表定义) desc xsxw; – 查看xsxw1(学生行为表定义) desc xsxw1; – 上面的两张表是通过ddl语句创建的分区表 – 创建ddl语句如下 – CREATE TABLE IF NOT EXISTS xsxw1( – xwsj STRING COMMENT ‘行为时间’, – xh STRING COMMENT ‘学号’, – xwdd ST…

基于OptiSystem的LD\LED\EDFA仿真分析

1、客户需求&#xff1a; &#xff08;1&#xff09; 仿真LD、LED直接调制系统的输出光谱&#xff0c;观察系统输出性能。 &#xff08;2&#xff09; 采用EDFA的光纤通信系统&#xff0c;实现对多路光波信号的放大&#xff0c;实现200km、40Gbit/s的传输。用仿真软件搭建一个…

关系数据库——关系代数

文章目录一、传统的集合运算二、专门的关系运算1.选择&#xff08;restriction&#xff09;2.投影&#xff08;Projection&#xff09;3.连接&#xff08;join&#xff09;1&#xff09;等值连接2&#xff09;自然连接4.除&#xff08;Division&#xff09;一、传统的集合运算 …

《深入浅出计算机组成原理》学习笔记 Day17

冒险和预测&#xff08;一&#xff09;1. 结构冒险2. 数据冒险参考1. 结构冒险 结构冒险本质上是一个硬件层面的资源竞争问题&#xff0c;也就是一个硬件电路层面的问题。 CPU 在同一个时钟周期内&#xff0c;同时在运行两条计算机指令的不同阶段&#xff0c;但这两个不同阶段…

Github消息推送到Telegram,并使用Vercel部署

Github buibuibui Telegram 仓库地址&#xff1a;https://github.com/yesmore/gh-buibuibui-tg 借助 Github 的 Webhooks、Vercel’s Serverless API 和 Telegram Bot&#xff0c;连接 Github 和 Telegram&#xff0c;在 Telegram chat 中接收仓库的消息。 效果&#xff1a;你…

深入分析ConcurrentHashMap1.8的扩容实现

什么情况会触发扩容 当往hashMap中成功插入一个key/value节点时&#xff0c;有可能触发扩容动作&#xff1a; 1、如果新增节点之后&#xff0c;所在链表的元素个数达到了阈值 8&#xff0c;则会调用treeifyBin方法把链表转换成红黑树&#xff0c;不过在结构转换之前&#xff0…

做跨境电商日本市场,如何才能让客户满意?

跨境电商作为互联网技术的产物&#xff0c;现如今早就风靡全世界。我国跨境电商行业的发展起步时间比较晚&#xff0c;但在各方力量的加持下&#xff0c;行业的发展日趋完善&#xff0c;行业对国内经济的带动作用也更加明显。当下许多国潮品牌在Starday等跨境电商服务平台的支持…

如何选择研发效能管理平台?好用的研发效能管理平台有哪些

本文将对比介绍8款比较知名的效能度量管理平台&#xff1a;1.PingCode&#xff1b;2.思码逸&#xff1b;3.云效&#xff1b;4.金山云&#xff1b;5.Git&#xff1b;6.Jenkins&#xff1b;7.Bamboo&#xff1b;8.Docker。但在对比研发效能平台之前&#xff0c;我们先来聊一些研发…

Linux驱动开发基础__POLL机制

目录 1 适用场景 2 POLL机制的内核代码详解 2.1 sys_poll 函数 2.2 do_sys_poll 函数 2.3 do_poll函数 3 poll机制使用流程 4 驱动编程 5 应用编程 6 代码 6.1 gpio_key_drv.c 6.2 button_test.c 6.3 Makefile 可以看 字符设备驱动程序之poll机制 那篇文章中的机…

【认证相关】FTA

FTA 测试需要涉及的工作与流程测试大致流程及涉及的工作送测Lab 之前需做的准备工作项目与测试样机基本信息如下信息请填写发给MTK&#xff0c;以便MTK 了解基本的认证项目与产品信息PICS 相关MTK 会提供一份Chip 的default PICS&#xff0c;但是客户还需要自行修改一些项的Val…

分享154个ASP源码,总有一款适合您

ASP源码 分享154个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 154个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1Jt3X-WAZv-rZswzjwyEtSQ?pwdt46u 提取码&#x…

【C++初阶】七、STL---vector模拟实现

目录 一、模拟实现接口总览 1.1 接口总览 1.2 vector整体框架 1.3 vector成员变量介绍 二、vector模拟实现 2.1 构造函数 2.1.1 无参构造 2.1.2 迭代器区间构造 2.1.3 n个val构造 2.1.4 拷贝构造 2.2 赋值运算符重载 2.2.1 传统写法 2.2.2 现代写法 2.3 析构函数…