51单片机之数组的应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【实验题目】数组

【目的要求】1.学习一维和二维数组的定义,初始化,引用。

2.利用数组做流水灯。

3.要求三个学时完成。

【实验平台】电脑,伟福,Proteus7等仿真软件。

【实验原理】

我们在数学上学过数列,用一大括号将一组数字括起来,就变成一个整体,用一个大写字母来表示,数列具有无序性,不重复性。且根据数列中数的类型来判断数列的类型。如果将数列的不重复性去掉,并用a[10]来代表,10为整数代表数的个数,a[0],a[1]...a[9]来表示数列中的数,这就变成了我们今天要说的数组。

定义数组:类型符数组名[常量表达式];

数组名即为变量名,定义数组时须指定元素的个数,即方括号中的数,即为数组长度,注意数组长度和数组元素的表示,a[10]表示数组有十个元素,储存形式为:

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 特别注意没有a[10]。常量表达式中可以包括常量和符号常量,例如“a[3+5]”,如果是在被调用的函数中定义数组,其长度可以是变量或变量表达式,例如:

void func(int n)

{ int a[2*n]; //n的值从实参传来

......}

一维数组的初始化:为了使程序简洁,,常在定义数组的同时,给各数组元素赋值,这称为数组的初始化。将数组各元素的初值顺序放在一对花括号内,数据间用逗号隔开。例如:int a[10]={0,1,2,3,4,5,6,7,8,9}; 则a[0]=0,a[1]=1,a[2]=2......a[8]=8,a[9]=9。也可以给数组的一部分赋值,例如:a[10]={1,2,3,4,5};则只给前五个赋初值,剩下的系统自动给后面元素赋值为0。在对全部数组元素赋初值时,由于数据的个数已确定,因此可以不指定数组长度。例如:int a[]={1,2,3,4,5};

二维数组:

我们都学过平面坐标,利用平面上两个垂直的坐标轴,用到两坐标轴的距离来确定平面的位置。二维数组也是这个原理,二维数组常称为矩阵。把二维数组写成行和列的排列形式。

定义二维数组:类型说明符数组名[常量表达式(行)][常量表达式(列)] 例如:int a[3][4]

a[0][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3]

a[2][0] a[2][1] a[2][2] a[2][3]

二维数组的初始化:分行赋值,可以将所有数据写在一个大括号中,系统会自动按顺序赋值。也可对部分元素赋值。其实与一维数组类似,只要以一维数组类推便可得出,由于单片机中对二维数组运用较少,便不做具体讲述。

字符型数组:用来存放字符串,定义类型为char型。规定以“\0”

为结束符,在此先不做详解。

【实验过程】针对单片机的编程

#include"reg51.h"

main()

{ int i , x , y , a[2]={0x00;0xff}; //定义变量与整型数组含两个元素for(i=0;i<2;i++)//由于中括号内为变量利用for循环语句给P1口变换赋值使灯变灭变换

{ P1=a[i]; //数组的引用

for(x=0;x<200;x++)

for(y=0;y<200;y++); //利用for语句的延时

}

}

思考:数组就是一个数据源,我们不断的从中取出值来利用,如果数据源是能够让二极管单个闪亮的数据,那么我们将这些数据按一定规律引用,那么就能做出流水灯的效果。

#include"reg51.h"

main()

{ int i , x , y,a[8]={0xfe,oxfd,oxfb,oxf7,oxef,oxdf,oxbf,ox7f};//此初始化数值分别让灯从上至下一个个闪亮

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

{ P1=a[i]; //数组的引用

for(x=0;x<200;x++)

for(y=0;y<200;y++);

}

}

思考:用数组跟前面用位移动做流水灯相似,但用数组还能达到更大的功能,让灯更多样式的闪亮。

#include"reg51.h"

main()

{int i,x,y,a[10]={0x7e,0x3c,0x99,0xc3,0xe7,0xc3,0x99,0x3c,0x7e,0xff}; for(i=0;i<10;i++)

{ P1=a[i];

for(x=0;x<500;x++)

for(y=0;y<200;y++);

}

}

此程序可以实现从上至下,从下至上以两个灯共同闪亮的流动,我们可以发挥自己的想像力,创造更多的闪亮方式。

【实验扩展】

1.思考:如果我们把七个二极管做成长形的,摆放成“”的形状并根据各二极管与单片机接口的顺序编排出让其显示从0到9所对应的十六进制数,并对一定义的数组初始化,我们就做出了“数码管”此想法在第二次实验中就已提到。

根据上图中二极管的连接顺序我们可以编排出让其显示0到9数字对应的十六进制数分别为:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f。由此我们可进行如下编程:

#include"reg51.h"

void delay(); //对delay函数的声明

main()

{int i ; //定义一循环变量

int a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//用编排出的数对数组初始化

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

{P1=a[i];//利用for循环给P1口赋值

delay();//对延时函数的调用

}

}

相关文档
最新文档