toascii头文件|用C语言实现数据结构时需要哪些头文件

|

① C语言头文件大全

C系统提供了丰富的系统文件,称为库文件,C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,在前面的包含命令中我们已多次使用过。在".h"文件中包含了常量定义、 类型定义、宏定义、函数原型以及各种编译选择设置等信息。另一类是函数库,包括了各种函数的目标代码,供用户在程序中调用。 通常在程序中调用一个库函数时,要在调用之前包含该函数原型所在的".h" 文件。下面给出Turbo C的全部".h"文件。Turbo C头文件 ALLOC.H 说明内存管理函数(分配、释放等)。 ASSERT.H 定义 assert调试宏。 BIOS.H 说明调用IBM—PC ROM BIOS子程序的各个函数。 CONIO.H 说明调用DOS控制台I/O子程序的各个函数。 CTYPE.H 包含有关字符分类及转换的名类信息(如 isalpha和toascii等)。 DIR.H 包含有关目录和路径的结构、宏定义和函数。 DOS.H 定义和说明MSDOS和8086调用的一些常量和函数。 ERRON.H 定义错误代码的助记符。 FCNTL.H 定义在与open库子程序连接时的符号常量。 FLOAT.H 包含有关浮点运算的一些参数和函数。 GRAPHICS.H 说明有关图形功能的各个函数,图形错误代码的常量定义,正对不同驱动程序的各种颜色值,及函数用到的一些特殊结构。 IO.H 包含低级I/O子程序的结构和说明。 LIMIT.H 包含各环境参数、编译时间限制、数的范围等信息。 MATH.H 说明数学运算函数,还定了 HUGE VAL 宏, 说明了matherr和matherr子程序用到的特殊结构。 MEM.H 说明一些内存操作函数(其中大多数也在STRING.H中说明)。 PROCESS.H 说明进程管理的各个函数,spawn…和EXEC …函数的结构说明。 SETJMP.H 定义longjmp和setjmp函数用到的jmp buf类型,说明这两个函数。 SHARE.H 定义文件共享函数的参数。 SIGNAL.H 定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,说明rajse和signal两个函数。 STDARG.H 定义读函数参数表的宏。(如vprintf,vscarf函数)。 STDDEF.H 定义一些公共数据类型和宏。 STDIO.H 定义Kernighan和Ritchie在Unix System V 中定义的标准和扩展的类型和宏。还定义标准I/O 预定义流:stdin,stdout和stderr,说明 I/O流子程序。 STDLIB.H 说明一些常用的子程序:转换子程序、搜索/ 排序子程序等。 STRING.H 说明一些串操作和内存操作函数。 SYS\STAT.H 定义在打开和创建文件时用到的一些符号常量。 SYS\TYPES.H 说明ftime函数和timeb结构。 SYS\TIME.H 定义时间的类型time[ZZ(Z] [ZZ)]t。 TIME.H 定义时间转换子程序asctime、localtime和gmtime的结构,ctime、 difftime、 gmtime、 localtime和stime用到的类型,并提供这些函数的原型。 VALUE.H 定义一些重要常量,包括依赖于机器硬件的和为与Unix System V相兼容而说明的一些常量,包括浮点和双精度值的范围。

② c++的头文件什么时候用哪个呢

转:C/C++头文件一览 ( C、传统 C++#include <assert.h>//设定插入点#include <ctype.h> //字符处理#include <errno.h> //定义错误码#include <float.h> //浮点数处理#include <fstream.h> //文件输入/输出#include <iomanip.h> //参数化输入/输出#include <iostream.h>//数据流输入/输出#include <limits.h>//定义各种数据类型最值常量#include <locale.h>//定义本地化函数#include <math.h>//定义数学函数#include <stdio.h> //定义输入/输出函数#include <stdlib.h>//定义杂项函数及内存分配函数#include <string.h>//字符串处理#include <strstrea.h>//基于数组的输入/输出#include <time.h>//定义关于时间的函数#include <wchar.h> //宽字符处理及输入/输出#include <wctype.h>//宽字符分类//////////////////////////////////////////////////////////////////////////标准 C++(同上的不再注释)#include <algorithm> //STL 通用算法#include <bitset>//STL 位集容器#include <cctype>#include <cerrno>#include <clocale>#include <cmath>#include <complex> //复数类#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#include <deque> //STL 双端队列容器#include <exception> //异常处理类#include <fstream>#include <functional>//STL 定义运算函数(代替运算符)#include <limits>#include <list>//STL 线性列表容器#include <map> //STL 映射容器#include <iomanip>#include <ios> //基本输入/输出支持#include <iosfwd>//输入/输出系统使用的前置声明#include <iostream>#include <istream> //基本输入流#include <ostream> //基本输出流#include <queue> //STL 队列容器#include <set> //STL 集合容器#include <sstream> //基于字符串的流#include <stack> //STL 堆栈容器#include <stdexcept> //标准异常类#include <streambuf> //底层输入/输出支持#include <string>//字符串类#include <utility> //STL 通用模板类#include <vector>//STL 动态数组容器#include <cwchar>#include <cwctype>using namespace std;//////////////////////////////////////////////////////////////////////////C99 增加#include <complex.h> //复数处理#include <fenv.h>//浮点环境#include <inttypes.h>//整数格式转换#include <stdbool.h> //布尔环境#include <stdint.h>//整型环境#include <tgmath.h>//通用类型数学宏 ———————————————————————————————————补充:经常在CSDN以及其他之类的技术论坛上问关于C++ 头文件的问题。提出这些问题的往往就是那些刚学C++的新手。当初我是菜鸟的时候也问过类似的问题。 现在来看看下面两个include: #include<iostream> // 这个就是1998年标准化以后的标准头文件 #include<iostream.h> // 这个就是标准化以前的头文件 更本质上的区别就是iostream把标准C++库的组件放在一个名位std的namespace里面。而相对的iostream.h则将这些标准组件放在全局空间里,同时在标准化以后旧有的C标准库也已经经过改造了。 看看下面这两个头文件 // 标准化后经过改造的C的标准库,所有的组件都放在了std中 #include<cstdio> // 标准化以前C++中的C标准库 #include<stdio.h> // 在看看这个头文件C标准库下 基于char* 的字符处理函数库 #include<string.h> // 在标准化以后他变成了这样 #include<cstring> // 但是很多朋友还看见过这个字符串处理函数库,他包含了新的string class #include<string> 经过了标准委员会如此大规模手术后,在98年以前出品的C++编译器(BC3.0,BC5.0)上能顺利通过编译的源文件,在支持新标准的编译器上可能无法顺利通过编译也就是很正常的事了。 [起因] 在回过头来看看标准程序库,这个程序库涵盖范围相当广大,提过了许许多多好用的功能。正是因为这样标准程序库中class的名称和函数名与第三方提供的程序库中的class名或是函数名发生名字冲突的可能性大大增大。为了避免这个问题的发生,标准委员会决定将标准程序库中每一样东西都放在namespace std中。但是这么做同时有引来了一个新的问题。很多C++程序代码依赖那些已经存在很多年的C++ “准”标准程序库(C++迟迟未标准化才导致这些情况的发生),例如iosteam.h,complex.h等等。 为了解决这个新出现的问题,标准化委员会决定设计一些新的头文件名,给那些穿上std外衣的组件所使用。把C++头文件的.h去掉,于是就有前面出现的iostream,同样C的头文件也做了相同的处理,同时在前面加上了一个字母c,以表示是C的头文件(感觉上有中种族歧视的感觉)。同时标准化委员会声明就有的C++头文件将不再列于被支持的名单之中了,而旧有的C头文件为了满足“对C的兼容性”这个古老契约,仍然将继续存活下去。 但是,那些编译器厂商不可能去推翻他们客户的旧有编译器(也跟本不会去这么做),所以那些旧有的C++头文件仍然苟延残喘的活了下来,并不断的扰乱那些C++新兵的心智。 下面就是现在大多数C++开发工具表示头文件的组织状态: 1. 旧的C++头文件 比如iostream.h,他们虽然被标准化委员会所抛弃,但由于各大厂商为了各自的商业利益仍然将继续存活下去,这些头文件的内容将不处于namespace std中。 2. 新的C++头文件如iostream虽然提供了和旧有头文件相同的功能,但他的内容都并入了namespace std中,从而有效避免了名字污染的问题。 3. 标准C的头文件如stdio.h继续获得支持,这类文件的内容并未放在std中。 4. C函数库的技能也有对应的新式C++版本,起名称类似cstdio,这类头文件的内容也有幸穿上了std的外衣。 其实标准化以后的标准程序库的改动并不只有这些而已,很多的标准化组件都被“tamplate化”。其中就有元老级人物iostream。标准程序库的问题并不是用一篇,两篇文章就可以说清楚的。如果你像进一步的了解C++的标准程序库的话,你可以看看侯先生的《C++标准程序库》。

③ 怎么用c语言写头文件

stdlib.h中说明了一些常见的子程序:转换子程序,搜索/排序子程序。 FCNTL.H在打开的库子程序符号常量的定义相同。 IO.H包含低级别的I / O例程的结构和说明。其他如下: ALLOC.H说明内存管理函数(分配,释放等)。 ASSERT.H定义断言调试宏。每个功能的 BIOS.H说明调用IBM-PC ROM BIOS程序。每个功能的 CONIO.H说明呼叫DOS控制台I / O子程序。 CTYPE.H包含有关类的信息的名称的字符分类和转换信息(例如因而isalpha和toascii将等)。 DIR.H包含有关目录和路径,宏和函数的结构信息。 DOS.H定义和一些常量和函数的MSDOS和8086调用描述。 ERRON.H定义错误代码的助记符。 FCNTL.H在打开的库子程序符号常量的定义相同。 FLOAT.H包含一些参数和相关的浮点运算功能。各种功能的图形处理能力 GRAPHICS.H说明,常量自定义图形错误代码,是各种颜色数值为不同的驱动程序,以及一些特殊结构的功能。 IO.H包含低级别的I / O例程的结构和说明。 LIMIT.H含有各种环境参数,编译时间限制,数等信息的范围。 MATH.H描述的数学函数,而且还设置了巨大的VAL宏,说明了特殊结构的matherr和MATHERR子程序使用。 MEM.H说明一些内存操作函数(其中大部分是STRING.H解释)。流程管理,产卵…和EXEC …函数的结构描述的每个功能的 PROCESS.H描述。 SETJMP.H的longjmp和setjmp函数定义中所使用的jmp buf中的类型,这表明这两种功能。 SHARE.H定义文件共享功能的参数。 SIGNAL.H定义SIG [ZZ(Z] [ZZ)] IGN和SIG [ZZ(Z] [ZZ)] DFL常量,表示rajse和信号两种功能。 STDARG.H读取宏函数的参数列表的定义。 (如vprintf,vscarf的功能)。 STDDEF.H定义一些常用的数据类型和宏。 STDIO.H标准清晰度Kernighan和Ritchie在Unix System V的定义和扩展的类型和宏。还定义了标准的I / O流的预定义:标准输入,标准输出和标准错误,说明I / O流子程序。 STRING.H解释一些字符串操作和存储器操作功能。创建用于打开文件和一些符号常量时 SYS \ stat.h中。 SYS \ types.h中描述FTIME功能和TIMEB结构。 SYS \类型time.h中定义的时间[ZZ(Z] [ZZ)] T的时间。 time.h中定义时间转换子程序asctime,本地时间和gmtime的结构的ctime,difftime,gmtime的,本地时间和使用STIME类型,并提供这些函数的原型。 VALUE.H定义一些重要常量,包括依赖于机器硬件的兼容性一些常量和Unix System V和描述,包括的范围和双精度浮点值。

④ 头文件里的头文件是干嘛的

第一种情况,把每个代码块所需要的头文件都包含在内,是为了方便代码重用,也就是这个项目的代码有可能需要移植到另一个项目中,如果不把头文件写清楚,那么就会产生很多不必要的麻烦第二种情况,是能够保证上面说的情况不会出现才使用的,一般都是自己写的小型工程里头文件里一般都会使用#ifndef _B_H_ //假设这里是b.h#define _B_H_… //代码略#endif来避免头文件被重复包含后出现的编译错误在visual c++中,可以直接在头文件第一行处使用#pragma once来防止头文件被重复包含,效果与上面的代码一样

⑤ 在C语言里标准函数存放在什么文件中

C语言标准库函数存放在头文件当中,使用相应函数时需要用include引用先关头文件。

C语言程序设计里,C 标准函数(C Standard library)是所有目前符合标准的头文件(head file)的集合,以及常用的函数库实现程序,例如 I/O输入输出和字串符控制。不像 COBOL、Forrian和 PL/I等编程语言,在 C 语言的工作任务里不会包含嵌入的关键字,所以几乎所有的 C 语言程序都是由标准函数库的函数来创建的。

下面列出C89及C99中C语言标准函数库的头文件。

C89中标准的头文件<assert.h> 设定断言点<ctype.h> 字符处理<errno.h> 错误报告<float.h> 定义与实现相关的浮点值勤<limits.h> 定义与实现相关的各种极限值<locale.h> 支持函数setlocale()<math.h> 数学函数库使用的各种定义<setjmp.h> 支持非局部跳转<signal.h> 定义信号值<stdarg.h> 支持可变长度的变元列表<stddef.h> 定义常用常数<stdio.h> 支持文件输入和输出<stdlib.h> 其他各种声明<string.h> 支持串函数<time.h> 支持系统时间函数C99新增的头文件和库<complex.h> 支持复数算法<fenv.h> 给出对浮点状态标记和浮点环境的其他方面的访问<inttypes.h> 定义标准的、可移植的整型类型集合。也支持处理最大宽度整数的函数<iso646.h> 首先在此1995年第一次修订时引进,用于定义对应各种运算符的宏<stdbool.h> 支持布尔数据类型类型。定义宏bool,以便兼容于C++<stdint.h> 定义标准的、可移植的整型类型集合。该文件包含在<inttypes.h>中<tgmath.h> 定义一般类型的浮点宏<wchar.h> 首先在1995年第一次修订时引进,用于支持多字节和宽字节函数<wctype.h> 首先在1995年第一次修订时引进,用于支持多字节和宽字节分类函数

⑥ 我需要c语言每个头文件里的所有函数介绍及用法!

既然你不要网址,自己搜索"C语言标准函数库"好了~~这里写不下~~我以前学C的时候买过一本库函数的书,就是按你的格式编排的,16开的500多页

⑦ 用C语言实现数据结构时需要哪些头文件

1、stdio.h,这个是用来输入输出。动态内存分配函数要用到的,所以要包含malloc.h,其他的还可能用到字符(串)处理函数(需包含string.h头文件)、数学函数(需包含math.h),包含什么头文件主要看i你想用这些数据结构实现什么功能,用到什么函数。2、C语言常用头文件:ALLOC.H 说明内存管理函数(分配、释放等)。ASSERT.H 定义 assert调试宏。BIOS.H 说明调用IBM—PC ROM BIOS子程序的各个函数。CONIO.H 说明调用DOS控制台I/O子程序的各个函数。CTYPE.H 包含有关字符分类及转换的名类信息(如 isalpha和toascii等)。DIR.H 包含有关目录和路径的结构、宏定义和函数。DOS.H 定义和说明MSDOS和8086调用的一些常量和函数。ERRON.H 定义错误代码的助记符。FCNTL.H 定义在与open库子程序连接时的符号常量。FLOAT.H 包含有关浮点运算的一些参数和函数。GRAPHICS.H 说明有关图形功能的各个函数,图形错误代码的常量定义,正对不同驱动程序的各种颜色值,及函数用到的一些特殊结构。IO.H 包含低级I/O子程序的结构和说明。LIMIT.H 包含各环境参数、编译时间限制、数的范围等信息。MATH.H 说明数学运算函数,还定了 HUGE VAL 宏, 说明了matherr和matherr子程序用到的特殊结构。MEM.H 说明一些内存操作函数(其中大多数也在STRING.H中说明)。PROCESS.H 说明进程管理的各个函数,spawn…和EXEC …函数的结构说明。SETJMP.H 定义longjmp和setjmp函数用到的jmp buf类型,说明这两个函数。SHARE.H 定义文件共享函数的参数。SIGNAL.H 定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,说明rajse和signal两个函数。STDARG.H 定义读函数参数表的宏。(如vprintf,vscarf函数)。STDDEF.H 定义一些公共数据类型和宏。STDIO.H 定义Kernighan和Ritchie在Unix System V 中定义的标准和扩展的类型和宏。还定义标准I/O 预定义流:stdin,stdout和stderr,说明 I/O流子程序。STDLIB.H 说明一些常用的子程序:转换子程序、搜索/ 排序子程序等。STRING.H 说明一些串操作和内存操作函数。SYS\STAT.H 定义在打开和创建文件时用到的一些符号常量。SYS\TYPES.H 说明ftime函数和timeb结构。SYS\TIME.H 定义时间的类型time[ZZ(Z] [ZZ)]t。TIME.H 定义时间转换子程序asctime、localtime和gmtime的结构,ctime、 difftime、 gmtime、 localtime和stime用到的类型,并提供这些函数的原型。VALUE.H 定义一些重要常量,包括依赖于机器硬件的和为与Unix System V相兼容而说明的一些常量,包括浮点和双精度值的范围。

⑧ C语言库文件(头文件)有哪些

下面给出Turbo C的全部".h"文件。Turbo C头文件:头文件说明alloc.h 说明内存管理函数(分配、释放等)。 assert.h 定义 assert调试宏。 bios.h 说明调用IBM—PC ROM BIOS子程序的各个函数。 conio.h 说明调用DOS控制台I/O子程序的各个函数。 ctype.h 包含有关字符分类及转换的名类信息(如 isalpha和toascii等)。 dir.h 包含有关目录和路径的结构、宏定义和函数。 dos.h 定义和说明MSDOS和8086调用的一些常量和函数。 error.h 定义错误代码的助记符。 fcntl.h 定义在与open库子程序连接时的符号常量。 float.h 包含有关浮点运算的一些参数和函数。 graphics.h 说明有关图形功能的各个函数,图形错误代码的常量定义,正对不同驱动程序的各种颜色值,及函数用到的一些特殊结构。 io.h 包含低级I/O子程序的结构和说明。 limit.h 包含各环境参数、编译时间限制、数的范围等信息。 math.h 说明数学运算函数,还定了 HUGE VAL 宏, 说明了matherr和matherr子程序用到的特殊结构。 mem.h 说明一些内存操作函数(其中大多数也在STRING.H中说明)。 process.h 说明进程管理的各个函数,spawn…和EXEC …函数的结构说明。 setjmp.h 定义longjmp和setjmp函数用到的jmp buf类型,说明这两个函数。 share.h 定义文件共享函数的参数。 signal.h 定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,说明rajse和signal两个函数。 stddef.h 定义读函数参数表的宏。(如vprintf,vscarf函数)。 stddef.h 定义一些公共数据类型和宏。 stdio.h 定义Kernighan和Ritchie在Unix System V 中定义的标准和扩展的类型和宏。还定义标准I/O 预定义流:stdin,stdout和stderr,说明 I/O流子程序。 stdlib.h 说明一些常用的子程序:转换子程序、搜索/ 排序子程序等。 string.h 说明一些串操作和内存操作函数。 sys\stat.h 定义在打开和创建文件时用到的一些符号常量。 sys\types.h 说明ftime函数和timeb结构。 sys\time.h 定义时间的类型time[ZZ(Z] [ZZ)]t。 time.h 定义时间转换子程序asctime、localtime和gmtime的结构,ctime、 difftime、 gmtime、 localtime和stime用到的类型,并提供这些函数的原型。 value.h 定义一些重要常量,包括依赖于机器硬件的和为与Unix System V相兼容而说明的一些常量,包括浮点和双精度值的范围。C系统提供了丰富的系统文件,称为库文件。C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,在前面的包含命令中我们已多次使用过。在".h"文件中包含了常量定义、 类型定义、宏定义、函数原型以及各种编译选择设置等信息。另一类是函数库,包括了各种函数的目标代码,供用户在程序中调用。通常在程序中调用一个库函数时,要在调用之前包含该函数原型所在的".h" 文件。

⑨ asciito()函数的头文件

请问楼主问的是不是这个函数ToAscii函数功能:该函数将指定的虚拟键码和键盘状态翻译为相应的字符或字符串。该函数使用由给定的键盘布局句柄标识的物理键盘布局和输入语言来翻译代码。 函数库Winuser.h

⑩ keil软件里面c语言包含哪些头文件做什么用的尽量多列举点

我来回答你的问题吧,前几天对这个方面有一定的深入了解,也写下了大量的笔记 虽然C编程的时候,对于不同的芯片,有不同的头文件,但是,万变不离其宗。 只要学会了写自己的头文件,就可以应付各类型号单片机了,就算你用的是AT89C2052,还是AT89C51,STC12C等等,都可以用一个头文件reg51.h 不过要做相应的修。以下是我对reg51.h个人的见解:(对于你很有用的) 后面带上了在编写C51时带用的头文件,及其内部函数和宏定义的详细解说。 想了解如下方面的知识来来邮[email protected] 一, C51内存结构深度剖析 二, reg51.头文件剖析 三, 浅淡变量类型及其作用域 四, C51常用头文件 五, 浅谈中断 六, C51编译器的限制 七, 小淡C51指针////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// reg51.头文件剖析 我们平时写单片机应用程序的时候,所使用的头文件大多都是用的的reg51.h或是用reg52.h。会写C51的人都会用,但对其头文件内部的定义有所了解的人确并不多。下面对其内部做详细解释,方便读者作进一步的了解,并能运用各类型号的单片机。因为增强型号的单片机的增强功能都是通过特殊功能寄存器控制。 打开 reg52.h 头文件,会发现是由大量的 sfr ,sbit的声明组成,甚至于还有sfr16.其实这样的声明都是与单片机内部功能寄存器(特殊功能寄存器)联系起来的,下面对其做出详细解释sfr: 声明变量 SFR 声明一个变量,它的声明与其它的C变量声明基本相同,唯一的区别,SFR在声明的同时为其指定特殊功能寄存器作为存储地址,而不同于C变量声明的整型,字符型等等由编译器自动分配存储空间。 如reg52.h头文件,第一条声明就是sfr P0 = 0x80; 此处声明一个变量P0,并指定其存储地址为特殊功能寄存器0x80;,在加入reg52.h头文件后。编写应用程序时P0就可以直接使用而无需定义,对P0的操作就是,对内部特殊功能寄存器(0x80对应用MCU的P0口)的操作,可进行读写操作。如果将第一条声明改为sfr K0 = 0x80; 那么,如果要把单片机的P0口全部拉低,则不能写P0=0x00;而应保存后再在应用程序中写成K0=0x00;否则编译器会提示“P0为未定义标识符” 使用方法: sfr [variable] = [address] //为变量分配一个特殊功能寄存器。 1 等号右边,只能是十进制,十六进制整型的数据常量,,不允许带操作符的表达式 经典的8051内核支持的SFR地址从0x80H~0xFF 飞利浦80C51MX系列0x180H~0x1FF 2 SFR不能声明于任何函数内部,包括main函数。只能声明于函数外。 3 用SFR声明一个变量后,不能用取地址运算符&获取其地址, 编译无法通过,编译器会提示非法操作。 4 有一点须特别注意,51内核0x80~0xff,为特殊功能寄存器地址区间,但并不是所有的地址都有定义,如果说你所用的MCU芯片上对于某个地址没有定义,那么用sfr在定义变量的时候,不要把变量的地址分配到未定义的特殊功能寄存器上,虽然编译时能通过,用KEIL仿真时貌似是没有问题,但下载到芯片里运行时,是会出问题的。比如说,向一个未定义的特殊功能寄存器执行读操作,读出来的就是一个未知的数。(读者可自行测试,先把串口通信调通,然后做一个简单的人机交互。读出一个数后,再发给计算机,用串口调试助手或是串口监控查看。这用方法在仿真的时候很有用。)所以具体那些特殊功能寄存器能够用,就要查看你使用的芯片手册。5 若遇到增强性的单片机,只要知道其扩展的特殊功能寄存器的地址,用SFR定就可以很方便进行编程。sbit: 声明变量 sbit 同样是声明一个变量,和SFR 使用方法类似,但是SBIT是用来声明一个位变量,因为,在51系列的应用中,非常有必要对SFR的单个位进行存取,而通过bit 数据类型,使其具备位寻址功能。 如,在reg52.h中有如下声明 sfr IE = 0xA8; sbit EA = IE^7;sbit ET2 = IE^5; //8052 onlysbit ES = IE^4;sbit ET1 = IE^3;sbit EX1 = IE^2;sbit ET0 = IE^1;sbit EX0 = IE^0; 所以,对EA的操作即是对IE最高位的操作。但如果想让 SP DPL DPH PCON TMOC TL0 TL1 TH0 TH1 SBUF这些特殊功能寄存器具备位寻址,采用上述如IE类似的定义,是不行的,虽然修改后,在编译的时候不会出现错误,但只要用到你定义的位变量名时就会出错。原因是,只有特殊功能寄存器的地址是8的倍数(十六进制以0或8结尾)才能进行位寻址。 打开reg52.h头文件可以看到,所有用sbit声明了的特殊功能寄存器的地址均是以0或8结尾如硬要达到上述要求,可用带参的宏定义来完成。此处不做详细说明(意义并不大)。下面对sbit的使用做详细介绍:随着8051的应用,非常有必要对特殊功能寄存器的单个bit位进行存取,C51编译器通过sbit 数据类型,提供了对特殊功能寄存器的位操作。 以下是sbit的三种应用形式:一, sbit name = sfr-name^bit-position; sfr PSW =0xD0; sfr IE =0xA8; sbit OV= PSW^2; sbit CY=PSW^7; sbit EA= IE^7;二, sbit name= sft-address^bit-position; sbit OV =0xD0^2; sbit CY =0xD0^7; sbit EA =0xA8^7;三, sbit name= sbit-address; sbit OV =0xD2; sbit CY =0xD7; sbit EA =0xAF;现对上述三种形式的声明做必要的说明 第一种形式sbit name = sfr-name^bit-position;如sbit OV= PSW^2; 当中的这个特殊功能寄存器必须在此之前已经用sfr 定义,否则编译会出错。bit-position范围从0~7; 第二种形式 sbit name= sft-address^bit-position如sbit OV =0xD0^2; 与第一种形式不同之外在于,此处直接使用PSW的地址.第一种形式须先定义PSW 第三种形式. sbit name= sbit-address 如sbit OV =0xD2 是直接用的OV的地址OV的地址计算方式,是OV所在的寄存器地址加上OV的bit-position 注意: 不是所有的SFR都可位寻址。只有特殊功能寄存器的地址是8的倍数(十六进制以0或8结尾)才能进行位寻址,并且sbit声明的变量名,虽可以是任意取,但是最好不要以下划线开头,因为以下划线开头的都保留给了C51的头文件做保留字。sfr16: 声明变量 许多8051的派生型单片机,用两个连续地址的特殊功能寄存器,来存储一个16bit的值。例如,8052就用了0xCC和0xCD来保存定时/计数寄存器2的高字节和低字节。编译器提供sfr16这种数据类型,来保存两个字节的数据。虚拟出一个16bit的寄存器。 如下: sfr16 T2 = 0xCC 存储方面为小端存储方式,低字节在前,高字节在后。定义时,只写低字节地址,如上,则定义T2为一个16位的特殊功能寄存器。 T2L= 0CCh, T2H= 0CDh 使用方法: sfr [variable] = [low_address] 1 等号右边,只写两个特殊功能寄存器的低地址,且只能是十进制,十六进制的整型数据常量,不允许带操作符的表达式 2 SFR不能声明于任何函数内部,包括main函数。只能声明于函数外。 3 用SFR声明一个变量后,不能用取地址运算符&获取其地址, 编译无法通过,编译器会提示非法操作。 4 当你向一个sfr16写入数据的时候,KEIL CX51 编译器生成的代码,是先写高字节,后写低字节,(可通过返汇编窗口查看)在有些情况下,这并非我们所想要的操作顺序。使用时,须注意。 5 当你所要写入sfr16的数据,当是高字节先写还是低字节先写非常重要的时候,就只能用sfr 这个关键字来定义,并且任意时刻只保存一个字节,这样操作才能保证写入正确。//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////C51常用头文件在KEIL 中,对于单片机所使用的头文件,除了reg51 reg52以外,还有一些从各芯片制商的官网下载与reg51,reg52功能类似的头文件,需了解透外,还要对各类型单片机均可通用且相当有用的的头文件,做相应的了解。因为,内部所包含的函数与宏定义,可以及大的方便我们编写应用程序。1字符函数 ctype.h 1 extern bit isalpha(char); 功能:检查参数字符是否为英文字母,是则返回12 extern bit isalnum(char) 功能:检查字符是否为英文字母或数字字符,是则返回13 extern bit iscntrl(char) 功能:检查参数值是否在0x00~0x1f 之间或等于0x7f,是则返回14 extern bit isdigit(char) 功能: 检查参数是否为数字字符,是则返回15 extern bit isgraph(char) 功能: 检查参数值是否为可打印字符,是则返回1,可打印字符为0x21~0x7e6 extern bit isprint(char) 功能:除了与isgraph相同之外,还接受空格符0x207 extern bit ispunct(char) 功能:不做介绍。8 extern bit islower(char) 功能:检查参数字符的值是否为小写英文字母,是则返回19 extern bit isupper(char) 功能:检查参数字符的值是否为大写英文字母,是则返回110 extern bit isspace(char) 功能:检查字符是否为下列之一,空格,制表符,回车,换行,垂直制表符和送纸。如果为真则返回111 extern bit isxdigit(char) 功能:检查参数字符是否为16进制数字字符,是则返回112 extern char toint(char) 功能:将ASCII字符0~9 a~f(大小写无关)转换成对应的16进制数字,返回值00H~0FH13 extern char tolower(char) 功能:将大写字符转换成小写形式,如字符变量不在A~Z之间,则不作转换而直接返回该字符14 extern char toupper(char) 功能:将小写字符转换成大写形式,如字符变量不在a~z之间,则不作转换而直接返回该字符15 define toascii(c) ((c)&0x7f)功能:该宏将任何整形数值缩小到有效的ASCII范围之内,它将变量和0x7f相与从而去掉第7位以上的所有数位16 #define tolower(c) (c-‘A’+’a’)功能:该宏将字符与常数0x20 逐位相或17 #define toupper(c) ((c)-‘a’+’A’)功能:该宏将字符与常数0xdf 逐位相与2数学函数 math.hextern int abs (int val);extern char cabs (char val);extern long labs (long val);extern float fabs (float val);功能:返回绝对值。上面四个函数,除了形参和返回值不一样之外,其它功能完全相同。extern float exp (float val);extern float log (float val);extern float log10 (float val); 功能: exp 返回eval log 返回 val 的自然对数 log10 返回 以10为底,val的对数 extern float sqrt (float val); 功能: 返回val的正平方根 extern int rand(); extern void srand(int n); 功能: rand返回一个0到32767之间的伪随机数,srand用来将随机数发生器初始化成一个已知的(期望)值。 Keil uVision3中的math.h库中,不包含此函数。 extern float sin (float val);extern float cos (float val);extern float tan (float val); 功能: 返回val的正弦,余弦,正切值。val为弧度 fabs(var) <=65535extern float asin (float val);extern float acos (float val);extern float atan (float val);extern float atan2 (float y, float x); 功能: asin 返回val的反正弦值。acos 返回val的反余弦值。 atan 返回val的反正切值。 asin atan acos的值域均为 -π/2~+π/2 atan2返回x/y,的反正切值,其值域为-π~+πextern float sinh (float val);extern float cosh (float val);extern float tanh (float val); 功能:cosh返回var的双曲余弦值,sinh返回var的双曲正弦值, tanh返回var的双曲正切值。extern float ceil (float val); 功能: 向上取整,返回一个大于val的最小整数。extern float floor (float val); 功能: 向下取整,返回一个小于val的最大整数。extern float pow (float x, float y); 功能: 计算计算xy的值。当(x=0,y<=0)或(x<0.y不是整数)时会发生错误。extern void fpsave(struct FPBUF *p)extern void fprestore(struct FPBUF *p) 功能:fpsave 保存浮点了程序的状态,fprestore恢复浮点子程序的原始状态,当中断程序中需要执行浮点运算时,这两个函数是很有用的。 注: Keil uVision3中的math.h库中,不包含此函数。3绝对地址访问 absacc.h#define CBYTE ((unsigned char volatile code *) 0)#define DBYTE ((unsigned char volatile data *) 0)#define PBYTE ((unsigned char volatile pdata *) 0)#define XBYTE ((unsigned char volatile xdata *) 0) 功能:CBYTE 寻址 CODE区 DBYTE 寻址 DATA区 PBYTE 寻址 XDATA(低256)区 XBYTE 寻址 XDATA区 例: 如下指令在对外部存储器区域访问地址0x1000 xvar=XBYTE[0x1000]; XBYTE[0x1000]=20;#define CWORD ((unsigned int volatile code *) 0)#define DWORD ((unsigned int volatile data *) 0)#define PWORD ((unsigned int volatile pdata *) 0)#define XWORD ((unsigned int volatile xdata *) 0) 功能:与前面的一个宏相似,只是它们指定的数据类型为unsigned int .。 通过灵活运用不同的数据类型,所有的8051地址空间都是可以进行访问。 如DWORD[0x0004]=0x12F8;即内部数据存储器中(0x08)=0x12; (0x09)=0xF84 内部函数 intrins.h extern unsigned char _cror_ (unsigned char var, unsigned char n);extern unsigned int _iror_ (unsigned int var, unsigned char n);extern unsigned long _lror_ (unsigned long var, unsigned char n); 功能:将变量var 循环右移 n 位。上三个函数的区别在于,参数及返回值的类型不同extern unsigned char _crol_ (unsigned char var, unsigned char n);extern unsigned int _irol_ (unsigned int var, unsigned char n);extern unsigned long _lrol_ (unsigned long var, unsigned char n); 功能:将变量var 循环左移 n 位。上三个函数的区别在于,参数及返回值的类型不同 例如: #include<intrins.h> void main() { unsigned int y; y=0x0ff0; y=_irol_(y,4); //y=0xff00 y=_iror_(y,4); //y=0x0ff0}void _nop_(void); 功能:_nop_产生一个8051单片机的NOP指令,C51编译器在程序调用_nop_ 函数的地方,直接产生一条NOP指令。


赞 (0)