欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

单片机-C语言-定义和申明

程序员文章站 2022-06-19 10:51:52
以下代码是单片机程序,51单片机,编译器为HT-IDE3000, 简单来说 头文件中只能申明, 变量在头文件中申明时,要加上extern 这个关键字用来告诉编译器,变量在其它的文件中定义,为什么要在头文件中申明变量? >因为想在其它文件里的代码中使用这些变量, 如在a.c中使用b.c里定义的变量, ......

以下代码是单片机程序,51单片机,编译器为ht-ide3000,

简单来说

头文件中只能申明,

变量在头文件中申明时,要加上extern 这个关键字用来告诉编译器,变量在其它的文件中定义,为什么要在头文件中申明变量?---------->因为想在其它文件里的代码中使用这些变量,

如在a.c中使用b.c里定义的变量,

enum 不是变量,是我们自己定义的数据类型,像int char 一样,只不过是我们自己定义的,所以不用加,

 1 extern u16    g_u16timebasecount; 
 2 extern u8    g_8count_2s;
 3 extern u8    g_8count_8s;
 4 extern u8    g_8count_18s;
 5 extern u8    g_8count_60s;
 6 extern u8    g_8count_200s;
 7 extern u8    g_8count_6h;
 8 extern u8   g_8count_200sw;//6hour wash
 9 extern u8   g_8count_6hw;//6hour wash
10 extern u8   w_6hw_start;
11 extern u8   w_6hw_end;
12 extern u8   g_state;
13 extern u16    make_6h_count;
14 extern u8   g_once;
15 extern u16  s_c1;//中间变量
16 extern u16  s_c2;
17 extern u16  s_c3;
18 extern u16  s_c4;
19 
20 extern u8 uartreceive;
21 extern u8 ad[6];
22 extern u8 tds[6];
23 extern u8 count_ad;  
24 extern u8 count_ads;       
25 extern u16 sumtds_h,sumtds_l,sum;
26 extern u16 temer;
27 
28 typedef enum gpiopin
29 {
30   gpio_pin_0    = ((u8)0x01),   /*!< pin 0 selected */
31   gpio_pin_1    = ((u8)0x02),   /*!< pin 1 selected */
32   gpio_pin_2    = ((u8)0x04),   /*!< pin 2 selected */
33   gpio_pin_3    = ((u8)0x08),   /*!< pin 3 selected */
34   gpio_pin_4    = ((u8)0x10),   /*!< pin 4 selected */
35   gpio_pin_5    = ((u8)0x20),   /*!< pin 5 selected */
36   gpio_pin_6    = ((u8)0x40),   /*!< pin 6 selected */
37   gpio_pin_7    = ((u8)0x80),   /*!< pin 7 selected */
38   gpio_pin_lnib = ((u8)0x0f),   /*!< low nibble pins selected */
39   gpio_pin_hnib = ((u8)0xf0),   /*!< high nibble pins selected */
40   gpio_pin_all  = ((u8)0xff)    /*!< all pins selected */
41 }gpio_pin_typedef;

函数也在头文件中,也只能申明,不能加函数体

u8 uart_receive();

变量和函数的实现也就是函数体,只能在源文件中定义

 1 uflg uf1,uf2,uf3,uf4;
 2 u16    g_u16timebasecount; 
 3 u8    g_8count_2s;
 4 u8    g_8count_8s;
 5 u8    g_8count_18s;
 6 u8    g_8count_60s;
 7 u8    g_8count_200s;
 8 u8    g_8count_6h;
 9 u8   g_8count_200sw;//6hour wash
10 u8   g_8count_6hw;//6hour wash
11 u8   w_6hw_start;
12 u8   w_6hw_end;
13 u8   g_state;
14 u16    make_6h_count;
15 u8   g_once;
16 u16  s_c1;//中间变量
17 u16  s_c2;
18 u16  s_c3;
19 u16  s_c4;
20 u8 uartreceive=0;
21 u8 ad[6]={0,0,0,0,0,0};
22 u8 tds[6]={0,0,0,0,0,0};
23 u8 count_ad=0; 
24 u8 count_ads=0; 
25 u16 sumtds_h=0,sumtds_l=0,sum=0;
26 u16 temer;
27 
28 //===========================数据接收=========================================//
29 u8 uart_receive()
30     {
31        u8 data;
32        if(_rxif==1)//如果接收到数据
33        {
34              data=_txr_rxr;
35              return data;
36            }
37      }