找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 459|回复: 4
打印 上一主题 下一主题
收起左侧

51单片机模块化编程问题

[复制链接]
跳转到指定楼层
楼主
ID:33548 发表于 2025-3-15 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对51单片机模块化编程不得法,老是出问题。请大师们详细说明应该注意的问题:h头文件里必写什么,可写可不写什么?c文件里必写什么,可写可不写什么?各个不同模块之间要写什么?哪些文件怎么添加,添加到哪里等等。一一罗列出来。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:889178 发表于 2025-3-15 18:47 | 只看该作者
没必要重复造轮子,你找一个模块化的例程,在里面改改头文件名称,还有处理器型号什么的比较方便。
回复

使用道具 举报

板凳
ID:97023 发表于 2025-3-15 18:59 | 只看该作者
我的经验,供你参考:
***********************************************
模块化编程的步骤
一、创建头文件
  建立一个.c文件(源文件)和一个.h文件(头文件)。原则上.c文件和.h文件同名;文件名要有意义,最好能够体现该文件代码的功能。例如延时函数相关的源文件和头文件命名为:delay.c与delay.h
二、防重复包含处理
  在.h文件文件中加入如下代码:
  #ifndef XXX
  #define XXX
  ……
  #endif

  在同一个工程中各个.h文件的XXX不能相同,因此推荐使用一下规则:将.h文件的文件名全部大写,“.”替换成下划线“_”,首尾各添加两个下划线“__”作为XXX。
  例如delay.h
  #ifndef __DELAY_H__    //如果没有定义这个宏
  #define __DELAY_H__    //则定义该宏
  ……
  #endif
三、代码封装
  将需要模块化的代码封装成函数与宏定义。函数先在头文件里面声明一下,函数体放在.c文件中,需要被外部调用的宏定义放在.h文件中,仅会被本.c文件调用的宏定义放在.c文件中。
  尽量少用或不用全局变量,必须要用的全局变量的定义放在.c文件中,当需要调用外部全局变量,需要在.h文件中用extern重新声明一下。
四、使用源文件
  将.c文件添加到工程之中,同时在需要调用.h文件中的宏或者函数的.c文件中添加代码将该.h文件包含进去。
  所包含的头文件中的函数,宏定义,全局变量可以在.c文件中自由调用。
  #include <reg52.h>    //系统的头文件用尖括号
  #include "delay.h"    //自己定义的头文件用引号
五、特别注意
  在主源文件中只能包含.h文件,因为.h文件中已定义了所有的函数名称,而不能包含与.h文件同名的.c文件。
六、如果要声明一个全局数组(或变量),则除了在.h文件中声明外,还要在.c文件中定义,比如:
                在.h文件中声明:
                        extern uchar xdata RX8025TimeBuffH[];        //转换好的时钟数据:秒、分、时、周、日、月、年
                在.c文件中定义:
                        uchar xdata RX8025TimeBuffH[]={0,13,3,3,10,4,24};        //转换好的时钟数据:秒、分、时、周、日、月、年
                特别注意:在.h文件中,全局变量只能声明,而不能赋初值。
七、本模块使用的普通变量在.c文件中定义,但常量和I/O口的宏定义放在.h文件中。

评分

参与人数 1黑币 +15 收起 理由
1109 + 15 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

地板
ID:1003477 发表于 2025-3-16 22:10 | 只看该作者
楼上的大神讲的很详细,点赞
回复

使用道具 举报

5#
ID:349276 发表于 2025-3-18 00:18 来自手机 | 只看该作者
这是一个非常值得赞扬的问题。可以说,认真“学会”一门语言后,还想继续深入,就会碰到这个问题。特别是嵌入式系统,跟纯软件还不同。赞!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表