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

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。

“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。

*

下一个参量不作输出。

“type“域定义参量如下类型:

字 符

类 型

输 出 格 式

d

int

有符号十进制数(16位)

U

int

无符号十进制数

o

int

无符号八进制数

X,x

int

无符号十六进制数

f

float

[-]dddd.dddd形式的浮点数

e,E

float

[-]d.ddddE[sign]dd形式的浮点数

g,G

float

e或f形式浮点数,看哪一种输出形式好。

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]);

函数名: 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在格式串控制下,利用getcha函数由控制台读入数据,每遇到一个值(符

号格式串规定),就将它按顺序赋给每个参量,注意每个参量必须都是指针。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”域定义参量为如下类型:

描 述 符

类 型

输 入 格 式

d

ptr to int

有符号十进制数(16位)

i

ptr to int

如C中记号一样,整型值

u

ptr to int

无符号十进制数

o

ptr to int

无符号八进制数

x

ptr to int

无符号十六进制数

f,e,g

ptr to float

浮点数

c

ptr to char

一个字符

s

ptr 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个字节的参数。

C51 库函数(2)的更多相关文章

  1. C51库函数积累

    C51库函数积累: (1)_chkfloat_: 函数定义:unsigned char _chkfloat_ ( float val); /* number to check */ 函数功能:_chk ...

  2. C51 库函数(1)

    C-51软件包的库包含标准的应用程序,每个函数都在相应的头文件(.h)中有原型声明.如果使用库函数,必须在源程序中用预编译指令定义与该函数相关的头文件(包含了该函数的原型声明).例如: #includ ...

  3. Keil C51库函数原型列表

    //1. CTYPE.H bit isalnum(char c): bit isalpha(char c): bit iscntrl(char c): bit isdigit(char c): bit ...

  4. C51 库函数

    C-51软件包的库包含标准的应用程序,每个函数都在相应的头文件(.h)中有原型声明.如果使用库函数,必须在源程序中用预编译指令定义与该函数相关的头文件(包含了该函数的原型声明).例如:#include ...

  5. C51 库函数(3)

    3.3 STRING.H:串函数 串函数通常将指针串作输入值.一个串就包括2个或多个字符.串结以空字符表示.在函数memcmp,memcpy,memchr,memccpy,memmove和memset ...

  6. Keil C51编译及连接技术

    主要介绍Keil C51的预处理方法如宏定义.常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现. 教学目 ...

  7. keil c51笔记

    第一章 Keil C51开发系统基本知识 第一节 系统概述 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上.结构性.可读性. ...

  8. [转]keil使用详解

    第一节 系统概述 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上.结构性.可读性.可维护性上有明显的优势,因而易学易用.用过 ...

  9. KeilC51使用详解 (三)

    C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系统. 第一节 本征库函数(intrinsic rou ...

随机推荐

  1. bzoj2049: [Sdoi2008]Cave 洞穴勘测

    lct入门题? 得换根了吧TAT 这大概不是很成熟的版本.. #include<iostream> #include<cstring> #include<cstdlib& ...

  2. 项目经历——EasyUI的检索和更新操作

    什么事都耐不住“磨”?! 比如一个让人很头疼的问题,对于项目中所用到的EasyUI框架就是一个很明显的感受.项目使用的EasyUI框架,自身封装好的样式使得开发者不用考虑具体的div和css样式了,但 ...

  3. Windows的应用管理工具 PortableApps,Chocolatey和Ninite

    以前为了让我的firefox变成portable的,我使用了PortableApps,它不只是做软件的绿色版,而且也是一个软件的管理平台,可以通过它来管理软件的更新,挺方便的. 前段时间试用Scrip ...

  4. java 吞吐量

    jvm中 ,执行用户的代码占 的时间/总时间 ,假如前者是99 分钟,后者一分钟,则吞吐量为99% ,吞吐量越大.系统越好,如何设计系统,导致系统吞吐量高,因为我们知道,垃圾回收,7种垃圾收集器,也不 ...

  5. CDH5 安装过程

    一.环境 1.1 操作系统 $ cat /etc/redhat-release CentOS release 6.5 (Final) 1.2 Java环境 $ java -version java v ...

  6. android AppWidgwtProvider学习

    实现AppWidgwtProvider: onUpdate() //在达到制定的更新时间之后或者当用户向桌面添加   App Widget时会调用该方法. onDeleted() //当App Wid ...

  7. C\C++代码优化的27个建议

    1. 记住阿姆达尔定律: funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数. 所以,如果你优化了函数TriangleIntersect执行40%的运行时间, ...

  8. 基于库zkclient 的leader选举代码实现

    利用了zookeeper临时节点,在当连接或session断掉时被删除这一特性来做选举.(简单简单互斥锁) 查了下网上的做法. 大致流程: <1>判定是否存在/wzgtest路径 < ...

  9. IOS内存等信息

    1. 获取IOS APP占用的内存 #import <mach/mach.h> // ... void report_memory(void) { struct task_basic_in ...

  10. android应用的不同版本间兼容性处理

    在Android系统中向下兼容性比较差,但是一个应用APP经过处理还是可以在各个版本间运行的.向下兼容性不好,不同版本的系统其API版本也不同,自然有些接口也不同,新的平台不能使用旧的API,旧的平台 ...