单片机课件15章.ppt
- 格式:ppt
- 大小:504.55 KB
- 文档页数:131
的片内RAM 很有限,通常会把RAM 分给参与运算的变量或数组,而那些程序中不变数据则应存放在片内的CODE 存储区,以节省宝贵的RAM。
赋初值的方式如下:数据类型[存储器类型] 数组名[常量表达式] = {常量表达式};数据类型[ 存储器类型] 数组名[ 常量表达式1]...... [ 常量表达式N]={{ 常量表达式}...{常量表达式N}};在定义并为数组赋初值时,开始学习的朋友一般会搞错初值个数和数组长度的关系,而致使编译出错。
初值个数必须小于或等于数组长度,不指定数组长度则会在编译时由实际的初值个数自动设置。
unsigned char LEDNUM[2]={12,35}; //一维数组赋初值int Key[2][3]={{1,2,4},{2,2,1}}; //二维数组赋初值unsigned char IOStr[]={3,5,2,5,3}; //没有指定数组长度,编译器自动设置unsigned char code skydata[]={0x02,0x34,0x22,0x32,0x21,0x12}; //数据保存在code 区下面的一个简单例子是对数组中的数据进行排序,使用的是冒泡法,一来了解数组的使用,二来掌握基本的排序算法。
冒泡排序算法是一种基本的排序算法,它每次顺序取数组中的两个数,并按需要按其大小排列,在下一次循环中则取下一次的一个数和数组中下一个数进行排序,直到数组中的数据全部排序完成。
#include#includevoid taxisfun (int taxis2[]){unsigned char TempCycA,TempCycB,Temp;for (TempCycA=0; TempCycA<=8; TempCycA++)for (TempCycB=0; TempCycB<=8-TempCycA; TempCycB++){//TempCycB<8-TempCycA 比用TempCycB<=8 少用很多循环if (taxis2[TempCycB+1]>taxis2[TempCycB]) //当后一个数大于前一个数{Temp = taxis2[TempCycB]; //前后2 数交换taxis2[TempCycB] = taxis2[TempCycB+1];taxis2[TempCycB+1] = Temp; //因函数参数是数组名调用形参的变动影响实参}}}void main(void){int taxis[] = {113,5,22,12,32,233,1,21,129,3};char Text1[] = {"source data:"}; //"源数据"char Text2[] = {"sorted data:"}; //"排序后数据"unsigned char TempCyc;SCON = 0x50; //串行口方式1,允许接收TMOD = 0x20; //定时器1 定时方式2TCON = 0x40; //设定时器1 开始计数TH1 = 0xE8; //11.0592MHz 1200 波特率TL1 = 0xE8; TI = 1;TR1 = 1; //启动定时器printf("%s\n",Text1); //字符数组的整体引用for (TempCyc=0; TempCyc<10; TempCyc++)printf("%d ",taxis[TempCyc]);printf("\n----------\n");taxisfun (taxis); //以实际参数数组名taxis 做参数被函数调用printf("%s\n",Text2);for (TempCyc=0; TempCyc<10; TempCyc++) //调用后taxis 会被改变printf("%d ",taxis[TempCyc]);while(1);}例子中能看出,数组同样能作为函数的参数进行传递。