1 / 24

项目三 LED 流水灯设计制作

任务 5. 任意花样 LED 闪烁控制. 项目三 LED 流水灯设计制作. 任务 5 任意花样 LED 闪烁控制. 任务要求: 在广告彩灯控制和舞台灯光控制等领域,需要小灯具有间隔点亮、轮流点亮、逐点点亮等花样。此时控制数据没有任何规律,本任务将利用数组解决任意花样 LED 闪烁控制问题。. 任务 5 任意花样 LED 闪烁控制. 一、数组 1 、数组是一个由若干同类型变量组成的集合。 2 、数组分类 一维数组 如 a[5] 二维数组 a[2][4] 三维数组 a[3][4][5] 注意: 数组必须先定义后使用。.

Télécharger la présentation

项目三 LED 流水灯设计制作

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 任务5 任意花样LED闪烁控制 项目三 LED流水灯设计制作

  2. 任务5 任意花样LED闪烁控制 任务要求: 在广告彩灯控制和舞台灯光控制等领域,需要小灯具有间隔点亮、轮流点亮、逐点点亮等花样。此时控制数据没有任何规律,本任务将利用数组解决任意花样LED闪烁控制问题。

  3. 任务5 任意花样LED闪烁控制 一、数组 1、数组是一个由若干同类型变量组成的集合。 2、数组分类 一维数组 如a[5] 二维数组a[2][4] 三维数组a[3][4][5] 注意:数组必须先定义后使用。

  4. 任务5 任意花样LED闪烁控制 3、一维数组的定义 形式:类型说明符 数组名[整型表达式]; 例: int a[5]; 声明了一个整型数组。该数组名为a,包含5个元素,依 次为a[0]、a[1]、 a[2]、 a[3]、 a[4],其中每个元 素都相当于一个整型变量。 注意:数组元素的位置编号即索引是从0开始的。

  5. 任务5 任意花样LED闪烁控制 4、一维数组的赋值 (1)在定义数组时对数组的全部元素赋予初值。 例:int a[5]={1,2,3,4,5}; (2)只对数组的部分元素初始化。 例:int a[5]={1,2}; 说明:只对前面两个赋初值,因此a[0]和a[1]的值是1、 2,而后面三个元素的值全部是默认的0。 (3)在定义数组时对数组元素的全部元素都不赋初值, 则数组元素的值均被初始化为0。

  6. 任务5 任意花样LED闪烁控制 (4)可以在定义时不指明数组元素的个数,而根据赋值部分由编译器自动确定。 例: unsigned char BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB}; 定义了一个BitTab[6]这样一个数组。

  7. 任务5 任意花样LED闪烁控制 (5)可以为数组指定存储空间,如果未指定空间时,则将数组定义在内部RAM中。 可以用code关键字将数组元素定义在ROM空间中,用于程序运行过程中元素数值不改变的场合。 例: char code ledsegcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

  8. 任务5 任意花样LED闪烁控制 (6)只有在初始化时,可以为数组的各个元素同时赋值,否则在程序的其他地方一次只能为数组的某一个元素赋值。 例: i=a[2];//将数组元素a[2]的值赋给变量i。

  9. 任务5 任意花样LED闪烁控制 (7)由于数组中的每一个元素是由顺序的编号来标识的,所以可以利用循环来访问和处理数组的每一个元素。 例:为数组a的10个元素分别赋值1-10。 for(i=0;i<10;i++) a[i]=i+1;

  10. 任务5 任意花样LED闪烁控制 注意:C 语言并不对越界使用数组进行检测,例如数组的长度是6,其元素应该是从BitTab[0]~ BitTab[5],但是如果在程序中写上BitTab[6],编译器并不会认为这有语法错误,也不会给出警告,这一点应引起编程者的注意。

  11. 任务5 任意花样LED闪烁控制 • #include "reg51.h" • unsigned char code Tab[ ]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xFF,0xAA}; • void delay(unsigned int t) • { unsigned int i,j; • for(i=t;i>0;i--) • for(j=110;j>0;j--); } • void main(void) • { • unsigned char i; • while(1) • { • for(i=0;i<10;i++) • { P1=Tab[i]; • delay(500); } • } • }

  12. 任务5 任意花样LED闪烁控制 二、指针与指针变量 int a=1,b=2; char c=0xff; 一个地址唯一指向一个内存变量,这个地址称为变量的指针。 如果将变量的地址保存在内存的特定区域,用变量来存放这些地址,这样的变量就是指针变量。

  13. 任务5 任意花样LED闪烁控制 1、指针变量的定义 例1: int *ptr1; 指针变量ptr1指向一个整型变量。即ptr1可以存放整型变量的地址。 例2: char * ptr1; 指针变量ptr1指向一个字符型变量。即ptr1可以存放字符型变量的地址。

  14. 任务5 任意花样LED闪烁控制 2、指针变量的引用 *指针变量 含义:指针变量所指向的值。

  15. 任务5 任意花样LED闪烁控制 3、指针运算符与指针表达式 &运算符:取地址运算符,&m即是变量m的地址。

  16. 任务5 任意花样LED闪烁控制 练习: 执行下面程序段后,ab的值为( )。 int *var,ab; ab=100;var=&ab; ab=*var+10;

  17. 任务5 任意花样LED闪烁控制 4、指针与数组 变量存放于内存中时是有地址的,数组在内存存放时也同样具有地址。对数组来说,数组名的值就是数组在内存安放的首地址。指针变量是用于存放变量的地址,可以指向变量,也可以存放数组的首地址或数组元素的地址,也就是说,指针变量可以指向数组或数组元素,对数组而言,数组和数组元素的引用,也同样可以使用指针变量。

  18. 任务5 任意花样LED闪烁控制 (1)指针与一维数组 例:int a[10],*ptr; ptr=a; 或:ptr=&a[0];

  19. 任务5 任意花样LED闪烁控制 指针对数组的表示方法: (1)ptr+n与a+n表示数组元素a[n]的地址,即&a[n]。 (2)*(ptr+n)和*(a+n)表示数组的元素,即a[n]。 (3)指向数组的指针变量也可以用数组的下标形式表示ptr[n],即*(ptr+n)。

  20. 任务5 任意花样LED闪烁控制 #include "reg51.h" unsigned char code Tab[ ]={……}; void delay(unsigned int t) { unsigned int i,j; for(i=t;i>0;i--) for(j=110;j>0;j--); } void main(void) { unsigned char i; while(1) { for(i=0;i<40;i++) { P1=*(Tab+i); delay(500); } } }

  21. 任务5 任意花样LED闪烁控制 #include "reg51.h" unsigned char code Tab[ ]={……}; void delay(unsigned int t) { unsigned int i,j; for(i=t;i>0;i--) for(j=110;j>0;j--); } void main(void) { unsigned char i,*ptab; ptab=Tab; while(1) { for(i=0;i<40;i++) { P1=*(ptab+i); delay(500); } } }

  22. 任务5 任意花样LED闪烁控制 函数的首地址也可以存储在某个函数指针变量里。这样,就可以通过这个函数指针变量来调用所指向的函数了。 声明一个可以指向某个函数的函数指针变量pdelay的方法: void (*pdelay)(unsigned int t);

  23. 任务5 任意花样LED闪烁控制 #include "reg51.h" unsigned char code Tab[ ]={……}; void delay(unsigned int t) { unsigned int i,j; for(i=t;i>0;i--) for(j=110;j>0;j--); } void main(void) { unsigned char i,*ptab; void (*pdelay)(unsigned int t); pdelay=&delay; while(1) { ptab=Tab; for(i=0;i<40;i++) { P1=*ptab; ptab++; (*pdelay)(500);} } }

  24. Thank You !

More Related