|

楼主 |
发表于 2011-5-2 15:05:26
|
显示全部楼层
数组的应用
数组
程序中数组是是非有用的,所谓数组,就是在内存中一块连续的存储单元,数据存在于这些单元中。和变量一样,要使用数组,首先得声明,建立一个数组,例如:
unsigned char Disp[];
就声明了一个数组,它的名称是Disp,它的类型是无符号字符型,大的大小:存储单元的多少没说,但是每个单元只能存进无符号字符数,也就是每个单元只能存放1个字节的数据;如果
unsigned char Dsp1[11];
则声明了另一个无符号字符型数组,Dsp1,它具有11个存储单元也称为“元素”,这些元素分别编号为
0,1,2,3,4,5,6,7,8,9,10.这些编号称为数组元素的“下标”那么在声明了这个数组以后,就可以给它的各个元素存入数据:例如
Dsp1[0]=0x25;
Dsp1[10]=9;
要注意现在是给他的0号元素和10号元素赋值,它的元素下标最大就是10:从0到10共有11个元素!
还可以在声明数组时就一次性给它的各个元素赋初值,例如:
unsigned char Dsp1[11]={0x01,0x03,0x04,0x02,0x10,0x23,0x30,0x35,0x55,0x66,0xa3};11个元素都写满了数,注意,一旦声明数组时赋以初值后,程序中就再也不能用这种形式一次性给多个元素赋值,只能用Dsp1[4]这样的形式分别给它各个元素赋值。数组每个元素大小都是相同的,当然不能在单字节元素中存放具有两个字节的整型数,整型数得使用整型数组存放例如
unsigned int Zuli[3];则Zuli[0]=0x1022;Zuli[1]=0x324a;Zuli[2]=0xfafe;都是正确的,再来一个Zuli[3]=0x2133;就错了,因为已经超出了数组声明的下标范围0,1,2。
还要注意一点,数组的元素下标排列从左到右是0,1,2...到最大,和数据以及单片机的P口线排列:从左到右是最高位到最低位排列顺序正好相反。
在数字钟程序里数组的使用:
为了在8个数码管上显示时间数据,最开始已经说过,是把待显示的某位数码管字段码送到P0口,然后打开该
位的控制线,显示这一位。然后P0口加上下一个字段码,打开下一位控制线。而显示的时分秒数据是变化的。
这样我们先建立一个具有8个单元-对应于8个数码管;显示缓存数组:
unsigned char DspBuff[8];它的各个单元存数是
DspBuff[0]=空白;
DspBuff[1]=时十位;
DspBuff[2]=时个位;
DspBuff[3]=负号;
DspBuff[4]=分十位;
DspBuff[5]=分个位;
DspBuff[6]=秒十位;
DspBuff[7]=秒个位;
现在要显示这些数字、符号,还得把它们转换为对应的字段码;为此我们建立一个显示码数组
unsigned char DspCode[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};从0号到9号元素存放的是0到9的数码管显示字段码,最后一个是负号的字段码,那么要显示就按照数码管位置逐个取出
DspBuff的数据,以这个数据为数组下标去查找DspCodeai在这个下标元素的数据:相应的显示码。如下图所示。
宏定义
C程序前面往往有一行或数行“宏定义”:这只是用一些字符代替另一些字符形式为:
#define uchar unsigned char
#define uint unsigned int
就是说以后用uchar 代表 unsigned char 用uint 代表 unsigned int简化打字。注意和前面的包含#include头文件一样最后都不能有分号。他还可以定义出代替数个语句的宏,起到函数的效用,例如
#define KEY1DO { if(!KEY1) Delay(10); if(!KEY1) KEY1();}
就是用KEY1DO代替后面大括号里的几个语句。
51C的程序架构也就是格式一般如下:
1,包含文件和宏定义
#include "REG51"
#define uchar unsigned char
#define uint unsigned int
2,全局变量声明或定义:全局变量是在函数以外定义的变量,可供以后多个函数使用,一旦声明为全局变量,函数内部就不能再用同样的变量名重新声明为函数内专用的局部变量
3,函数声明或定义
4,主函数
5,中断函数定义
也可以把所有函数声明放在主函数之前,在主函数后面再一一加以定义。注意在函数定义时的排列顺序:如果某个函数A使用了另一个函数B,则本着先声明后使用的原则,函数B的定义要放在函数A定义前面。
注意:初学者写代码时千万不要加入汉字的逗号分号括号等,一定要全部是英文符号。 |
|