24
项项项 LED LED 项项项项项项项 项项项项项项项 项项项项 项项项项 LED LED 项项项项 项项项项 项项 项项 5 5

项目三 LED 流水灯设计制作

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: 项目三  LED 流水灯设计制作

项目三 LEDLED 流水灯设计制作流水灯设计制作

任意花样任意花样 LEDLED 闪烁控制闪烁控制任务任务 55

Page 2: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

任务要求:任务要求: 在广告彩灯控制和舞台灯光控制等领域,需要小

灯具有间隔点亮、轮流点亮、逐点点亮等花样。此时控制数据没有任何规律,本任务将利用数组解决任意花样 LED 闪烁控制问题。

Page 3: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

一、数组一、数组1 、数组是一个由若干同类型变量组成的集合。2 、数组分类一维数组 如 a[5]

二维数组 a[2][4]

三维数组 a[3][4][5]

注意:注意:数组必须先定义后使用。

Page 4: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

3 、一维数组的定义形式:类型说明符 数组名 [ 整型表达式 ] ;例:int a[5];

声明了一个整型数组。该数组名为 a ,包含 5 个元素,依

次为 a[0] 、 a[1] 、 a[2] 、 a[3] 、 a[4] ,其中每个元

素都相当于一个整型变量。注意:数组元素的位置编号即索引是从 0 开始的。

Page 5: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

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 。

Page 6: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

( 4 )可以在定义时不指明数组元素的个数,而根据赋值部分由编译器自动确定。

例: unsigned char

BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB};

定义了一个 BitTab[6] 这样一个数组。

Page 7: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

( 5 )可以为数组指定存储空间,如果未指定空间时,则将数组定义在内部 RAM 中。

可以用 code 关键字将数组元素定义在 ROM 空间中,用于程序运行过程中元素数值不改变的场合。

例: char code

ledsegcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

Page 8: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

( 6 )只有在初始化时,可以为数组的各个元素同时赋值,否则在程序的其他地方一次只能为数组的某一个元素赋值。

例: i=a[2];// 将数组元素 a[2] 的值赋给变量 i 。

Page 9: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

( 7 )由于数组中的每一个元素是由顺序的编号来标识的,所以可以利用循环来访问和处理数组的每一个元素。

例:为数组 a 的 10 个元素分别赋值 1-10 。 for(i=0;i<10;i++)

a[i]=i+1;

Page 10: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

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

Page 11: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制 #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); } } }

Page 12: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

二、指针与指针变量二、指针与指针变量int a=1,b=2;

char c=0xff;

一个地址唯一指向一个内存变量,这个地址称为变量的指针。

如果将变量的地址保存在内存的特定区域,用变量来存放这些地址,这样的变量就是指针变量。

Page 13: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

1 、指针变量的定义

例 1 :

int *ptr1;

指针变量 ptr1 指向一个整型变量。即 ptr1 可以存放整型变量的地址。

例 2 :

char * ptr1;

指针变量 ptr1 指向一个字符型变量。即 ptr1 可以存放字符型变量的地址。

Page 14: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

2 、指针变量的引用

* 指针变量

含义:指针变量所指向的值。

Page 15: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

3 、指针运算符与指针表达式& 运算符:取地址运算符, &m 即是变量 m 的地址。

Page 16: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

练习: 执行下面程序段后, ab 的值为 ( ) 。 int *var,ab; ab=100;var=&ab; ab=*var+10;

Page 17: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

4 、指针与数组变量存放于内存中时是有地址的,数组在内存存放时也同样具有地址。对数组来说,数组名的值就是数组在内存安放的首地址。指针变量是用于存放变量的地址,可以指向变量,也可以存放数组的首地址或数组元素的地址,也就是说,指针变量可以指向数组或数组元素,对数组而言,数组和数组元素的引用,也同样可以使用指针变量。

Page 18: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

( 1 )指针与一维数组例: int a[10],*ptr; ptr=a;或: ptr=&a[0];

Page 19: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

指针对数组的表示方法:( 1 ) ptr+n 与 a+n 表示数组元素 a[n] 的地址,即 &a[n] 。( 2 ) *(ptr+n) 和 * ( a+n) 表示数组的元素,即a[n] 。( 3 )指向数组的指针变量也可以用数组的下标形式表示 ptr[n] ,即 * ( ptr+n )。

Page 20: 项目三  LED 流水灯设计制作

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制 #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); }

} }

Page 21: 项目三  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);

} }

}

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

Page 22: 项目三  LED 流水灯设计制作

函数的首地址也可以存储在某个函数指针变量里。这样,就可以通过这个函数指针变量来调用所指向的函数了。声明一个可以指向某个函数的函数指针变量 pdelay 的方法: void ( *pdelay )( unsigned int t ) ;

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

Page 23: 项目三  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); } } }

任务任务 5 5 任意花样任意花样 LEDLED 闪烁控制闪烁控制

Page 24: 项目三  LED 流水灯设计制作