① 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/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> //通用类型数学宏
② C语言头文件有哪些
字符处理函数 x0dx0a本类别函数用于对单个字符进行处理,包括字符的类别测试和字符的大小写转换 x0dx0ax0dx0a头文件 ctype.h x0dx0ax0dx0a函数列表<> x0dx0a函数类别 函数用途 详细说明 x0dx0a字符测试 是否字母和数字 isalnum x0dx0a是否字母 isalpha x0dx0a是否控制字符 iscntrl x0dx0a是否数字 isdigit x0dx0a是否可显示字符(除空格外) isgraph x0dx0a是否可显示字符(包括空格) isprint x0dx0a是否既不是空格,又不是字母和数字的可显示字符 ispunct x0dx0a是否空格 isspace x0dx0a是否大写字母 isupper x0dx0a是否16进制数字(0-9,A-F)字符 isxdigit x0dx0a字符大小写转换函数 转换为大写字母 toupper x0dx0a转换为小写字母 tolower x0dx0ax0dx0a地区化 x0dx0a本类别的函数用于处理不同国家的语言差异。 x0dx0ax0dx0a头文件 local.h x0dx0ax0dx0a函数列表 x0dx0a函数类别 函数用途 详细说明 x0dx0a地区控制 地区设置 setlocale x0dx0a数字格式约定查询 国家的货币、日期、时间等的格式转换 localeconv x0dx0ax0dx0a数学函数 x0dx0a本分类给出了各种数学计算函数,必须提醒的是ANSI C标准中的数据格式并不符合IEEE754标准,一些C语言编译器却遵循IEEE754(例如frinklin C51) x0dx0ax0dx0a头文件 math.h x0dx0ax0dx0a函数列表 x0dx0a函数类别 函数用途 详细说明 x0dx0a错误条件处理 定义域错误(函数的输入参数值不在规定的范围内) x0dx0a值域错误(函数的返回值不在规定的范围内) x0dx0a三角函数 反余弦 acos x0dx0a反正弦 asin x0dx0a反正切 atan x0dx0a反正切2 atan2 x0dx0a余弦 cos x0dx0a正弦 sin x0dx0a正切 tan x0dx0a双曲函数 双曲余弦 cosh x0dx0a双曲正弦 sinh x0dx0a双曲正切 tanh x0dx0a指数和对数 指数函数 exp x0dx0a指数分解函数 frexp x0dx0a乘积指数函数 fdexp x0dx0a自然对数 log x0dx0a以10为底的对数 log10 x0dx0a浮点数分解函数 modf x0dx0a幂函数 幂函数 pow x0dx0a平方根函数 sqrt x0dx0a整数截断,绝对值和求余数函数 求下限接近整数 ceil x0dx0a绝对值 fabs x0dx0a求上限接近整数 floor x0dx0a求余数 fmod x0dx0ax0dx0a本分类函数用于实现在不同底函数之间直接跳转代码。 头文件 setjmp.h io.h x0dx0ax0dx0a函数列表 x0dx0a函数类别 函数用途 详细说明 x0dx0a保存调用环境 setjmp x0dx0a恢复调用环境 longjmp x0dx0ax0dx0a信号处理 x0dx0a该分类函数用于处理那些在程序执行过程中发生例外的情况。 x0dx0ax0dx0a头文件 signal.h x0dx0ax0dx0a函数列表 x0dx0a函数类别 函数用途 详细说明 x0dx0a指定信号处理函数 signal x0dx0a发送信号 raise x0dx0ax0dx0a可变参数处理 x0dx0a本类函数用于实现诸如printf,scanf等参数数量可变底函数。 x0dx0ax0dx0a头文件 stdarg.h x0dx0ax0dx0a函数列表 x0dx0a函数类别 函数用途 详细说明 x0dx0a可变参数访问宏 可变参数开始宏 va_start x0dx0a可变参数结束宏 va_end x0dx0a可变参数访问宏 访问下一个可变参数宏 va_arg x0dx0ax0dx0a输入输出函数 x0dx0a该分类用于处理包括文件、控制台等各种输入输出设备,各种函数以“流”的方式实现 x0dx0ax0dx0a头文件 stdio.h x0dx0ax0dx0a函数列表 x0dx0a函数类别 函数用途 详细说明 x0dx0a文件操作 x0dx0a删除文件 remove x0dx0a修改文件名称 rename x0dx0a生成临时文件名称 tmpfile x0dx0a得到临时文件路径 tmpnam x0dx0a文件访问 关闭文件 fclose x0dx0a刷新缓冲区 fflush x0dx0a打开文件 fopen x0dx0a将已存在的流指针和新文件连接 freopen x0dx0a设置磁盘缓冲区 setbuf x0dx0a设置磁盘缓冲区 setvbuf x0dx0a格式化输入与输出函数 格式输出 fprintf x0dx0a格式输入 fscanf x0dx0a格式输出(控制台) printf x0dx0a格式输入(控制台) scanf x0dx0a格式输出到缓冲区 sprintf x0dx0a从缓冲区中按格式输入 sscanf x0dx0a格式化输出 vfprintf x0dx0a格式化输出 vprintf x0dx0a格式化输出 vsprintf x0dx0a字符输入输出函数 输入一个字符 fgetc x0dx0a字符串输入 fgets x0dx0a字符输出 fputc x0dx0a字符串输出 fputs x0dx0a字符输入(控制台) getc x0dx0a字符输入(控制台) getchar x0dx0a字符串输入(控制台) gets x0dx0a字符输出(控制台) putc x0dx0a字符输出(控制台) putchar x0dx0a字符串输出(控制台) puts x0dx0a字符输出到流的头部 ungetc x0dx0a直接输入输出 直接流读操作 fread x0dx0a直接流写操作 fwrite x0dx0a文件定位函数 得到文件位置 fgetpos x0dx0a文件位置移动 fseek x0dx0a文件位置设置 fsetpos x0dx0a得到文件位置 ftell x0dx0a文件位置复零位 remind x0dx0a错误处理函数 错误清除 clearerr x0dx0a文件结尾判断 feof x0dx0a文件错误检测 ferror x0dx0a得到错误提示字符串 perror x0dx0ax0dx0a实用工具函数 x0dx0a本分类给出了一些函数无法按以上分类,但又是编程所必须要的。 x0dx0ax0dx0a头文件 stdlib.h x0dx0ax0dx0a函数列表 x0dx0a函数类别 函数用途 详细说明 x0dx0a字符串转换函数 字符串转换为整数 atoi x0dx0a字符串转换为长整数 atol x0dx0a字符串转换为浮点数 strtod x0dx0a字符串转换为长整数 strtol x0dx0a字符串转换为无符号长整型 strtoul x0dx0a伪随机序列产生函数 产生随机数 rand x0dx0a设置随机函数的起动数值 srand x0dx0a存储管理函数 分配存储器 calloc x0dx0a释放存储器 free x0dx0a存储器分配 malloc x0dx0a重新分配存储器 realloc x0dx0a环境通信 中止程序 abort x0dx0a退出程序执行,并清除环境变量 atexit x0dx0a退出程序执行 exit x0dx0a读取环境参数 getenv x0dx0a程序挂起,临时执行一个其他程序 system x0dx0a搜索和排序工具 二分查找(数据必须已排序) bsearch x0dx0a快速排序 qsort x0dx0a整数运算函数 求绝对值 abs x0dx0adiv x0dx0a得到除法运算底商和余数 x0dx0a求长整形底绝对值 labs x0dx0a求长整形除法的商和余数 ldiv x0dx0a多字节字符函数 得到多字节字符的字节数 mblen x0dx0a得到多字节字符的字节数 mbtowc x0dx0a多字节字符转换 wctomb x0dx0a多字节字符的字符串操作 将多字节串转换为整数数组 mbstowcs x0dx0a将多字节串转换为字符数组 mcstowbs x0dx0ax0dx0a字符串处理 x0dx0a本分类的函数用于对字符串进行合并、比较等操作 x0dx0ax0dx0a头文件 string.h x0dx0ax0dx0a函数列表 x0dx0a函数类别 函数用途 详细说明 x0dx0a字符串拷贝 块拷贝(目的和源存储区不可重叠) memcpy x0dx0a块拷贝(目的和源存储区可重叠) memmove x0dx0a串拷贝 strcpy x0dx0a按长度的串拷贝 strncpy x0dx0a字符串连接函数 串连接 strcat x0dx0a按长度连接字符串 strncat x0dx0a串比较函数 块比较 memcmp x0dx0a字符串比较 strcmp x0dx0a字符串比较(用于非英文字符) strcoll x0dx0a按长度对字符串比较 strncmp x0dx0a字符串转换 strxfrm x0dx0a字符与字符串查找 字符查找 memchr x0dx0a字符查找 strchr x0dx0a字符串查找 strcspn x0dx0a字符串查找 strpbrk x0dx0a字符串查找 strspn x0dx0a字符串查找 strstr x0dx0a字符串分解 strtok x0dx0a杂类函数 字符串设置 memset x0dx0a错误字符串映射 strerror x0dx0a求字符串长度 strlen x0dx0ax0dx0a日期和时间函数 x0dx0a本类别给出时间和日期处理函数 x0dx0ax0dx0a头文件 time.h x0dx0ax0dx0a函数列表 x0dx0a函数类别 函数用途 详细说明 x0dx0a时间操作函数 得到处理器时间 clock x0dx0a得到时间差 difftime x0dx0a设置时间 mktime x0dx0a得到时间 time x0dx0a时间转换函数 得到以ASCII码表示的时间 asctime x0dx0a得到字符串表示的时间 ctime x0dx0a得到指定格式的时间 strftime x0dx0ax0dx0a函数库未来的发展方向 x0dx0a本部分用于说明各类别函数库在将来如何发展。 x0dx0ax0dx0a序号 库类别 头文件 详细说明 x0dx0a1 错误处理 errno.h x0dx0a2 字符处理 ctype.h x0dx0a3 地区化 local.h x0dx0a4 数学函数 math.h x0dx0a5 信号处理 signal.h x0dx0a6 输入输出 stdio.h x0dx0a7 实用工具程序 stdlib.h x0dx0a8 字符串处理 string.h
③ 时钟芯片DS1302功能及具体介绍
摘 要:介绍美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302的结构、工作原理及其在实时显示时间中的应用。它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。给出DS1302在读写中的C51程序及流程图,以及在调试过程中的注意事项。
关键词:时钟电路;实时时钟;单片机;应用
1 引言
现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。
2 DS1302的结构及工作原理
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
2.1 引脚功能及结构
图1示出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。
2.2 DS1302的控制字节
DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
2.3 数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
2.4 DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。
此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
3 DS1302实时显示时间的软硬件
DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。图3示出DS1302与89C2051的连接图,其中,时钟的显示用LCD。
3.1 DS1302与CPU的连接
实际上,在调试程序时可以不加电容器,只加一个32.768kHz 的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。只要占用CPU一个口线即可。 LCD还可以换成LED,还可以使用北京卫信杰科技发展有限公司生产的10位多功能8段液晶显示模块LCM101,内含看门狗(WDT)/时钟发生器及两种频率的蜂鸣器驱动电路,并有内置显示RAM,可显示任意字段笔划,具有3-4线串行接口,可与任何单片机、IC接口。功耗低,显示状态时电流为2μA (典型值),省电模式时小于1μA,工作电压为2.4V~3.3V,显示清晰。
3.2 DS1302实时时间流程
图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基本操作进行编程:
根据本人在调试中遇到的问题,特作如下说明:
DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入), D0=1,指定读操作(输出)。
在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。
DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。
要特别说明的是备用电源B1,可以用电池或者超级电容器(0.1F以上)。虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100 μF就可以保证1小时的正常走时。DS1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。
4 结论
DS1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。