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

简单来说

头文件中只能申明,

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

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

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

 extern u16    g_u16TimeBaseCount;
extern u8 g_8count_2s;
extern u8 g_8count_8s;
extern u8 g_8count_18s;
extern u8 g_8count_60s;
extern u8 g_8count_200s;
extern u8 g_8count_6h;
extern u8 g_8count_200sw;//6hour wash
extern u8 g_8count_6hw;//6hour wash
extern u8 w_6hw_start;
extern u8 w_6hw_end;
extern u8 g_state;
extern u16 make_6h_count;
extern u8 g_once;
extern u16 s_c1;//中间变量
extern u16 s_c2;
extern u16 s_c3;
extern u16 s_c4; extern u8 UARTReceive;
extern u8 AD[];
extern u8 TDS[];
extern u8 count_AD;
extern u8 count_ADS;
extern u16 sumTDS_H,sumTDS_L,sum;
extern u16 temer; typedef enum GPIOPin
{
GPIO_Pin_0 = ((u8)0x01), /*!< Pin 0 selected */
GPIO_Pin_1 = ((u8)0x02), /*!< Pin 1 selected */
GPIO_Pin_2 = ((u8)0x04), /*!< Pin 2 selected */
GPIO_Pin_3 = ((u8)0x08), /*!< Pin 3 selected */
GPIO_Pin_4 = ((u8)0x10), /*!< Pin 4 selected */
GPIO_Pin_5 = ((u8)0x20), /*!< Pin 5 selected */
GPIO_Pin_6 = ((u8)0x40), /*!< Pin 6 selected */
GPIO_Pin_7 = ((u8)0x80), /*!< Pin 7 selected */
GPIO_Pin_LNib = ((u8)0x0F), /*!< Low nibble pins selected */
GPIO_Pin_HNib = ((u8)0xF0), /*!< High nibble pins selected */
GPIO_Pin_All = ((u8)0xFF) /*!< All pins selected */
}GPIO_Pin_TypeDef;

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

u8 UART_Receive();

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

 uFlg uF1,uF2,uF3,uF4;
u16 g_u16TimeBaseCount;
u8 g_8count_2s;
u8 g_8count_8s;
u8 g_8count_18s;
u8 g_8count_60s;
u8 g_8count_200s;
u8 g_8count_6h;
u8 g_8count_200sw;//6hour wash
u8 g_8count_6hw;//6hour wash
u8 w_6hw_start;
u8 w_6hw_end;
u8 g_state;
u16 make_6h_count;
u8 g_once;
u16 s_c1;//中间变量
u16 s_c2;
u16 s_c3;
u16 s_c4;
u8 UARTReceive=;
u8 AD[]={,,,,,};
u8 TDS[]={,,,,,};
u8 count_AD=;
u8 count_ADS=;
u16 sumTDS_H=,sumTDS_L=,sum=;
u16 temer; //===========================数据接收=========================================//
u8 UART_Receive()
{
u8 data;
if(_rxif==)//如果接收到数据
{
data=_txr_rxr;
return data;
}
}

单片机-C语言-定义和申明的更多相关文章

  1. 单片机C语言下LCD多级菜单的一种实现方法

    摘要:     介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑.实用的程序模型. 关键词: 液晶显示屏; 多级菜单; 单片机; C 语言; LCD 中 ...

  2. 51单片机C语言学习笔记3: 存储器结构

    MCS-51单片机在物理结构上有四个存储空间: 1.片内程序存储器2.片外程序存储器3.片内数据存储器4.片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1.片内外统一编 ...

  3. 51单片机C语言学习笔记6:51单片机C语言头文件及其使用

    很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...

  4. 单片机C语言中标志位的经典应用

    /* 本例程是C语言的位域操作示例 这里为什么位域结构体与联合体一起使用? -->因为这样定义后,即可以单独使用标志位 也可同时使用整个字节数据 主要应用:单片机C语言 好处:用标志位可以节省R ...

  5. 单片机C 语言与汇编语言混合编程

    在单片机应用系统设计中,过去主要采用汇编语言开发程序. 汇编语言编写的程序对单片机硬件操作很方便,编写的程序代码短,效率高,但系统设计的周期长,可读性和可移植性都很差.C语言程序开发是近年来单片机系统 ...

  6. 51单片机数组的定义方法(code与data的作用)

    转自:http://blog.sina.com.cn/s/blog_94994f7b01010s1h.html 数组前不加“code”或“data”,则默认将数组存放在程序存储器中:code 指定数据 ...

  7. 单片机c语言教程:C51循环语句

    单片机c语言教程第十三课 C51循环语句 循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操 作.如一个 12M 的 51 芯片应用电路中要求实现 1 毫秒的延时,那么就要执行 ...

  8. C语言和单片机C语言为什么会有差异?虽不同但理同!

    许多小伙伴在学完C语言后想入门单片机,但学着学着发现明明都是C语言,为什么单片机C语言和我当初学的C语言有差异呢? 今天小编就来梳理我们平时所学的C语言与单片机C语言的有什么样的不同. 单片机c语言比 ...

  9. Java语言定义的线程状态分析

    说到线程,一定要谈到线程状态,不同的状态说明线程正处于不同的工作机制下,不同的工作机制下某些动作可能对线程产生不同的影响. Java语言定义了6中状态,而同一时刻,线程有且仅有其中的一种状态.要获取J ...

随机推荐

  1. DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.

    DESCRIBE:When  you mouse click right-side is open an application and click left-side is attribution. ...

  2. yii2.0里的redirect跳转方法

    在yii2框架里难免会出现跨控制器跳转,调用方法等,这就用到了redirect了, 带参数的 $control=Yii::app()->runController('site/show/id/2 ...

  3. jQuery ajax从后台取不到数据

    ajax post  data  获取不到数据,注意 content-type的设置 .post/get 关于 jQuery data 传递数据.网上各种获取不到数据,乱码之类的. 好吧今天我也遇到了 ...

  4. RequireJS进阶-模块的优化及配置的详解

    概述 关于RequireJS已经有很多文章介绍过了.这个工具可以将你的JavaScript代码轻易的分割成苦干个模块(module)并且保持你的代码模块化与易维护性.这样,你将获得一些具有互相依赖关系 ...

  5. nfs 笔记

    问题:客户端在nfs文件目录下读写文件提示Permission denied: 解决方法: 修改/etc/exports 中 文件共享方式为 no_root_squash no_root_squash ...

  6. Eclipse Ctrl + Shift + O in IntelliJ IDEA

    In Eclipse, you press CTRL + SHIFT + O “Organize Imports” to import packages automatically. For Inte ...

  7. 请求是如何传递给StandardEngine的?

    将请求的传递过程分解学习. CoyoteAdapter将中持有Connector的引用,所以在Coyote这个类中Connector查找它所属的StandardService,而StandardSer ...

  8. 如何遍历一个JSON对象的属性值???

    当遇到一个JSON格式的对象时,不知道它有多少个属性,也不知道有什么属性,该如何遍历它的属性及其属性值呢??? 还是使用Java语言还是很像的,使用for语句. var obj = data[i]; ...

  9. 手把手教你自定义attr

    最近在学习的过程中遇到了自定义的attr和自定义的style.因此各种百度,各种博客的学习,算是有了一个系统的了解.在这里记录下自己的收获. 一.为什么要使用自定义attr以及本文定位 在androi ...

  10. JAVA二叉树递归构造、二叉树普通遍历及递归遍历

    二叉树类: package com.antis.tree; public class BinaryTree { int data; //根节点数据 BinaryTree left; //左子树 Bin ...