以下代码是单片机程序,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. Windows 编译 MQTT C++ Client

    MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可 ...

  2. python 线程中的局部变量ThreadLocal

    一个线程使用自己的局部变量比使用全局变量好局部变量只有线程自己能看见,不会影响其他线程全局变量的修改必须加锁 ThreadLocal 线程局部变量 import threading # 创建全局Thr ...

  3. ZT————pull push mode

    谁能讲讲push和pull模式是什么意思?(参与有分) [问题点数:100分,结帖人mickeyfirst] 收藏 mickeyfirst mickeyfirst 等级: 结帖率:94.12% 楼主 ...

  4. 全屏轮播插件 fullPage.js应用(基础版兼容IE7, 背景图版兼容IE8)

    /** * fullPage 1.4.5 * https://github.com/alvarotrigo/fullPage.js * MIT licensed * * Copyright (C) 2 ...

  5. CSS 优先级和特指度

    1.ID 选择符 > 类选择符 > 元素选择符.特指度高的优先级高 2.行内样式 > 内嵌样式 > 链接样式 3.设定的样式 > 继承的样式 特指度的计算: 特指度能够用 ...

  6. thinkPHP输出sql语句(3.2和5.0通用)

    //5.0$qwe = db::table('think_user')->where('id',1)->fetchsql()->column('name'); dump($qwe); ...

  7. Leetcode225 用栈实现队列

    大众思路: 用两个栈实现,记为s1,s2 1.元素入栈时,加入s1 2.元素出栈时,对s2进行判断,如果s2为空,则将全部s1元素弹出并压入到s2,然后从s2栈顶弹出一个元素:如果s2不为空,则直接从 ...

  8. STS使用git下载项目代码

    在自己的eclipse 上安装git 插件,一般都自带了现在. 4.选择Clone URI 5.下一步输入刚才的复制的路劲,填写自己的github 账户名密码即可 6.选择要克隆的分支 7.设置本地g ...

  9. 使用document对象操作cookie

    1. 使用document对象的cookie属性,可以让你读取.添加和更新文档(当期HTML)所关联的cookie. 2. 当你读取document.cookie时,会得到当期文档的所有cookie. ...

  10. 设计模式——责任链(chain of responsibiltiy)

    责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象. 每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象.也就 ...