单片机-C语言-定义和申明
以下代码是单片机程序,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语言-定义和申明的更多相关文章
- 单片机C语言下LCD多级菜单的一种实现方法
摘要: 介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑.实用的程序模型. 关键词: 液晶显示屏; 多级菜单; 单片机; C 语言; LCD 中 ...
- 51单片机C语言学习笔记3: 存储器结构
MCS-51单片机在物理结构上有四个存储空间: 1.片内程序存储器2.片外程序存储器3.片内数据存储器4.片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1.片内外统一编 ...
- 51单片机C语言学习笔记6:51单片机C语言头文件及其使用
很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...
- 单片机C语言中标志位的经典应用
/* 本例程是C语言的位域操作示例 这里为什么位域结构体与联合体一起使用? -->因为这样定义后,即可以单独使用标志位 也可同时使用整个字节数据 主要应用:单片机C语言 好处:用标志位可以节省R ...
- 单片机C 语言与汇编语言混合编程
在单片机应用系统设计中,过去主要采用汇编语言开发程序. 汇编语言编写的程序对单片机硬件操作很方便,编写的程序代码短,效率高,但系统设计的周期长,可读性和可移植性都很差.C语言程序开发是近年来单片机系统 ...
- 51单片机数组的定义方法(code与data的作用)
转自:http://blog.sina.com.cn/s/blog_94994f7b01010s1h.html 数组前不加“code”或“data”,则默认将数组存放在程序存储器中:code 指定数据 ...
- 单片机c语言教程:C51循环语句
单片机c语言教程第十三课 C51循环语句 循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操 作.如一个 12M 的 51 芯片应用电路中要求实现 1 毫秒的延时,那么就要执行 ...
- C语言和单片机C语言为什么会有差异?虽不同但理同!
许多小伙伴在学完C语言后想入门单片机,但学着学着发现明明都是C语言,为什么单片机C语言和我当初学的C语言有差异呢? 今天小编就来梳理我们平时所学的C语言与单片机C语言的有什么样的不同. 单片机c语言比 ...
- Java语言定义的线程状态分析
说到线程,一定要谈到线程状态,不同的状态说明线程正处于不同的工作机制下,不同的工作机制下某些动作可能对线程产生不同的影响. Java语言定义了6中状态,而同一时刻,线程有且仅有其中的一种状态.要获取J ...
随机推荐
- [使用经验]cocostudio UI编辑器的裁剪
日志-2015/03/16 描述:在程序使用UI编辑器导出文件的时候,该panel中大于panel的部分都没有显示出来,例如人物,一些特效等 原因:UI编辑器panel都勾上了裁剪 解决:在编辑器中把 ...
- zend studio 破解、汉化和字体颜色及快捷键相关设置
下载:http://www.geekso.com/component/zendstudio-downloads/ 破解:http://www.geekso.com/ZendStudio9-key/ 注 ...
- linux下如何用GDB调试c++程序
转:http://blog.csdn.net/wfdtxz/article/details/7368357 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形 ...
- IOS UIWebView(浏览器控件)
什么是UIWebViewUIWebView是iOS内置的浏览器控件系统自带的Safari浏览器就是通过UIWebView实现的 UIWebView不但能加载远程的网页资源,还能加载绝大部分的常见文件h ...
- Failed to read candidate component错误
<context:component-scan base-package="com.spdb"/> <mvc:annotation-driven/> 加上该 ...
- 2019.1.7 Mac的Vscode插件总结
Vscode插件 通用插件 Chinese 配置中文界面 HTML Snippets H5代码片段以及提示 HTML CSS Support 让 html 标签上写class 智能提示当前项目所支持的 ...
- Mapper.xml映射文件
查询订单关联查询用户: 使用resultType,ordersCustom可以通过继承orders获得其属性,再添加我们需要的用户字段. 使用resultMap,orders表中通过封装user对象来 ...
- Java 线程池使用
在实现类中,运用线程池 serviceImpl.java //定义线程池 private static ThreadPoolExecutor executor1 = new ThreadPoolExe ...
- win7系统安装VS2013后,连不上远程sqlserver数据库解决办法
刚搬了地方,顺便把电脑重做了系统,把sql2012和vs2013装好,怎么弄也连不上远程的数据库了,用程序连IIS直接死掉,用ssms连也是直接失去响应,开始以为是网线端口被运营商封杀了,最后发现不是 ...
- IOC-AutoFac
学习过程中参考博客: AutoFac文档:http://www.cnblogs.com/wolegequ/archive/2012/06/09/2543487.html AutoFac使用方法总结:P ...