c51 函数库函数 STDIO.H:一般I/O函数

c51 函数 (3)

  3.2 STDIO.H:一般I/O函数

    在头文件中增加include <stdio.h>

  C51编译器包含字符I/O函数,它们通过处理器的串行接口操作,为支持其它I/O机制,只需修改_getkey()和putchar()函数,其它所有I/O支持函数依赖这两个模块,不需要改动。在使用8051串行口之前,必须将它们初始化,下例以2400波特率,12MHz初始化串口:
  SCON=0x52 
  TMOD=0x20 
  TR1=1 
  TH1=0Xf3 

  其它工作模式和波特率等细节问题可以从8051用户手册中得到。

    函数名: _getkey
  原 型: extern char _getkey();
  功 能: _getkey()从8051串口读入一个字符,然后等待字符输入,这个函数是改变整个输入端口机制应作修改的唯一一个函数。

    函数名: getchar
  原 型: extern char _getchar();
  功 能: getchar()使用_getkey从串口读入字符,除了读入的字符马上传给putchar函数以作响应外,与_getkey相同。不是说具有回显功能。
  
  函数名: gets
  原 型: extern char *gets(char *s,int n);
  功 能:该函数通过getchar从控制台设备读入一个字符送入由‘s’指向的数据组。考虑到ANSI标准的建议,限制每次调用时能读入的最大字符数,函数提供了一个字符计数器‘n’,在所有情况下,当检测到换行符时,放弃字符输入。
  
  函数名: ungetchar
  原 型: extern char ungetchar(char);
  功 能: ungetchar将输入字符推回输入缓冲区,因此下次gets或getchar可用该字符。ungetchar成功时返回‘char’,失败时返回EOF,不可能用ungetchar处理多个字符。
  
  函数名: _ungetchar
  原 型: extern char _ungetchar(char);
  功 能: _ungetchar将传入字符送回输入缓冲区并将其值返回给调用者,下次使用getkey时可获得该字符,写回多个字符是不可能的。
  
  函数名:putchar
  原 型: extern putchar(char);
  功 能: putchar通过8051串口输出‘char’,和函数_getkey一样,putchar是改变整个输出机制所需修改的唯一一个函数。

    函数名: printf
  原 型: extern int printf(const char*,…);
  功 能: printf以一定格式通过8051串口输出数值和串,返回值为实际输出的字符数,参量可以是指针、字符或数值,第一个参量是格式串指针。
  注:允许作为printf参量的总字节数由C51库限制,因为8051结构上存贮空间有限,在SMALL和COMPACT模式下,最大可传递15个字节的参数(即5个指针,或1个指针和3个长字节),在LARGE模式下,至多可传递40个字节的参数。格式控制串包含下列域(方括号内的域是可能的):
  %[flags][width][.precision]type
  “width”域定义了参量欲显示的字符数(即显示宽度),它必须是一个十进制数,如果实际显示的字符数小于“width”,输出左端补以空格,如果“width”域以0开始,则左端补0。如%05d,则显示5位十进制数,若不足5位,则左端以0补齐。
  “flag”域用来定义下面选项:
  Falg意义-输出左齐+输出值如果是有符号数值,则加上+/-号‘ ‘(空格),输出值如果为正则左边补以空格显示#,如果它与0,x或X联用,则在输出前加上字符0、0x,0X。当与值类型g、G、f、e、E联用时,‘#’使输出数产生一个十进制小数点。

    b,B它们与格式类型d、i、o、u、x、X联用,这样参量类型被接受为‘[unsigned]char’,如:%bu,%bd或%bx。

    l,L它们与格式类型d、i、o、u、x、X联用,这样参量类型被接受为‘[unsigned]long’,如:%lu,%ld或%lx。

    *下一个参量不作输出。类型d,表示int类型,u表示unsigned int类型

   “type“域定义参量如下类型:
  字符类型输出格式dint有符号十进制数(16位),Uint无符号十进制数,oint无符号八进制数X,xint无符号十六进制数ffloat[-]dddd.dddd形式的浮点数e,Efloat[-]d.ddddE[sign]dd形式的浮点数g,Gfloate或f形式浮点数,看哪一种输出形式好。cchar字符spointer指向一个带结束符号的串ppointer带存贮器指示符和偏移的指针。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]);  打印出指针地址
  
  函数名: sprintf
  原 型: extern int sprintf(char *s,const char*,…);
  功 能: sprintf与printf相似,但输出不显示在控制台上,而是通过一个指针S,送入可寻址的缓冲区。
  注:sprintf允许输出的参量总字节数与printf完全相同。
  
  函数名: puts
  原 型: extern int puts(const char*,…);
  功 能: puts将串‘s’和换行符写入控制台设备,错误时返回EOF,否则返回一非负数。
  
  函数名: scanf
  原 型: extern int scanf(const char*,…);
  功 能: scanf在格式串控制下,利用getchar函数由控制台读入数据,每遇到一个值(符号格式串规定),就将它按顺序赋给每个参量,注意每个参量必须都是指针。scanf返回它所发现并转换的输入项数。若遇到错误返回EOF。格式串包括:
  l 空格、制表符等,这些空白字符被忽略。
  l 字符,除需匹配的“%”(格式控制字符)外。
  l 转换指定字符“%”,后随几个可选字符;赋值抑制符“*”,一个指定最大域宽的数。
  注:scanf参量允许的总字节数与printf相同,格式控制串可包括下列域(方括号内是可选的):
  %[flags][width]type
  格式串总是以百分号开始,每个域包含一个或多个字符或数。
  “width”域定义了参量可接受的字符数,“width”必须是一个正十进制数。如果实际输入字符数量小于“width”,则不会进行填充。
  ‘flag’域用来定义下面选项:
  Flag意 义*输入被忽略b,h它们用作格式类型d,i,o,u和x的前缀,用这些变量可定义参量是字符指针还是无符号字符指针。如%bu,%bd,%bx。L它们被作格式类型d,i,o,u和x的前缀,使用这个前缀可定义参量是长指针还是无符号字长指针。如%lu,%ld,%lx。

“type”域定义参量为如下类型:
  描 述 符类 型输 入 格 式dptr to int有符号十进制数(16位)iptr to int如C中记号一样,整型值uptr to int无符号十进制数optr to int无符号八进制数xptr to int无符号十六进制数f,e,gptr to float浮点数cptr to char一个字符sptr to string一个字串
  
  
  例子:
  scanf(“%d%bd%ld”,&i,&c,&l);
  scanf(“%f”,&f);
  scanf(“%3s,%c”,&string[0],&character);
  
  函数名: sscanf
  原 型: extern int sscanf(const *s,const char*,…);
  功 能: sscanf与scanf方式相似,但串输入不是通过控制台,而是通过另一个以空结束的指针。
  注:sscanf参量允许的总字节数由C-51库限制,这是因为8051处理器结构内存的限制,在SMALL和COMPACT模式,最大允许15字节参数(即至多5个指针,或2个指针,2个长整型或1个字符型)的传递。在LARGE模式下,最大允许传送40个字节的参数。

   

猜你喜欢

转载自blog.csdn.net/Embest028/article/details/8489761