51单片机第10步_数组

发布于:2024-06-30 ⋅ 阅读:(15) ⋅ 点赞:(0)

本章重点介绍如何访问数组

#include <REG51.h>  //包含头文件REG51.h,使能51内部寄存器;

#include <string.h>  //使能strcpy();

#include <stdio.h>  //包含头文件stdio.h

                 //_getkey();从串口读入一个字符;

                 //putchar();向串口发送一个字节;

                 //printf();向串口发送一串字节;

//函数功能:初始化串口,设置波特率为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的第一个字节,为下次发送做准备;

}

//函数功能:以标准数组方式array[i]访问数组;

void access_array_method_1()

{ unsigned char array[11]={'0','1','2','3','4','5','6','7','8','9','\0'};

  unsigned char a[]="0123456789"; //数组array[]和a[]的值是完全等价的;

  unsigned char i;

  printf("a[]=\"%s\";\n",a);           //输出:a[]="0123456789";

  printf("array[11]=\"%s\";\n",array);  //输出:array[11]="0123456789";

  //下面3句的执行结果是输出:array[10]="0123456789";

  printf("array[11]=\"");

  for(i=0;i<10;i++) putchar(array[i]); //以标准方式array[i]访问数组;

  printf("\";\n");

}

//函数功能:以"数组名+下标"的方式访问数组;

void access_array_method_2()

{ unsigned char array[5]={'A','B','C','D','\0'};

  unsigned char a[]="ABCD"; //数组array[]和a[]的值是完全等价的;

  unsigned char i;

 //下面3句的执行结果是输出:array[5]="ABCD";

  printf("array[5]=\"");

  for(i=0;i<4;i++) putchar( *(array+i) ); //以"数组名+下标"的方式访问数组;

  printf("\";\n");

 //下面3句的执行结果是输出:a[]="ABCD";

  printf("a[]=\"");

  for(i=0;i<4;i++) putchar( *(a+i) ); //以"数组名+下标"的方式访问数组;

  printf("\";\n");

}

//函数功能:以"指针+下标"或"指针"的方式访问数组;

void access_array_method_3()

{ unsigned char array[4]={'X','Y','Z','\0'};

  unsigned char a[]="XYZ"; //数组array[]和a[]的值是完全等价的;

  unsigned char i,*pointer;

  pointer=array; //将数组的首地址保存到pointer中;

 //下面3句的执行结果是输出:array[4]="XYZ";

  printf("array[4]=\"");

  for(i=0;i<3;i++) putchar( *(pointer+i) ); //以"数组名+下标"的方式访问数组;

  printf("\";\n");

  pointer=a; //将字符串的首地址保存到pointer中;

 //下面3句的执行结果是输出:a[4]="XYZ";

  printf("a[]=\"");

  for(i=0;i<3;i++) putchar( *pointer++ ); //以"指针"的方式访问数组;

  printf("\";\n");

}

//函数功能:使用共用体和结构方式来访问数组;

void access_array_method_4()

{ unsigned char array1[5]={'A','B','C','D','\0'};

  union TEST{ unsigned char array[4];

              struct{ unsigned char a0;

          unsigned char a1;

  unsigned char a2;

  unsigned char a3;

        }a;

            };

  union TEST display;

  strcpy(display.array,array1); //将字符串数组array1[]拷贝到display.array[]中;

  //display.array[0]='A';

  //display.array[1]='B';

  //display.array[2]='C';

  //display.array[3]='D';

  printf("display.a.a0=%c\n",display.a.a0); //输出"display.a.a0=A"

  printf("display.a.a1=%c\n",display.a.a1); //输出"display.a.a1=B"

  printf("display.a.a2=%c\n",display.a.a2); //输出"display.a.a2=C"

  printf("display.a.a3=%c\n",display.a.a3); //输出"display.a.a3=D"

}

//函数功能:以"指针"的方式访问二维数组;

void access_planar_array_method_1()

{ int array[3][4]={{'1','2','3','4'},{'5','6','7','8'},{'9','A','B','C'}};

  int (*ptr)[4];

  unsigned char i,j,temp;

  ptr=array;

  printf("array[11]={");

  for(i=0;i<3;i++)

    { for( j=0;j<4;j++ )

    { temp=*( *(ptr+i)+j);

  putchar(temp);

}

}

  printf("}\n");

}

//函数功能:以标准数组方式array[i][j]访问二维数组;

void access_planar_array_method_2()

{ int array[2][3]={'A','B','C','D','E','F'};

  unsigned char i,j,temp;

  printf("array[11]={");

  for(i=0;i<2;i++)

    { for( j=0;j<3;j++ )

    { temp=array[i][j];

  putchar(temp);

}

}

  printf("}\n");

}

void main(void)

{ Serial_Port_Initialization();//设置波特率为1200bps@16MHz,使能接收,使用8位UART;

  for(;;)

    { access_array_method_1();  //以标准数组方式array[i]访问数组;

  access_array_method_2();    //以"数组名+下标"的方式访问数组;

  access_array_method_3();    //以"指针+下标"或"指针"的方式访问数组;

  access_array_method_4();    //使用共用体和结构方式来访问数组;

  access_planar_array_method_1(); //以"指针"的方式访问二维数组;

  access_planar_array_method_2(); //以标准数组方式array[i][j]访问二维数组;

}

}