51单片机第10步_数组

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

#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]访问二维数组;

}

}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
51单片机是一种非常常见的嵌入式微控制器,使用C语言编写程序来对整数进行存储和操作是相当常见的。以下是一个使用51单片机和C语言来实现整数数组存储的示例: 首先,我们需要定义一个整数数组。例如,我们可以定义一个长度为10数组,用来存储10个整数: int numArray[10]; 接下来,我们可以使用for循环来逐个输入这些整数,并将它们存储在数组中的不同位置上: for(int i=0; i<10; i++){ numArray[i] = i+1; // 将整数i+1存储在数组的第i个位置上 } 现在,整数数组已经成功地存储了10个整数。 要访问数组中的整数,我们可以使用数组索引来获取特定位置上的整数。例如,如果我们想要获取数组中的第5个整数,可以这样做: int num = numArray[4]; // 获取数组的第4个位置上的整数 在这个示例中,变量num将存储数组的第5个整数。 此外,我们还可以使用循环遍历整个数组,以便对数组中的每个整数进行操作。例如,如果我们想要将数组中的每个整数都乘以2,可以这样做: for(int i=0; i<10; i++){ numArray[i] *= 2; // 将数组中的每个整数乘以2 } 在循环结束后,整数数组中的每个元素都将被乘以2。 总结来说,使用51单片机和C语言来实现整数数组的存储和操作是非常简单的。我们只需要定义一个合适大小的数组,并使用循环来逐个输入和处理整数。通过数组索引,我们可以方便地访问和操作数组中的特定整数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值