51单片机应用开发(进阶)---模块化编程

[复制链接]
发表于 2025-12-25 14:17:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
实现目标

1、把握.h 文件的格式、extern 的用法;
2、握模块化编程方法步调;
3、详细实现:(1)提供一个C文件,将其按照功能模块举行模块化。

一、为什么要举行模块化编程?

传统的编程方式:
        全部的函数均在main.c里,若利用的模块比力多,则一个文件内会有很多代码,倒霉于代码的构造和管理。而且很影响开发职员的思绪。  
模块化编程:

        把各个模块的代码放在差别的.c文件里,在.h文件里提供外部可调用函数的声明,其他.c文件想利用此中的代码时,只须要 **#include<XXX.h>**即可。利用模块化编程可以极大的进步代码的可阅读性、可维护性以及可移植性。



二、准备知识

2.1  .c文件

存放的是函数、变量的界说
2.2  .h文件

可被外部调用的函数、变量的声明
2.3 预编译



三、模块化编程紧张步调

0、文件夹的创建
建一个文件夹装工程,再新建2个文件装各模块文件。

1、新建一个51单片机工程(参照从前)
建好工程后,新建两个组:USER、和DRIVER。

2、新增与模块对应的 .h  .c 文件(此例:main.c 、delay.c、delay.h)
将main.c 生存至USER文件夹;将delay.h、delay.c 生存至DRIVER文件夹。
(1) .h  文件格式
  1. #ifndef  _DELAY_H_
  2. #define  _DELAY_H_ 
  3. void Delay(unsigned int xms);  
  4.  
  5. #endif
复制代码
(2) .c  文件格式
  1. #include "delay.h"
  2. void Delay(unsigned int xms)        
  3. {
  4.     while(xms--)
  5.     {
  6.         unsigned char i, j;
  7.         i = 2;
  8.         j = 239;
  9.         do
  10.         {
  11.             while (--j);
  12.         } while (--i);    
  13.     }
  14. }
复制代码
(3)主函数C文件
  1. #include <REG52.h>
  2. #include "delay.h"
  3. void main()
  4. {
  5.     while(1)
  6.     {
  7.         Delay(10);
  8.     }
  9. }
复制代码
3、将各 .c文件添加至工程的组
将main.c 添加至USER组;将delay.c 添加至DRIVER组,delay.h不消添加。

4、给有.h文件的组添加路径包罗


如果不给.h 文件的路径包罗进来,将会出现下面的错误。

四、训练

给定下面步伐,请参照上面的步调,将其模块化。要求:(1)创建USER、和DRIVER两个组;(2)新建main.c/delay.c/ delay.h/seg.c /seg.h  。
  1. #include <REGX52.H>
  2. sbit A1 = P2^2;
  3. sbit B1 = P2^3;
  4. sbit C1 = P2^4;
  5. unsigned char  gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  6.                 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  7. void SEG_DIS(void);
  8.                                                        
  9. void Delay500ms()                //@11.0592MHz
  10. {
  11.         unsigned char i, j, k;
  12.         i = 4;
  13.         j = 129;
  14.         k = 119;
  15.         do
  16.         {
  17.                 do
  18.                 {
  19.                         while (--k);
  20.                 } while (--j);
  21.         } while (--i);
  22. }
  23. void  main()
  24. {
  25.         while(1)
  26.         {
  27.                
  28.            SEG_DIS();
  29.         }
  30. }
  31. void SEG_DIS(void)
  32. {   
  33.       int i;
  34.          C1 = 0;B1 =0;A1 =0;//数码管1 工作
  35.           for(i = 0;i < 16;i++)
  36.       {
  37.                  P0 = gsmg_code[i]; //显示
  38.                  Delay500ms();                                               
  39.       }
  40.           Delay500ms();       
  41.           for(i = 15;i >= 0;i--)
  42.       {
  43.                  P0 = gsmg_code[i]; //显示
  44.                  Delay500ms();
  45.       }       
  46. }
复制代码


五、实验效果

六、仿真实现


总结

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表