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

news/2025/1/8 20:18:01/

模块化编程

在这里插入图片描述
在这里插入图片描述
将以往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;
}

http://www.ppmy.cn/news/1561368.html

相关文章

RedisTemplate执行lua脚本及Lua 脚本语言详解

使用RedisTemplate执行lua脚本 在开发中&#xff0c;我们经常需要与Redis数据库进行交互&#xff0c;而Redis是一个基于内存的高性能键值存储数据库&#xff0c;它支持多种数据结构&#xff0c;并提供了丰富的命令接口。在某些情况下&#xff0c;我们可能需要执行一些复杂的逻…

形象地理解UE4中的数据结构 TLinkedListBase

大家都熟知链表&#xff0c;但不一定能快速看懂UE4中的数据结构。 TLinkedListBase表示“链接”中的一个结点&#xff0c;有三个成员&#xff1a; 一、ElementType Element; 表示具体的业务&#xff0c;例如int链条中的一个整数。 二、NextLink 表示 “下一个Node”&#…

【Blackbox Exporter】prober.Handler源码详细分析

http.HandleFunc(path.Join(*routePrefix, "/probe"), func(w http.ResponseWriter, r *http.Request) {sc.Lock()conf : sc.Csc.Unlock()prober.Handler(w, r, conf, logger, rh, *timeoutOffset, nil, moduleUnknownCounter, allowedLevel)})我们了解到blackbox_ex…

使用mysql报Communications link failure异常解决

背景 线上使用polarDB&#xff0c;基于mysql(5.7)&#xff0c;架构为springbootmybatisplusdurid连接池&#xff0c;部分业务场景涉及大表更新和查询操作&#xff0c;在查询慢sql且超过一定时间时就会报出"Communications link failure"异常&#xff0c;主要体现在界…

基于人脸识别和 MySQL 的考勤管理系统实现

在现代企业和机构中&#xff0c;考勤管理系统是日常运营中不可或缺的一部分。传统的考勤方式&#xff08;如打卡、指纹识别等&#xff09;有时会因为各种原因导致管理效率低下或员工作弊。然而&#xff0c;随着人脸识别技术的飞速发展&#xff0c;基于人脸识别的考勤管理系统正…

docker学习记录:部署es+kibana

先了解下&#xff0c;基本的知识。 Elasticsearch(ES)是什么&#xff1f;有什么作用&#xff1f; 定义&#xff1a; • Elasticsearch是一个基于 Lucene 构建的开源、分布式、RESTful 风格的搜索和分析引擎。它能够快速地存储、搜索和分析大量数据。 作用&#xff1a; • 全文搜…

【SQL】进阶知识 — 各大数据库合并几条数据到一行的方式

大家好&#xff0c;欢迎来到本期的 SQL 知识分享&#xff01;今天我们要聊一个非常实用的技能&#xff1a;如何将多个行数据合并成一行&#xff01;如果你曾经需要把多个查询结果合并成一个单元&#xff0c;或者把多行数据汇总到一个字段中&#xff0c;这篇文章将会教你如何用 …

Unity-Mirror网络框架-从入门到精通之CCU示例

文章目录 前言什么是CCU&#xff1f;测试结果最后 前言 在现代游戏开发中&#xff0c;网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架&#xff0c;专为多人游戏开发设计。它使得开发者能够轻松实现网络连接、数据同步和游戏状态管理。本文…