51单片机c语言编程io口一定要定义吗,单片机-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语言下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语言教程&colon;C51循环语句

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

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

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

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

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

随机推荐

Java解析采集模块

package step3; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; im ...

java 多线程编程三种实现方式

一种是继承Thread类,一种是实现Runable接口,还有一种是实现callable接口: 有博主说只有前面2种方式,我个人愚见是三种,主要详细介绍下callable的使用: 三种线程的我的个人理解 ...

LightOj 1024 - Eid &lpar;求n个数的最小公约数&plus;高精度&rpar;

题目链接:http://lightoj.com/volume_showproblem.php?problem=1024 题意:给你n(2<=n<=1000)个数, 然后求n个数的最小公倍数 ...

JAVA实现Excel导出数据(以写好的Excel模版导出)

工作中经常会有将后台数据以Excel导出的功能. 简单的方法有将response的contentType设置为application/vnd.ms-excel: 或在JSP页面直接设置成:

Android Studio &commat;Bind的用法,自动生成findViewById无需再实例化控件

第一步:app 的build.gradle文件中添加 如下代码: compile 'com.jakewharton:butterknife:7.0.0' 点击Sync Now 同步下载第二步:安装插件 ...

解决弹出的窗口window&period;open会被浏览器阻止的问题(自定义open方法)

由于在使用window.open时,在很多情况下,弹出的窗口会被浏览器阻止,但若是使用a链接target='_blank',则不会,基于这一特点,自己封装了一个open方法: function ope ...

order调用mdp

Java代码 else            {                crmMessageService[A1] .applyAsync(crmMdpRequest); } public v ...

Tensorflow学习-数据读取

Tensorflow数据读取方式主要包括以下三种 Preloaded data:预加载数据 Feeding: 通过Python代码读取或者产生数据,然后给后端 Reading from file: 通 ...

lua 文件编译相关工具

-- 编译一个代码文件 -- loadfile (lua_State *L, const char *filename); -- 将一个文件加载为lua代码块,仅编译不执行,返回值为编译后的 -- 代 ...

checkStyle 错误普及

1Type is missing a javadoc commentClass  缺少类型说明 2“{” should be on the previous line“{” 应该位于前一行.解决方法: ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值