一、变量的作用域
作用域:变量的有效范围。分为:局部变量和全局变量。
1.1局部变量
在函数内部声明的变量,只在本函数内部可以使用。
1.2全局变量
在函数外声明的变量就是全局变量。
二、变量的存储类别
变量的存储类别分为自动、静态、寄存器和外部四种。
局部变量如果不加static修饰都属于自动变量。关键词为auto,可以省略。
全局变量均为静态变量。
局部变量加 static 关键字也为静态局部变量。特点是,只赋一次初值,在之后使用中,可以保存前次的执行结果。
eg: static unsigned char i=0;
i 为静态局部变量,初始化 i=0 只执行一次。
三、点阵的初步认识
8*8点阵由64个LED小灯组成。通过控制行和列的电平来控制灯的亮灭。
点阵可以用来显示图形,需要用取模软件将点阵显示的图形数字化,将需要显示的的地方(亮)设置为0,将不显示的地方(暗)设置为1,这是因为译码器输出为低电平,此时一个格子为一位二进制数字,每一行为一个字节,例如0xff(全黑),0x00全亮从而达到显示图像的目的。
3.1点阵的纵向移动
横向移动时每一张图片都是和下一行连续的。
switch(i)
{
case 0:ADDR2=0;ADDR1=0;ADDR0=0;P0=LedChar[index+0];i++;break;
case 1:ADDR2=0;ADDR1=0;ADDR0=1;P0=LedChar[index+1];i++;break;
case 2:ADDR2=0;ADDR1=1;ADDR0=0;P0=LedChar[index+2];i++;break;
case 3:ADDR2=0;ADDR1=1;ADDR0=1;P0=LedChar[index+3];i++;break;
case 4:ADDR2=1;ADDR1=0;ADDR0=0;P0=LedChar[index+4];i++;break;
case 5:ADDR2=1;ADDR1=0;ADDR0=1;P0=LedChar[index+5];i++;break;
case 6:ADDR2=1;ADDR1=1;ADDR0=0;P0=LedChar[index+6];i++;break;
case 7:ADDR2=1;ADDR1=1;ADDR0=1;P0=LedChar[index+7];i=0;break;
default:break;
}
LedChar里储存的是整幅图片的每个字节(每一行),用 index 代表每张图片的起始位置,每次从index起始向下数8行代表了当前的图片。每隔一段时间后,改变一张图片通过index++实现,则可实现不停地动态刷新,这样就形成了动画。当index代表最后一张图片时,对index清零。
3.2点阵的横向移动
方法1:把板子侧过来放,纵向取模就可以完成。
方法2:利用二维数组来实现,算法基本上和上下移动相同。
3.2.1二维数组初始化
二维数组的初始化分为两种情况 :
(1)数组元素的数量小于数组元素个数,没有赋值的会自动给0;
unsigned char a[2][3]={{1,2}{3,4}};
等价于 unsigned char[2][3]={1,2,0,3,4,0};
(2)数组元素等于数组个数时如下:
unsigned char a[2][3] ={{1,2,3},{4,5,6}};
等价于 unsigned char a[2][3]={1,2,3,4,5,6};
二维数组初始化时行数可以省略,编译系统会自动根据列数计算出行数,但是列数不能省略。
3.2.2二维数组实现点阵横向移动
横向移动时图片切换时的字模数据不是连续的。需要对每一帧的图像进行字模转换。
switch(i)
{
case 0:ADDR2=0;ADDR1=0;ADDR0=0;P0=image[index][0];i++;break;
case 1:ADDR2=0;ADDR1=0;ADDR0=1;P0=image[index][1];i++;break;
case 2:ADDR2=0;ADDR1=1;ADDR0=0;P0=image[index][2];i++;break;
case 3:ADDR2=0;ADDR1=1;ADDR0=1;P0=image[index][3];i++;break;
case 4:ADDR2=1;ADDR1=0;ADDR0=0;P0=image[index][4];i++;break;
case 5:ADDR2=1;ADDR1=0;ADDR0=1;P0=image[index][5];i++;break;
case 6:ADDR2=1;ADDR1=1;ADDR0=0;P0=image[index][6];i++;break;
case 7:ADDR2=1;ADDR1=1;ADDR0=1;P0=image[index][7];i=0;break;
default:break;
}
image里储存的是每一帧的8个字节ndex代表当前帧数,0~7代表点阵的每一行。