在C51語言中,它本身不提供輸入和輸出語句,輸入和輸出操作是由函數來實現的。在C51的標準函數庫中提供了一個名爲“stdio.h”的一般I/O函數庫,它當中定義了C51中的輸入和輸出函數。當對輸入和輸出函數使用時,須先用預處理命令“#include <stdio.h>”將該函數庫包含到文件中。
在C51的一般I/O函數庫中定義的I/O函數都是通過串行接口實現,在使用I/O函數之前,應先對51單片機的串行接口進行初始化。選擇串口工作於方式2(8位自動重載方式),波特率由定時器/計數器1溢出率決定。例如,設系統時鐘爲12MHZ,波特率爲2400,則初始化程序如下:
SCON=0x52;
TMOD=0X20;
TH1=0xf3;
TR1=1;
1. 格式輸出函數printf()
printf()函數的的作用是通過串行接口輸出若干任意類型的數據,它的格式如下:
printf(格式控制,輸出參數表)
格式控制是用雙引號括起來的字符串,也稱轉換控制字符串,它包括三種信息:格式說明符、普通字符和轉義字符。
(1)格式說明符,由“%”和格式字符組成,它的作用是用於指明輸出的數據的格式輸出,如%d、%f等,它們的具體情況見下表。
(2)普通字符,這些字符按原樣輸出,用來輸出某些提示信息。
(3)轉義字符,就是前面介紹的轉義字符(下表),用來輸出特定的控制符,如輸出轉義字符\n就是使輸出換一行。
輸出參數表是需要輸出的一組數據,可以是表達式。
2. 格式輸入函數scanf()
scanf()函數的作用是通過串行接口實現數據輸入,它的使用方法與printf()類似,scanf()的格式如下:
scanf(格式控制,地址列表)
格式控制與printf()函數的情況類似,也是用雙引號括起來的一些字符,可以包括以下三種信息:空白字符、普通字符和格式說明。
(1)空白字符,包含空格、製表符、換行符等,這些字符在輸出時被忽略。
(2)普通字符,除了以百分號“%”開頭的格式說明符而外的所有非空白字符,在輸入時要求原樣輸入。
(3)格式說明,由百分號“%”和格式說明符組成,用於指明輸入數據的格式,它的基本情況與printf()相同,具體情況見表4-5。
地址列表是由若干個地址組成,它可以是指針變量、取地址運算符“&”加變量(變量的地址)或字符串名(表示字符串的首地址)。
【例】 使用格式輸入輸出函數的例子
#include <reg52.h> //包含特殊功能寄存器庫
#include <stdio.h> //包含I/O函數庫
void main(void) //主函數
{
int x,y; //定義整型變量x和y
SCON=0x52; //串口初始化
TMOD=0x20;
TH1=0XF3;
TR1=1;
printf(“input x,y:\n”); //輸出提示信息
scanf(“%d%d”,&x,&y); //輸入x和y的值
printf(“\n”); //輸出換行
printf(“%d+%d=%d”,x,y,x+y); //按十進制形式輸出
printf(“\n”); //輸出換行
printf(“%xH+%xH=%XH”,x,y,x+y); //按十六進制形式輸出
while(1); //結束
}