本章重点学习ctype.h库函数。
#include <REG51.h> //包含头文件REG51.h,使能51内部寄存器;
#include <ctype.h>
//bit isalpha( unsigned char value );
//检查输入参数value是否为英文字母,若是英文字母,则返回1,若不是英文字母,则返回0;
//bit isalnum(unsigned char value);
//检查输入参数value是否为英文字母或数字字符,若是英文字母或数字字符,则返回1;
//若不是英文字母或数字字符,则返回0;
//bit iscntrl (unsigned char value);
//控制字符的值域:0x00<=value<=0x1f或value=0x7f;
//若输入参数value为控制字符,则返回1,否则,返回0;
//isgraph (unsigned char value);
//"可打印字符"的值域:0x21<=value<=0x7e,不包含空格字符值0x20;
//若输入参数value为"可打印字符"(不包括空格),则返回1,否则,返回0;
//isprint (unsigned char value);
//"打印字符"的值域:0x20<=value<=0x7e,包含空格字符值0x20;
//若输入参数value为"打印字符"(包括空格),则返回1,否则,返回0;
//bit ispunct(unsigned char);
//输入参数:标点,空格或格式字符号;
//标点有:逗号(,),点句号(.),问号(?),冒号(:),分号(:),感叹号(!),左单引号('),
//左右小括号( () ),左右中括号([]),左右大括号({});
//格式字符:字符串控制符号("),字符控制符号('),加减号(+ -),百分号(%),井号(#),
//相与符号(&),星号(*),前和后斜杠线(\ /),竖杠线(|),下划线(_),小老鼠符号(@),
//英磅符号($),大于号(>),小于号(<),等于号(=);控制符号(^),波浪符号(~);
//若输入参数为空格或32个标点和格式字符之一,则返回1;
//bit isdigit(unsigned char value);
//若输入字符为0~9的ascii码,则返回1,否则返回0;
//bit islower(unsigned char value);
//若输入参数value为小写英文字母,则返回1,否则返回0;
//bit isupper (unsigned char value);
//若输入参数value为大写英文字母,则返回1,否则返回0;
//bit isspace (unsigned char value);
//输入参数:空格符(0x20,即' '),水平制表符(0x09,即'\t'),垂直制表符(0x0b,即'\v'),
//回车符(0x0d,即'\r'),换行符(0x0a即'\n')和送纸符(0x0c,即'\f'换页符);
//若输入参数0x09<=value<=0x0d或value=0x20,则返回1,否则返回0;
//bit isxdigit (unsigned char value);
//输入参数:'0'~'9'或'A'~'F'或'a'~'f';
//若输入参数'0'<=value<='9'或'A'<=value<='F'或'a'<=value<='f',则返回1,否则返回0;
//unsigned char toint (unsigned char value value);
//若输入参数'0'<=value<='9'或'A'<=value<='F'或'a'<=value<='f',则返回相应的16进制数据;
//unsigned char tolower (unsigned char value);和_tolower(c);
//输入参数:'A'~'Z';
//将大写英文字母转换为对应的小写字母;
//注意:在tolower(value)中,若value的值不在'A'和'Z'之间,则不进行转换;
//_tolower(c)相当于( (c)-'A'+'a' );
//unsigned char toupper (unsigned char value);和_toupper(c);
//输入参数:'a'~'z';
//将小写英文字母转换为对应的大写字母;
//注意:在toupper(value)中,若value的值不在'a'和'z'之间,则不进行转换;
//_toupper(c)相当于( (c)-'a'+'A' );
//toascii(c);相当于( (c) & 0x7F );
//将第7位以上的所有位设置为0,使其结果值<=127,即为ascii码,不常使用;
//若输入参数为字节型数据,则只将最高位设置为0;
#include <stdio.h> //包含头文件stdio.h
//_getkey();从串口读入一个字符;
//putchar();向串口发送一个字节;
//printf();向串口发送一串字节;
//函数功能:测试isalpha()函数;
void test_isalpha()
{ char s[]="a$bcd";
if( isalpha(s[0]) ) //若输入参数是英文字母,则执行下面语句;
printf( "isalpha('a')=1;\n" ); //输出:"isalpha('a')=1;"
if( !isalpha(s[1]) ) //若输入参数不是英文字母,则执行下面语句;
printf( "isalpha('')=0;\\n" ); //输出:"isalpha('')=0;"
}
//函数功能:测试isalnum()函数;
void test_isalnum()
{ char s[]="b1#23acd";
if( isalnum(s[0]) ) //若输入参数是英文字母或数字字符,则执行下面语句;
printf( "isalnum('b')=1;\n" ); //输出:"isalnum('b')=1;"
if( isalnum(s[1]) ) //若输入参数是英文字母或数字字符,则执行下面语句;
printf( "isalnum('1')=1;\n" ); //输出:"isalnum('1')=1;"
if( !isalnum(s[2]) ) //若输入参数既不是英文字母也不是数字字符,则执行下面语句;
printf( "isalnum('#')=0;\n" ); //输出:"isalnum('#')=0;"
}
//函数功能:测试iscntrl()函数;
void test_iscntrl()
{ unsigned char value;
bit return_bit_value;
value=0x7f;
return_bit_value=iscntrl(value); //若输入参数value为控制字符,则返回1;
//控制字符的值域:0x00<=value<=0x1f或value=0x7f;
if(return_bit_value) printf( "iscntrl(0x7f)=1;\n" ); //输出:"iscntrl(0x7f)=1;"
value=0x1f;
return_bit_value=iscntrl(value); //若输入参数value为控制字符,则返回1;
if(return_bit_value) printf( "iscntrl(0x1f)=1;\n" ); //输出:"iscntrl(0x1f)=1;"
value=0x00;
return_bit_value=iscntrl(value); //若输入参数value为控制字符,则返回1;
if(return_bit_value) printf( "iscntrl(0x00)=1;\n" ); //输出:"iscntrl(0x00)=1;"
value=0x20;
return_bit_value=iscntrl(value); //若输入参数value为控制字符,则返回1;
if(!return_bit_value) printf( "iscntrl(0x20)=0;\n" ); //输出:"iscntrl(0x20)=0;"
}
//函数功能:测试isgraph()函数;
void test_isgraph()
{ unsigned char value;
bit return_bit_value;
value=0x7e;
return_bit_value=isgraph(value);
//若输入参数value为"可打印字符"(不包括空格),则返回1,否则,返回0;
//"可打印字符"的值域:0x21<=value<=0x7e,不包含空格字符值0x20;
if(return_bit_value) printf( "isgraph(0x7e)=1;\n" ); //输出:"isgraph(0x7e)=1;"
value=0x21;
return_bit_value=isgraph(value);
if(return_bit_value) printf( "isgraph(0x21)=1;\n" ); //输出:"isgraph(0x21)=1;"
value=' ';
return_bit_value=isgraph(value);
if(!return_bit_value) printf( "isgraph(0x20)=0;\n" ); //输出:"isgraph(0x20)=0;"
value=0x7f;
return_bit_value=isgraph(value);
if(!return_bit_value) printf( "isgraph(0x7f)=0;\n" ); //输出:"isgraph(0x7f)=0;"
}
//函数功能:测试isprint()函数;
void test_isprint()
{ unsigned char value;
bit return_bit_value;
value=0x7e;
return_bit_value=isprint(value);
//若输入参数value为"打印字符"(包括空格),则返回1,否则,返回0;
//可打印字符的值域:0x20<=value<=0x7e,包含空格字符值0x20;
if(return_bit_value) printf( "isprint(0x7e)=1;\n" );//输出:"isprint(0x7e)=1;"
value=' ';
return_bit_value=isprint(value);
if(return_bit_value) printf( "isprint(0x20)=1;\n" ); //输出:"isprint(0x20)=1;"
value=0x7f;
return_bit_value=isprint(value);
if(!return_bit_value) printf( "isprint(0x7f)=0;\n" ); //输出:"isprint(0x7f)=0;"
}
//函数功能:测试isdigit()函数;
void test_isdigit()
{ unsigned char value;
bit return_bit_value;
value='0';
return_bit_value=isdigit(value); //若输入字符为0~9的ascii码,则返回1,否则返回0;
if(return_bit_value)printf( "isdigit('0')=1;\n" ); //输出:"iscntrl('0')=1;"
value=0;
return_bit_value=isdigit(value);//若输入字符为0~9的ascii码,则返回1,否则返回0;
if(!return_bit_value)printf( "isdigit(0)=0;\n" ); //输出:"iscntrl(0)=0;"
}
//函数功能:测试ispunct()函数;
void test_ispunct()
{ unsigned char value;
bit return_bit_value;
value='~';
return_bit_value=ispunct(value);
//输入参数:标点,空格或格式字符号;
//标点有:逗号(,),点句号(.),问号(?),冒号(:),分号(:),感叹号(!),左单引号('),
//左右小括号( () ),左右中括号([]),左右大括号({});
//格式字符:字符串控制符号("),字符控制符号('),加减号(+ -),百分号(%),井号(#),
//相与符号(&),星号(*),前和后斜杠线(\ /),竖杠线(|),下划线(_),小老鼠符号(@),
//英磅符号($),大于号(>),小于号(<),等于号(=);控制符号(^),波浪符号(~);
//若输入参数为空格或32个标点和格式字符之一,则返回1;
if(return_bit_value)printf( "ispunct('~')=1;\n" ); //输出:"ispunct('~')=1;"
value='`';
return_bit_value=ispunct(value);
if(return_bit_value)printf( "ispunct('`')=1;\n" ); //输出:"ispunct('`')=1;"
value='@';
return_bit_value=ispunct(value);
if(return_bit_value)printf( "ispunct('@')=1;\n" ); //输出:"ispunct('@')=1;"
value=' ';
return_bit_value=ispunct(value);
if(return_bit_value)printf( "ispunct(' ')=1;\n" ); //输出:"ispunct(' ')=1;"
}
//函数功能:测试islower()函数;
void test_islower()
{ unsigned char value;
bit return_bit_value;
value='a';
return_bit_value=islower(value);
//若输入参数value为小写英文字母,则返回1,否则返回0;
if(return_bit_value)printf( "islower('a')=1;\n" ); //输出:"islower('a')=1;"
value='A';
return_bit_value=islower(value);
if(!return_bit_value)printf( "islower('A')=0;\n" );//输出:"islower('A')=0;"
}
//函数功能:测试isupper()函数;
void test_isupper()
{ unsigned char value;
bit return_bit_value;
value='B';
return_bit_value=isupper(value);
//若输入参数value为大写英文字母,则返回1,否则返回0;
if(return_bit_value)printf( "isupper('B')=1;\n" );
value='b';
return_bit_value=isupper(value);
if(!return_bit_value)printf( "isupper('b')=0;\n" );
}
//函数功能:测试isspace()函数;
void test_isspace()
{ unsigned char value;
bit return_bit_value;
value='\t'; //将水平制表符(0x09,即'\t')保存到value中;
return_bit_value=isspace(value);
//输入参数:空格符(0x20,即' '),水平制表符(0x09,即'\t'),垂直制表符(0x0b,即'\v'),
//回车符(0x0d,即'\r'),换行符(0x0a即'\n')和送纸符(0x0c,即'\f'换页符);
//若输入参数0x09<=value<=0x0d或value=0x20,则返回1,否则返回0;
if(return_bit_value)printf( "isspace(0x09)=1;\n" );
value='\n'; //换行符
return_bit_value=isspace(value);
if(return_bit_value)printf( "isspace(0x0a)=1;\n" );
value='\v'; //垂直制表符
return_bit_value=isspace(value);
if(return_bit_value)printf( "isspace(0x0b)=1;\n" );
value='\f'; //换页符
return_bit_value=isspace(value);
if(return_bit_value)printf( "isspace(0x0c)=1;\n" );
value='\r'; //回车符
return_bit_value=isspace(value);
if(return_bit_value)printf( "isspace(0x0d)=1;\n" );
value=' '; //空格符
return_bit_value=isspace(value);
if(return_bit_value)printf( "isspace(' ')=1;\n" );
}
//函数功能:测试isxdigit()函数;
void test_isxdigit()
{ unsigned char value;
bit return_bit_value;
value='A';
return_bit_value=isxdigit(value);
//若输入参数'0'<=value<='9'或'A'<=value<='F'或'a'<=value<='f',则返回1,否则返回0;
if(return_bit_value)printf( "isxdigit('A')=1;\n" );
value='a';
return_bit_value=isxdigit(value);
if(return_bit_value)printf( "isxdigit('a')=1;\n" );
value='0';
return_bit_value=isxdigit(value);
if(return_bit_value)printf( "isxdigit('0')=1;\n" );
value='f';
return_bit_value=isxdigit(value);
if(return_bit_value)printf( "isxdigit('f')=1;\n" );
value='G';
return_bit_value=isxdigit(value);
if(!return_bit_value)printf( "isxdigit('G')=0;\n" );
}
//函数功能:测试toint()函数;
void test_toint()
{ unsigned char return_bit_value;
return_bit_value=toint('9');
//若输入参数'0'<=value<='9'或'A'<=value<='F'或'a'<=value<='f',则返回相应的16进制数据;
printf("toint('9')=%#bx\n",return_bit_value); //输出:"toint('9')=0x09;"
return_bit_value=toint('A');
printf("toint('A')=%#bx\n",return_bit_value); //输出:"toint('A')=0x0a;"
return_bit_value=toint('a');
printf("toint('a')=%#bx\n",return_bit_value); //输出:"toint('a')=0x0a;"
}
//函数功能:测试tolower()函数;
void test_tolower()
{ unsigned char return_bit_value;
return_bit_value=tolower('A');
//输入参数:'A'~'Z';
//将大写英文字母转换为对应的小写字母;
//注意:在tolower(value)中,若value的值不在'A'和'Z'之间,则不进行转换;
printf("tolower('A')=%c\n",return_bit_value);
return_bit_value=_tolower('Z'); //相当于( (c)-'A'+'a' )
printf("_tolower('Z')=%c\n",return_bit_value);
}
//函数功能:测试toupper()函数;
void test_toupper()
{ unsigned char return_bit_value;
return_bit_value=toupper('a');
//输入参数:'a'~'z';
//将小写英文字母转换为对应的大写字母;
//注意:在toupper(value)中,若value的值不在'a'和'z'之间,则不进行转换;
//_toupper(c)相当于( (c)-'a'+'A' )
printf("toupper('a')=%c\n",return_bit_value);
return_bit_value=_toupper('z'); //相当于( (c)-'a'+'A' )
printf("_toupper('z')=%c\n",return_bit_value);
}
//函数功能:初始化串口,设置波特率为1200bps@16MHz,使能接收,使用8位UART;
void Serial_Port_Initialization()
{ SCON = 0x50; //串行控制寄存器: SM0,SM1,SM2,REN,TB8,RB8,TI,RI
//SM1:SM0=01,选择方式1,SM2=0,表示非多机通讯,8-bit UART;
//REN=1,使能接收;
TMOD |= 0x20; //定时器方式控制寄存器:GATE1,C/T1,M11,M10,GATE0,C/T0,M01,M00
//GATE=0,TR置1便可以启动Timer;GATE=1,TR置1,且INT脚输入高电平,才
//可以启动Timer;
//M11:M10=10,选择方式2,8位自动重装载;
TH1 = 221; //TH1: reload value for 1200 baud @ 16MHz
TR1 = 1; //启动Timer1;
TI = 1; //发送UART的第一个字节,为下次发送做准备;
}
void main(void)
{ Serial_Port_Initialization(); //初始化串口,设置波特率为1200bps@16MHz,使能接收,使用8位UART;
for(;;)
{ test_isalpha(); //测试isalpha()函数;
test_isalnum(); //测试isalnum()函数;
test_iscntrl(); //测试iscntrl()函数;
test_isdigit(); //测试isdigit()函数;
test_isgraph(); //测试isgraph()函数;
test_isprint(); //测试isprint()函数;
test_ispunct(); //测试ispunct()函数;
test_islower(); //测试islower()函数;
test_isupper(); //测试isupper()函数;
test_isspace(); //测试isspace()函数;
test_isxdigit(); //测试isxdigit()函数;
test_toint(); //测试toint()函数;
test_tolower(); //测试tolower()函数;
test_toupper(); //测试toupper()函数;
}
}