上善若水|

Jinx8823

园龄:3年4个月粉丝:15关注:5

5-模块化编程

1.定义

模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等

2.注意事项

.c文件:函数、变量的定义

.h文件:可被外部调用的函数、变量的声明

任何自定义的变量、函数在调用前必须有定义或声明(同一个.c)

使用到的自定义函数的.c文件必须添加到工程参与编译

使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)

3.C语言预编译

C语言的预编译以#开头,作用是在真正的编译开始之前,对代码做一些处理(预编译)

预编译 意义
#include <REGX52.H> 把REGX52.H文件的内容搬到此处
#define PI 3.14 定义PI,将PI替换为3.14
#define ABC 定义ABC
#ifndef XX_H 如果没有定义__XX_H__
#endif 与#ifndef,#if匹配,组成“括号”

此外还有#ifdef,#if,#else,#elif,#undef等

4.实例

把原本的Delay函数以及数码管显示函数都各自编写成一个新的.c文件,并且创建一个相应的.h文件,main文件就可以通过引用这个.h文件来引用其中的函数

Delay.c

void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}

Nixie.c

#include <STC89C5xRC.H>
#include "Delay.h"
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char location,number)
{
switch(location)
{
case 1:P24=1;P23=1;P22=1;break;
case 2:P24=1;P23=1;P22=0;break;
case 3:P24=1;P23=0;P22=1;break;
case 4:P24=1;P23=0;P22=0;break;
case 5:P24=0;P23=1;P22=1;break;
case 6:P24=0;P23=1;P22=0;break;
case 7:P24=0;P23=0;P22=1;break;
case 8:P24=0;P23=0;P22=0;break;
}
P0=NixieTable[number];
Delay(1);
P0=0x00;
}

Delay.h文件

#ifndef __DELAY_H__//如果没有定义DELAY,就定义
#define __DELAY_H__
void Delay(unsigned int xms);
#endif

Nixie.h文件

#ifndef __NIXIE_H__
#define __NIXIE_H__
void Nixie(unsigned char location,number);
#endif

mian.c文件

#include <STC89C5xRC.H>
#include "Delay.h"
#include "Nixie.h"
void main()
{
while(1)
{
Nixie(1,1);
Nixie(2,2);
Nixie(3,3);
// P27=0;
// Delay(500);
// P27=1;
// Delay(500);
}
}

本文作者:Jinx8823

本文链接:https://www.cnblogs.com/Jinx8823/p/17937140

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Jinx8823  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起