(学习笔记)手把手教你学51单片机:变量进阶与点阵LED
一、变量的作用域
作用域:变量的有效范围。分为:局部变量和全局变量。
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点阵的纵向移动
横向移动时每一张图片都是和下一行连续的。
[code] 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二维数组实现点阵横向移动
横向移动时图片切换时的字模数据不是连续的。需要对每一帧的图像进行字模转换。
[code] 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代表点阵的每一行。
阅读更多- 第七章 变量进阶和点阵LED
- 主题:javascript进阶之变量篇--转载http://www.javaeye.com/topic/19506
- javascript进阶之变量篇
- 1.Python进阶-Python变量与数据类型
- JavaScript 进阶(二)变量作用域
- 使用CANVAS绘制LED点阵时钟
- 7.4 LED点阵的图形显示
- LED点阵
- 单片机实验——8X8LED点阵显示技术(二)
- uart串口通信控制nxp lpc1114 点阵led显示彩色贪吃蛇源代码。
- JavaScript 进阶(二)变量作用域
- shell脚本基础进阶(二)----变量及运算符
- linux驱动开发--字符设备:通过cdd_cdev结构中的led变量区分是哪个节点,private_data使用
- Java进阶(四十)Java类、变量、方法修饰符讲解
- Activiti进阶(四)——流程变量的设置和获取
- C++进阶教程(含C++11)(1)变量与基本类型1
- P7 LED点阵模组 调试过程
- 8X8 LED点阵显示原理与编程技术(转)
- 7.5 LED点阵的纵向移动