51单片机第7步_ctype.h库函数

本章重点学习ctype.h库函数。

//介绍C51库函数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()函数;

}

}

相关推荐
韦东山2 分钟前
第5章_Modbus通讯协议
嵌入式硬件·开发·工业控制
阿杰小子1 小时前
Linux内核——Linux内核体系模式(二)
linux·运维·单片机
zeruns8021 小时前
开源205W桌面充电器,140W+65W升降压PD3.1快充模块(2C+1A口),IP6557+IP6538
科技·嵌入式硬件·开源·智能硬件·充电器·快充·英集芯
极客小张3 小时前
STM32实战项目:从零打造GPS蓝牙自行车码表,掌握传感器、蓝牙、Flash存储等核心技术
c语言·单片机·嵌入式硬件·mcu·物联网·算法·智能家居
致亲爱的开心eng小电3 小时前
【stm32】大一上学期笔记复制
笔记·stm32·嵌入式硬件
单片机一哥4 小时前
PHP 比 Java 的开发效率高在哪?
单片机·51单片机
科学的发展-只不过是读大自然写的代码4 小时前
51单片机通过控制寄存器控制设备,那么程序中变量的运算职责由谁完成的呢
单片机·嵌入式硬件·51单片机
人才程序员4 小时前
【51单片机入门】数码管原理
c++·单片机·嵌入式硬件·mcu·51单片机·proteus·c
晨同学03274 小时前
51单片机-让一个LED灯闪烁、流水灯(涉及:设置单片机的延迟函数)
单片机·嵌入式硬件·51单片机
XD7429716364 小时前
【TB作品】打地鼠游戏,ATMEGA16单片机,Proteus仿真 打地鼠游戏
单片机·游戏·proteus·打地鼠