内容正文:
任务三 单片机控制LED个性化流水彩灯
单片机技术及应用
同步精品课堂
高等教育出版社第 4 版
1
理解数组(一维、二维)的定义、引用及相关注意事项。
掌握使用数组实现 LED 个性化流水彩灯的编程思路
学会绘制个性化流水灯的程序流程图
能够编写、编译控制 LED 个性化流水的程序代码
数组的定义、引用和赋值方法
利用数组实现 LED 个性化流水的编程思路
理解数组在存储和控制流水花样数据中的应用
根据编程思路准确编写程序代码
在之前的学习中,我们掌握了单片机控制 LED 单向流水彩灯的方法。现在,我们要制作一个更具特色的个性化流水彩灯,它能按照我们在单片机程序中指定的流水花样顺序显示。
为了实现这个目标,我们需要学习数组的相关知识,让我们一起开启新的学习之旅吧。
任务三 单片机控制LED个性化流水彩灯-知识准备
所谓数组,就是指具有相同数据类型的变量集,并拥有共同的名字。数组中的每个特定元素都使用下标来访问。数组由一段连续的存储地址构成,最低的地址对应第一个数组元素,最高的地址对应最后一个数组元素。
数组概述
数组按照维数可分为一维、二维、三维和多维数组,常用的是一维和二维数组;
任务三 单片机控制LED个性化流水彩灯-知识准备
标识符:数组的名称
数组元素:数组中存放的数据
元素下标:对数组元素进行编号,数组下标从0开始,数组中的每个元素都可以通过下标来访问
元素类型:数组元素的数据类型
数组基本要素
任务三 单片机控制LED个性化流水彩灯-知识准备
表达形式如下: 数据类型 数组名[常量表达式];
一维数组(定义与示例)
方括号中的常量表达式称为数组的下标。C 语言中,下标是从 0 开始的。例如:
unsigned int a[3];
这里定义了一个无符号的整型数组 a,它有 a [0] ~ a [2] 共 3 个数组元素,每个元素均为无符号整型变量。
任务三 单片机控制LED个性化流水彩灯-知识准备
一维数组(注意事项)
① 数组名与变量名一样,必须遵循标识符命名规则,数组名不能与其他变量名相同。
② 数据类型是指数组元素的数据类型,所有元素的数据类型都是相同的。
③ 常量表达式必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。
任务三 单片机控制LED个性化流水彩灯-知识准备
表达形式如下: 数据类型 数组名[常量表达式1][常量表达式2];
二维数组(定义与示例)
unsigned int a[2][3];
例如:
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
该数组中第一下标表示行,第二下标表示列,因此它是一个 2 行 3 列的数组,各数组元素的排列如下:
任务三 单片机控制LED个性化流水彩灯-知识准备
① 按存储顺序整体赋值
二维数组(赋值方法)
unsigned int a[2][3] = {0, 1, 2, 3, 4, 5};
例如:
unsigned int a[2][3] = {{0, 1, 2}, {3, 4, 5}};
② 按行分段赋值,这种方法更加直观
例如:
任务三 单片机控制LED个性化流水彩灯-知识准备
用来存放字符的数组,每一个数组元素就是一个字符。与整型数组一样,字符型数组也可以在定义时进行初始化赋值。例如:
字符型数组(定义与初始化)
char c[5] = {'H', 'e', 'l', 'l', 'o'};
char c[] = {'H', 'e', 'l', 'l', 'o'};
该语句定义了一个字符型数组,它共有 5 个元素,每个元素均为字符型变量。当对全体数组元素赋值时,也可以省略数组长度说明,例如:
这时数组长度将自动定义为 5。
任务三 单片机控制LED个性化流水彩灯-知识准备
若要在数组中存放一个字符串,可采用如下两种方法:
字符型数组(存放字符串)
char c[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char c[] = "Hello";
或者写成更简洁的形式:
数组允许随机访问数组元素,每个存储在数组中的元素可以通过直接访问其索引来使用
数组对存储友好。这意味着在某些情况下,由于数组的线性存储方式,代码的执行顺序会大大提高
相比其它类型的数据结构,数组有以下优点:
任务三 单片机控制LED个性化流水彩灯
工具及材料准备:
工作准备:
制作一个个个性化的流水彩灯,能够按照单片机程序中指定的流水花样顺序显示。
任务需求
① 软件:Proteus 7.4、Keil uVision2、EasyPRO Programmer、流程图绘制软件。
② 硬件:编程器1台、计算机1台、最小系统电路板1块、LED 光控电路板1块、杜邦线1套、电池盒1个。
穿好工作服,戴好防静电手环,穿绝缘胶鞋。
清洁工作台面,清理工作区域,工具、仪器仪表摆放整齐有序。
任务三 单片机控制LED个性化流水彩灯——任务实施
创建一个 ROM 数组,将要显示的流水闪烁的花样数据存储在该数组中,使用时从该数组中将数据依次取出,由 P1 口输出控制 8 个发光二极管 LED1 ~ LED8 按照某一规律闪烁,直到数组中的数据全部取出,然后再重复上述过程使 LED 灯继续流水闪烁。用延时函数控制流水灯的流水速度。
编程——编程思路
任务三 单片机控制LED个性化流水彩灯——任务实施
编程 - 绘制流程图(启动与设置、拖取与调整)
①启动流程图绘图软件 Diagram Designer,设置图纸大小为 A4。
②从右侧的标准框图符号库中拖取所需的框图符号,调整其大小和位置。
任务三 单片机控制LED个性化流水彩灯——任务实施
编程 - 绘制流程图(输入内容、连接符号、保存)
③ 在流程图符号框中输入内容,添加说明文字,
④ 使用工具栏中的指向线连接各框图符号。
⑤ 保存该程序流程图(文件名为 “个性化流水灯.DDD”)。
任务三 单片机控制LED个性化流水彩灯——任务实施
编程(创建工程与源文件)
① 启动 Keil uVision2,新建一个工程文件 “个性化流水灯.uV2”。
② 新建一个 C51 源程序文件“个性化流水灯.C”,编写如下的 C 源程序代码。
//个性化流水灯,文件名:个性化流水灯.c
#include <reg51.H>
#define uchar unsigned char
uchar code table[] = {
0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f,
0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f,
0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe,
0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe,
0x00, 0xff, 0x00, 0xff,0x01};
uchar i;
void delay(uchar ms);
任务三 单片机控制LED个性化流水彩灯——任务实施
编程(创建工程与源文件)
② 新建一个 C51 源程序文件“个性化流水灯.C”,编写如下的 C 源程序代码。
void delay(uchar ms) {
uchar i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 125; j++);}
void main(void) {
while (1) {
if (table[i] != 0x01) {
P1 = table[i];
i++;
delay(200);
} else {
i = 0;
}
}}
任务三 单片机控制LED个性化流水彩灯——拓展内容
多维数组应用
尝试使用三维或多维数组来存储更复杂的流水花样数据,实现更加丰富多样的流水效果。
实时修改流水花样
思考如何通过外部输入(如按键)来实时修改数组中的流水花样数据,增加流水灯的交互性。
随堂检测1
请简述数组的定义和特点。
答案:数组是具有相同数据类型的变量集,有共同的名字,
通过下标访问元素,由一段连续的存储地址构成。
一维数组定义时,常量表达式有什么要求?
答案:常量表达式必须用方括号括起来,指的是数组的元素个数,是一个整型值,可以包含常数和符号常量,但不能包含变量。
随堂检测2
二维数组赋值有哪两种方法?
答案:按存储顺序整体赋值和按行分段赋值。
在绘制个性化流水灯程序流程图时,第一步是什么?
答案:启动流程图绘图软件 Diagram Designer,设置图纸大小为 A4。
随堂检测3
说明一维数组和二维数组的区别。
答案:一维数组是具有一个下标的数组,其表达形式中,方括号中的常量表达式为数组下标,C 语言中数组下标从 0 开始,例如定义一个无符号整型数组 a,有 a [0]~a [n](n 为数组长度减 1)个元素。而二维数组有两个下标,格式中第一下标表示行,第二下标表示列,其赋值可以采用按存储顺序整体赋值和按行分段赋值两种方法,例如定义一个 2 行 3 列的数组,有 a [0][0]~a [1][2] 等元素。
1
分组讨论,讨论如何设计更多独特的流水花样数据存入数组。分析数组在存储大量流水花样数据时可能遇到的问题及解决办法。
1. 知识准备
任务三 单片机控制LED个性化流水彩灯
2. 工具与材料准备
编程思路
启动与设置
拖取与调整
输入文本
连接与保存
数组概述
一维数组
二维数组
字符型数组
3. 绘制程序流程图
感谢观看
25
$$