① 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,則能很好地解決這個問題。