微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第68节:单片机C语言的多文件编程技巧

第68节:单片机C语言的多文件编程技巧

时间:11-22 来源:互联网 点击:

  1. 量的定义。
  2. */
  3. #ifndef _MAIN_ //标志变量_MAIN_是用它本身的文件名称命名
  4. #define _MAIN_ //标志变量_MAIN_是用它本身的文件名称命名
  5. void main();//这个是函数的声明
  6. #endif
  7. /* 注释二:
  8. 以上语句
  9. #ifndef
  10. #define
  11. 插入其它内容...
  12. #endif
  13. 类似于把_MAIN_看成是一个标志变量
  14. if(_MAIN_==0)// 相当于#ifndef _MAIN_
  15. {
  16. _MAIN_=1;// 相当于#define _MAIN_
  17. 插入其它内容...
  18. } //相当于#endif
  19. 目的是通过一个标志位变量的赋值,让编译器在编译的时候,只包含一次此头文件,避免多次包含出错
  20. */
  21. /*------分割线--------------------------------------------------*/
  22. /*以下是 main.c 的内容*/
  23. /* 注释一:
  24. 每个源文件都必须包含两个文件,一个是单片机的系统头文件REG52.H,
  25. 另外一个是它自己本身的头文件main.h.剩下其它的头文件看实际情况来
  26. 决定是否调用,我们用到了哪些文件的函数,全局变量或者宏定义,就需要调用对应的头文件。
  27. 每个源文件只做函数的定义和变量的定义,不做函数的声明和变量的声明。
  28. */
  29. #include "REG52.H"//必须包含的单片机系统头文件
  30. #include "main.h"//必须包含它本身的头文件
  31. /* 注释二:
  32. (1)由于本源文件中调用initial_myself()和initial_peripheral()函数,而这两个函数
  33. 都是在initial文件里定义和声明的,所以必须把initial.h也包含进来。
  34. (2)由于本源文件中调用delay_long(100)函数,而这个函数
  35. 是在delay文件里定义和声明的,所以必须把delay.h也包含进来。
  36. (2)由于本源文件中调用led_flicker()函数,而这个函数
  37. 是在led文件里定义和声明的,所以必须把led.h也包含进来。
  38. */
  39. #include "initial.h"//由于本源文件中用到了initial_myself()和initial_peripheral()函数,所以必须把initial.h也包含进来
  40. #include "delay.h"//由于本源文件中用到了delay_long(100)函数,所以必须把delay.h也包含进来
  41. #include "led.h"//由于本源文件中用到了led_flicker()函数,所以必须把led.h也包含进来
  42. void main()//这个是函数的定义
  43. {
  44. initial_myself();
  45. delay_long(100);
  46. initial_peripheral();
  47. while(1)
  48. {
  49. led_flicker();
  50. }
  51. }
  52. /*------分割线--------------------------------------------------*/
  53. /*以下是 delay.h 的内容*/
  54. #ifndef _DELAY_ //标志变量_DELAY_是用它本身的文件名称命名
  55. #define _DELAY_ //标志变量_DELAY_是用它本身的文件名称命名
  56. void delay_long(unsigned int uiDelaylong); //这个是函数的声明,每一个源文件里的函数都要在它的头文件里声明
  57. #endif
  58. /*------分割线--------------------------------------------------*/
  59. /*以下是 delay.c 的内容*/
  60. #include "REG52.H"//必须包含的单片机系统头文件
  61. #include "delay.h"//必须包含它本身的头文件
  62. void delay_long(unsigned int uiDelayLong)//这个是函数的定义
  63. {
  64. unsigned int i; //这个是局部变量的定义
  65. unsigned int j; //这个是局部变量的定义
  66. for(i=0;i
  67. {
  68. for(j=0;j<500;j++)
  69. {
  70. ;
  71. }
  72. }
  73. }
  74. /*------分割线--------------------------------------------------*/
  75. /*以下是 initial.h 的内容*/
  76. #ifndef _INITIAL_ //标志变量_INITIAL_是用它本身的文件名称命名
  77. #define _INITIAL_ //标志变量_INITIAL_是用它本身的文件名称命名
  78. void initial_myself(); //这个是函数声明,每一个源文件里的函数都要在它的头文件里声明
  79. void initial_peripheral(); //这个是函数声明,每一个源文件里的函数都要在它的头文件里声明
  80. #endif
  81. /*------分割线--------------------------------------------------*/
  82. /*以下是 initial.c 的内容*/
  83. #include "REG52.H"//必须包含的单片机系统头文件
  84. #include "initial.h"//必须包含它本身的头文件
  85. /* 注释一:
  86. 由于本源文件中用到了led_dr的语句,而led_dr是在led文件里宏定义的,所以必须把led.h也包含进来
  87. */
  88. #include "led.h"//由于本源文件中用到了led_dr的语句,所以必须把led.h也包含进来
  89. void initial_myself()//这个是函数定义
  90. {
  91. TMOD=0x01;//以下能直接用TMOD,TH0,TL0,EA,ET0,TR0这些寄存器关键字,是因为包含了REG52.H头文件
  92. TH0=0xf8;
  93. TL0=0x2f;
  94. led_dr=0;//led_dr是在led文件里定义和声明的
  95. }
  96. void initial_peripheral() //这个是函数定义
  97. {
  98. EA=1;
  99. ET0=1;
  100. TR0=1;
  101. }
  102. /*------分割线--------------------------------------------------*/
  103. /*以下是 interrupt.h 的内容*/
  104. #ifndef _INTERRUPT_ //标志变量_INTERRUPT_是用它本身的文件名称命名
  105. #define _INTERRUPT_ //标志变量_INTERRUPT_是用它本身的文件名称

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top