历史上的今天
今天是:2025年08月20日(星期三)
2021年08月20日 | 51单片机-多文件编写
2021-08-20 来源:eefocus
为了与主流的编程素养接轨,我们本章讲解如何书写简洁并且高效率的代码以及首次运用多文件编程。多文件的作用是方便编写大程序时更加的模块化,那么至于原理,头文件包含关系等这些知识还需读者自己再多多补补C语言知识了。
1.多文件的优势
运用多文件编程是为了使我们教程无需每次都贴出相同功能的代码,像第一阶段最后的一个例程,已经有很多代码完全可以前往以前的例程里复制即可,笔者也是考虑到一开始我们都是从单个“.c”文件入门单片机编程,所以之前的例程都是提供完整的代码给大家方便复制移植到自己的单个“.c”工程文件中。
可后期的例程里我们的代码量越来越大,显然全部给出就不合适了,所以我们把经常使用的功能模块代码封装起来放在另一个“.c”文件里提供给我们调用,这个“.c”文件命名为“function.c”。以后我们提供的代码就是“main.c”的内容,这样教程供给的代码数量就会精简一些。
2.typedef
第一阶段里我们的代码有一部分可以再简化的,比如unsigned int的定义,我们用“typedef unsigned int u16;”声明,u16就是用一个更简洁的名字来取代“unsigned int”去定义16位的变量。
用“typedef unsigned char u8;”的话,u8就是用来定义8位的变量,或者像之前定义的数组也可以像这样
“u8 LEDSET[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};”去定义。
那么有时需要定义32位的变量,就用“typedef unsigned long u32;”即可。
虽然#define与typedef的作用有点意思相近,但“#define u16 unsigned int”是不严谨的编写习惯,不建议这样使用,原因大家可上网了解。
3.准备工作
首次讲解多文件编程,这里大家跟着步骤来做。
新建一个“.c”文件,命名为“function.c”后保存。
再新建一个“function.h”

双击“Source Group 1”添加文件进去

在“function.h”先添加如下内容:
1 2 3 4 5 6 7 8 9 | #ifndef __FUNCTION_H__ #define __FUNCTION_H__ typedef unsigned char u8;//对数据类型进行声明定义 typedef unsigned int u16; typedef unsigned long u32; #endif |

后续工作我们下一讲再讲解。
上一篇:51单片机-综合例程
下一篇:51单片机-模块初始化
史海拾趣
|
跪求 TMS320C5509与LCD的接线图,并且我想使用TMS320C5509做图像采集,采集的图像精度为352X288,请求摄像头与TMS320C5509的接线图… 查看全部问答> |
|
☆☆☆☆美国讯升科技急急急急急急急急急急聘Linux/Uinux 下C++工程师☆☆☆☆☆ ☆☆☆☆美国讯升科技急急急急急急急急急急聘Linux/Uinux 下C++工程师☆☆☆☆☆ 请严格符合以下条件者请投简历到:bzhang@comrise.com,并注明应聘职位及招聘信息来源于天涯论坛。 一:手机应用软件开发工程师 Qualifications A: 手机应用软件 ...… 查看全部问答> |
|
最近找工作,请问大家“IC封装测试”是干什么的呢? 主要是以下几个问题,谢谢了哈 1.工作的主要内容是什么的呢? 2.工作的前景如何,以后发展方向主要是怎样的呢? 3.行业的待遇具体怎么样呢? … 查看全部问答> |
|
更新IV:FirmwareLib在EK_STM32F上的学习体会(I2C/IWDG) 继续,上一贴是:更新III:Firmware Lib在EK_STM32F上的学习体会(FLASH/GPIO)再早的几个帖子链接可以在上一贴内找,就不一个一个列出来了,等全系列结束了来个总集。-----------------------I2C分隔线-----------------------------------Exem ...… 查看全部问答> |
|
我是刚刚接触stm8 自己焊了块板 今天调试串口就是不行,可以接收到但是是乱码 我用的是它官方的固件库 下面是例程 /*********************/ #include "stm8s.h" #include "stdio.h" main() { &nb ...… 查看全部问答> |
|
msp430F449的时钟最高可以40MHZ,请问下这个40MHZ是外接40MHZ晶振实现,还是编程实现?单片机频率40MHZ除了功耗大,还有什么负面影响吗? 还有 我软件变成只能将XT2上的8M时钟作为MCLK,请问怎样编程实现40MHZ的F449的MCLK频率??… 查看全部问答> |




