基于proteus的51单片机仿真实例四十三、C语言的字符串数组演示实例

1、基本类型为字符类型的数组称为字符数组。字符数组是用来存放字符的。字符数组时C语言中常用的一种数组。字符数组中的每个元素都是一个字符,因此可用字符数组来存放不同长度的字符串。
字符数组的定义方法与一般数组相同,例如
char good[12]={'I',' ','l','o','v','e','y','o','u'.'\0'};
也可以定义成char good[]={“I love you!”};
这两种定义方式的效果是一样的。
或者写成更简洁的型式:char good[]=“I love you!”;
 
2、在C语言中字符串是作为字符数组来处理的。一个一维的字符数组可以存放一个字符串,这个字符串的长度应小于或等于字符数组的长度。为了测定字符串的实际长度,C语言规定以'\0'作为字符串结束标志,对字符串常量也自动加一个'\0'作为一个结束符。因此,字符数组int a[n]可以存储的字符串最大长度为n-1,在访问字符数组时,遇到'\0'就表示字符串结束,因此在定义字符数组时,应使数组长度大于它允许存放的最大字符串的长度。
对于字符数组的访问可以通过数组中的元素逐个进行访问,也可以对整个数组进行访问。
 
3、本实例利用P0口显示字符串常量,
将待显示字符串常量赋给一个字符型数组,然后通过数组元素引用的方法一次将各元素送到P0口显示。字符型数组中各字符数据在单片机中是以字符的ASCII码存放的,如‘a’的ASCII码为97.将‘a’送到p0口,就相当于把数据97送到P0口,所以P0口各LED会被相应点亮。
 
4、在keil c51中新建工程文件ex32,编写如下程序代码,编译并生成ex32.hex文件
// 实例32:字符串数组演示实例
#include <reg51.h>      //包含头文件
void delay(void)     //延时函数
{
 unsigned char i,j;
 for(i = 0;i < 220;i++)
  for(j = 0;j < 220;j++);
}
void main(void)
{
  unsigned char str[]={"I love mcu!"};   // 定义字符串数组,并赋值
 unsigned char i;
 while(1)
 {          //
   i=0;       // I初始化为0,从数组的第一个元素开始显示
  while(str[i]!='\0')    //判断字符串数组有没有显示到结束标志
  {
    P0=str[i];       // 将第I个字符送到P0口显示
   delay();       // 延时一会
   i++;       //指向下一个数组元素
  }
 }
}
5、在proteus中新建仿真文件ex32.dsn,电路原理图如下图所示
基于proteus的51单片机仿真实例四十三、C语言的字符串数组演示实例
6、将ex32.hex文件载入at89c51中,启动仿真,可以看到P0口的8位LED开始循环闪烁,下图是某一时刻的运行效果图。
基于proteus的51单片机仿真实例四十三、C语言的字符串数组演示实例