當前位置:首頁 > 單片機 > 單片機
[導讀]3.2 STDIO.H:一般I/O函數(shù)C51編譯器包含字符I/O函數(shù),它們通過處理器的串行接口操作,為支持其它I/O機制,只需修改getkey()和putchar()函數(shù),其它所有I/O支持函數(shù)依賴這兩個模塊,不需要改動。在使用8051串行口之前,

3.2 STDIO.H:一般I/O函數(shù)

C51編譯器包含字符I/O函數(shù),它們通過處理器的串行接口操作,為支持其它I/O機制,只需修改getkey()和putchar()函數(shù),其它所有I/O支持函數(shù)依賴這兩個模塊,不需要改動。在使用8051串行口之前,必須將它們初始化,下例以2400波特率,12MHz初始化串口:

SCON=0x52

TMOD=0x20

TR1=1

TH1=0Xf3

其它工作模式和波特率等細節(jié)問題可以從8051用戶手冊中得到。

函數(shù)名: _getkey

原 型: extern char _getkey();

功 能: _getkey()從8051串口讀入一個字符,然后等待字符輸入,這個函數(shù)是改變整個

輸入端口機制應作修改的唯一一個函數(shù)。

函數(shù)名: getchar

原 型: extern char _getchar();

功 能: getchar()使用_getkey從串口讀入字符,除了讀入的字符馬上傳給putchar函數(shù)

以作響應外,與_getkey相同。

函數(shù)名: gets

原 型: extern char *gets(char *s,int n);

功能:該函數(shù)通過getchar從控制臺設備讀入一個字符送入由‘s’指向的數(shù)據(jù)組???/p>

慮到ANSI標準的建議,限制每次調用時能讀入的最大字符數(shù),函數(shù)提供了一個字符計數(shù)器‘n’,在所有情況下,當檢測到換行符時,放棄字符輸入。

函數(shù)名: ungetchar

原 型: extern char ungetchar(char);

功 能: ungetchar將輸入字符推回輸入緩沖區(qū),因此下次gets或getchar可用該字符。

ungetchar成功時返回‘char’,失敗時返回EOF,不可能用ungetchar處理多個字符。

函數(shù)名: _ungetchar

原 型: extern char _ungetchar(char);

功 能: _ungetchar將傳入字符送回輸入緩沖區(qū)并將其值返回給調用者,下次使用getkey

時可獲得該字符,寫回多個字符是不可能的。

函數(shù)名: putchar

原 型: extern putchar(char);

功 能: putchar通過8051串口輸出‘char’,和函數(shù)getkey一樣,putchar是改變整個

輸出機制所需修改的唯一一個函數(shù)。

函數(shù)名: printf

原 型: extern int printf(const char*,…);

功 能: printf以一定格式通過8051串口輸出數(shù)值和串,返回值為實際輸出的字符數(shù),

參量可以是指針、字符或數(shù)值,第一個參量是格式串指針。

注:允許作為printf參量的總字節(jié)數(shù)由C51庫限制,因為8051結構上存貯空間有限,在SMALL和COMPACT模式下,最大可傳遞15個字節(jié)的參數(shù)(即5個指針,或1個指針和3個長字節(jié)),在LARGE模式下,至多可傳遞40個字節(jié)的參數(shù)。格式控制串包含下列域(方括號內的域是可能的):

%[flags][width][.precision]type

“width”域定義了參量欲顯示的字符數(shù),它必須是一個十進制數(shù),如果實際顯示的字符數(shù)小于“width”,輸出左端補以空格,如果“width”域以0開始,則左端補0。

“flag”域用來定義下面選項:

Falg

意 義

-

輸出左齊

+

輸出值如果是有符號數(shù)值,則加上+/-號

‘ ‘(空格)

輸出值如果為正則左邊補以空格顯示

#

如果它與0,x或X聯(lián)用,則在輸出前加上字符0、0x,0X。當與值類型g、G、f、e、E聯(lián)用時,‘#’使輸出數(shù)產(chǎn)生一個十進制小數(shù)點。

b,B

它們與格式類型d、i、o、u、x、X聯(lián)用,這樣參量類型被接受為‘[unsigned]char’,如:%bu,%bd或%bx。

L,L

它們與格式類型d、i、o、u、x、X聯(lián)用,這樣參量類型被接受為‘[unsigned]long’,如:%lu,%ld或%lx。

*

下一個參量不作輸出。

“type“域定義參量如下類型:

字 符

類 型

輸 出 格 式

d

int

有符號十進制數(shù)(16位)

U

int

無符號十進制數(shù)

o

int

無符號八進制數(shù)

X,x

int

無符號十六進制數(shù)

f

float

[-]dddd.dddd形式的浮點數(shù)

e,E

float

[-]d.ddddE[sign]dd形式的浮點數(shù)

g,G

float

e或f形式浮點數(shù),看哪一種輸出形式好。

c

char

字符

s

pointer

指向一個帶結束符號的串

p

pointer

帶存貯器指示符和偏移的指針。M:aaaa。

M:=C(ode),D(ata),I(data),P(data) aaaa:指針偏移值。

例子:

printf(“Int-Val%d,Char-Val%bd,Long-Val%d”,I,c,l);

printf(“String%s,Character%c”,array,character);

printf(“Pointer%p”,&array[10]);

函數(shù)名: sprintf

原 型: extern int sprintf(char *s,const char*,…);

功 能: sprintf與printf相似,但輸出不顯示在控制臺上,而是通過一個指針S,送入

可尋址的緩沖區(qū)。

注:sprintf允許輸出的參量總字節(jié)數(shù)與printf完全相同。

函數(shù)名: puts

原 型: extern int puts(const char*,…);

功 能: puts將串‘s’和換行符寫入控制臺設備,錯誤時返回EOF,否則返回一非負數(shù)。

函數(shù)名: scanf

原 型: extern int scanf(const char*,…);

功 能: scanf在格式串控制下,利用getcha函數(shù)由控制臺讀入數(shù)據(jù),每遇到一個值(符

號格式串規(guī)定),就將它按順序賦給每個參量,注意每個參量必須都是指針。scanf返回它所發(fā)現(xiàn)并轉換的輸入項數(shù)。若遇到錯誤返回EOF。格式串包括:

l 空格、制表符等,這些空白字符被忽略。

l 字符,除需匹配的“%”(格式控制字符)外。

l 轉換指定字符“%”,后隨幾個可選字符;賦值抑制符“*”,一個指定最大域寬的數(shù)。

注:scanf參量允許的總字節(jié)數(shù)與printf相同,格式控制串可包括下列域(方括號內是可選的):

%[flags][width]type

格式串總是以百分號開始,每個域包含一個或多個字符或數(shù)。

“width”域定義了參量可接受的字符數(shù),“width”必須是一個正十進制數(shù)。如果實際輸入字符數(shù)量小于“width”,則不會進行填充。

‘flag’域用來定義下面選項:

Flag

意 義

*

輸入被忽略

b,h

它們用作格式類型d,i,o,u和x的前綴,用這些變量可定義參量是字符指針還是無符號字符指針。如%bu,%bd,%bx。

L

它們被作格式類型d,i,o,u和x的前綴,使用這個前綴可定義參量是長指針還是無符號字長指針。如%lu,%ld,%lx。

“type”域定義參量為如下類型:

描 述 符

類 型

輸 入 格 式

d

ptr to int

有符號十進制數(shù)(16位)

i

ptr to int

如C中記號一樣,整型值

u

ptr to int

無符號十進制數(shù)

o

ptr to int

無符號八進制數(shù)

x

ptr to int

無符號十六進制數(shù)

f,e,g

ptr to float

浮點數(shù)

c

ptr to char

一個字符

s

ptr to string

一個字串

例子:

scanf(“%d%bd%ld”,&i,&c,&l);

scanf(“%f”,&f);

scanf(“%3s,%c”,&string[0],&character);

函數(shù)名: sscanf

原 型: extern int sscanf(const *s,const char*,…);

功 能: sscanf與scanf方式相似,但串輸入不是通過控制臺,而是通過另一個以空結束

的指針。

注:sscanf參量允許的總字節(jié)數(shù)由C-51庫限制,這是因為8051處理器結構內存的限制,在SMALL和COMPACT模式,最大允許15字節(jié)參數(shù)(即至多5個指針,或2個指針,2個長整型或1個字符型)的傳遞。在LARGE模式下,最大允許傳送40個字節(jié)的參數(shù)。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉