当前位置: 首页 > news >正文

【51单片机零基础-chapter5:模块化编程】

模块化编程

在这里插入图片描述
在这里插入图片描述
将以往main中泛型的代码,放在与main平级的c文件中,在h中引用.
简化main函数
在这里插入图片描述
在这里插入图片描述
将原来main中的delay抽出
然后将delay放入单独c文件,并单独开一个delay头文件,里面放置函数的声明,相当于收纳delay的c文件里面写的函数的接口.
在这里插入图片描述
注意,单个c文件所有用到的变量需要在该文件里面声明或引用,函数也是.
存放头文件的地址修改处,但是一般用不着
在这里插入图片描述

预编译

在这里插入图片描述

#define AAA#ifdef AAA
fx//会执行
#endif#ifndef AAA
gx//不会执行,因为AAA已经定义
#endif

所以无论头文件定义什么,一般都会包围语句
fx.h:

#ifndef __FX_H__		//加#define  __FX_H__
void fx(...)#endif		//加

#include <.h>是安装目录里面找
#include “.h” 是程序目录里面找
可以软件里add new新建文件
也可也外部已有文件add existing
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同时在主文件里右键open头文件可以打开则成功
在这里插入图片描述

在这里插入图片描述

模块化编程
main.c``````````````````````````````````
#include <REGX52.H>
#include "Delay.h"
#include "light.h"
void main(){while(1){light(1,9);Delay(1);light(2,8);Delay(1);light(3,5);Delay(1);light(6,2);Delay(1);light(7,1);Delay(1);light(8,1);Delay(1);}
}Dalay.c`````````````````````````````````
#include <REGX52.H>
void Delay(unsigned char x)		//@12.000MHz
{while(x--){unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}
}Delay.h`````````````````````````````````````````
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned char x);
#endiflight.h
#ifndef __LIGHT_H__
#define __LIGHT_H__
void light(unsigned char location,num);
#endiflight.c
#include <REGX52.H>
#include "Delay.h"
unsigned char lednum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void light(unsigned char location,num){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=lednum[num];Delay(1);P0=0x00;
}

相关文章:

【51单片机零基础-chapter5:模块化编程】

模块化编程 将以往main中泛型的代码,放在与main平级的c文件中,在h中引用. 简化main函数 将原来main中的delay抽出 然后将delay放入单独c文件,并单独开一个delay头文件,里面放置函数的声明,相当于收纳delay的c文件里面写的函数的接口. 注意,单个c文件所有用到的变量需要在该文…...

Redis中的主从/Redis八股

四、Redis主从 1.搭建主从架构 不像是负载均衡&#xff0c;这里是主从&#xff0c;是因为redis大多数是读少的是写 步骤 搭建实例&#xff08;建设有三个实例&#xff0c;同一个ip不同端口号&#xff09; 1&#xff09;创建目录 我们创建三个文件夹&#xff0c;名字分别叫700…...

ROS笔记

自定义消息的发布 1.创建空间包 1.创建ROS工作空间&#xff1a; mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make source devel/setup.bash 创建工作空间&#xff0c;编译设置环境 2.创建工作空间中的ROS包&#xff1a; cd ~/catkin_ws/src catkin_create_pkg your_pa…...

在 Linux 上调试 C++ 程序

在 Linux 上调试 C 程序是一个常见的开发任务&#xff0c;Linux 提供了多种强大的工具来帮助你进行调试。以下是常用的调试方法和工具. 1. 使用 GDB (GNU Debugger) GDB 是最常用且功能强大的命令行调试器&#xff0c;适用于 C、C 和其他语言。它允许你逐步执行代码、设置断点…...

让跨 project 联查更轻松,SLS StoreView 查询和分析实践

作者&#xff1a;章建&#xff08;处知&#xff09; 概述 日志服务 SLS 是云原生观测和分析平台&#xff0c;为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务。SLS 提供了多地域支持 [ 1] &#xff0c;方便用户可以根据数据源就近接入 SLS 服务&#xff0…...

20240107-类型转换

1. 自动类型转换 不损失数据精度的前提下&#xff0c;可自动完成变量的类型转换&#xff1b;不损失数据精度指不将超出变量可表示范围的值赋给该变量。 2.强制类型转换 若出现精度损失&#xff0c;java不会自动完成类型转换&#xff0c;需强制进行&#xff0c;见下代码的第8…...

关于Linux PAM模块下的pam_listfile

讲《Linux下禁止root远程登录访问》故事的时候&#xff0c;说好会另开一篇讲讲pam_listfile。我们先看看pam_listfile的man文档怎么介绍的。 下面这些就好比人物的简介&#xff0c;甚是恼人&#xff1b;让人看得不明就里&#xff0c;反正“他大舅他二舅都是他舅”。可以直接跳…...

OKHttp调用第三方接口,响应转string报错okhttp3.internal.http.RealResponseBody@4a3d0218

原因分析 通过OkHttp请求网络&#xff0c;结果请求下来的数据一直无法解析并且报错&#xff0c;因解析时String res response.body().toString() 将toString改为string即可&#xff01;...

弱电与电力工程领域,如何通过工程项目管理软件提升效率

在弱电与电力工程领域&#xff0c;通过益企工程云等工程项目管理软件提升效率的方法主要体现在以下几个方面&#xff1a; 1.智能化管理 自动化流程&#xff1a;益企工程云通过自动化处理日常任务和流程&#xff0c;减少手动操作&#xff0c;提高工作效率。 智能预警&#xff…...

引领实时数据分析新时代:阿里云实时数仓 Hologres

在数字化和智能化转型的浪潮中&#xff0c;数据已成为企业决策和运营优化的重要资产。传统的数据仓库解决方案虽然在一定程度上能够帮助企业管理数据&#xff0c;但随着业务需求的不断变化&#xff0c;实时数据处理和高效分析的能力显得愈加重要。为了应对这一挑战&#xff0c;…...

什么是中间件中间件有哪些

什么是中间件&#xff1f; 中间件&#xff08;Middleware&#xff09;是指在客户端和服务器之间的一层软件组件&#xff0c;用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件&#xff0c;它可以在两个系统之间传递、处理、转换数据&#xff0c;以达到协…...

css中的部分文字特性

文章目录 一、writing-mode二、word-break三、word-spacing;四、white-space五、省略 总结归纳常见文字特性&#xff0c;后续补充 一、writing-mode 默认horizontal-tbwriting-mode: vertical-lr; 从第一排开始竖着排&#xff0c;到底部再换第二排&#xff0c;文字与文字之间从…...

PyQt5 UI混合开发,控件的提升

PromoteLabelTest.py 提升的类 import sys from PyQt5.QtWidgets import QApplication, QWidget,QVBoxLayout,QTextEdit,QPushButton,QHBoxLayout,QFileDialog,QLabelclass PromoteLabel(QLabel):def __init__(self,parent None):super().__init__(parent)self.setText("…...

IP查询于访问控制保护你我安全

IP地址查询 查询方法&#xff1a; 命令行工具&#xff1a; ①在Windows系统中&#xff0c;我们可以使用命令提示符&#xff08;WINR&#xff09;查询IP地址&#xff0c;在弹窗中输入“ipconfig”命令查看本地网络适配器的IP地址等配置信息&#xff1b; ②在Linux系统中&…...

SpringBoot数据层解决方案

文章目录 1. 数据层解决方案2. 数据源技术 1. 数据层解决方案 现有数据层解决方案技术选型&#xff1a;Druid MyBatis-Plus MySQL 数据源&#xff1a;DruidDataSource持久化技术&#xff1a;MyBatis-Plus / MyBatis数据库&#xff1a;MySQL 下面的研究就分为三个层面进行研…...

前端数据模拟器 mockjs 和 fakerjs

功能&#xff1a;帮助前端生成随机数据&#xff0c;独立于后端单独开发 一、mockjs 安装&#xff1a;npm install mockjs 优点&#xff1a;官网是中文。 缺点&#xff1a;目前该库已经无人维护&#xff0c;也没人解决github上的bug。 官网 github地址 二、fakerjs 安装&#xf…...

Python 类 Class

在 Python 中&#xff0c;类&#xff08;Class&#xff09;是一种创建对象&#xff08;Object&#xff09;的模板&#xff0c;它允许我们定义对象的属性和方法。类是 Python 中实现面向对象编程&#xff08;OOP&#xff09;的核心结构。 定义一个类 定义一个类的基本语法如下…...

PHP语言的并发编程

PHP语言的并发编程 引言 随着互联网技术的迅速发展&#xff0c;Web 应用的复杂性和用户并发请求的增加&#xff0c;要求开发者在构建高性能应用时考虑并发编程。并发编程允许程序在同一时间执行多个任务&#xff0c;这对于处理高流量网站、API 和实时应用程序至关重要。虽然 …...

小米智能哑铃上市,代理 IP 视角下的智能健身新篇

在智能科技与健康生活深度融合的时代&#xff0c;小米以其敏锐的市场洞察力和强大的创新能力&#xff0c;不断拓展智能生态版图。米家智能哑铃的发布&#xff0c;无疑是其在智能健身领域的又一重要举措。而当我们从代理 IP 的独特视角来审视这一产品&#xff0c;会发现其中蕴含…...

业务日志设计

当一个项目足够大的时候&#xff0c;我们需要将统计系统完全独立出去&#xff0c;那么就无法避免数据采集的问题&#xff0c;我们可以在业务触发处增加log日志来记录当前变化的原始数据&#xff0c;提供统计系统进行采集 设计一个统计系统的日志记录机制时&#xff0c;主要需要…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...