(八)任务拓展
1.结构体数组
一个结构体类型变量可以存放一组相关的数据,如果需要多个同类型的数据,可以应用数组。如果一个数组的各元素都是同一种结构体类型的结构体变量,则称为结构体数组。
小贴士
结构体数组与项目六介绍的数值型数组的区别:结构体数组的每个元素都是一个结构体类型的数据。
定义结构体数组的一般形式如下。
① struct结构体名:
② 先设计一个结构体类型(如struct Mode),然后用此类型定义结构体数组:
任务描述:通过设计结构体类型、定义结构体类型变量、初始化与引用,实现控制LED、数码管和蜂鸣器状态的切换。
① 数码管显示0~9。
② 点亮相应数量的LED灯,数码管显示9时,LED全亮。
③ 数码管显示偶数,蜂鸣器叫;数码管显示奇数,蜂鸣器不叫。
在本任务的基础上,编写C语言程序。实现任务的编程过程,重点包括:
创建结构体:
定义结构体数组:
完整代码如下:
其余操作为:编译程序;配置工程属性,生成HEX文件;写入单片机;验证功能,成果展示。
2. 类型定义符typedef
绰号,是另一种称呼。给熟悉的朋友起绰号,则叫他的绰号和叫他本人的名字,可起到相同的效果。在C语言中,可以用typedef为某个数据类型起一个绰号,即别名。
注意:typedef是给数据类型起绰号的,用于声明新类型名。
例如:用typedef为int起别名为INTEGER:
最后的分号必不可少。
定义整型变量时,int a,b;与INTEGER a,b;是完全等效的。
用typedef为结构体类型起别名能够给编程带来方便。例如:
则Mod是struct Mode类型的别名,以后可以用Mod来直接定义结构变量、结构体数组等。
注意,不能写成struct Mod mode1,mode2;,因为Mod已经代表了struct Mode,不能再在前面添加struct。
对typedef的准确理解应该是:用与定义变量相同的方式来定义别名(前面加typedef),这里的“变量名”就是类型的名字。
也就是按照定义变量的方式,把变量名换上新类型名,并且在最前面加typedef,这样就声明了新类型名代表原来的类型。
练一练:
可以将任务拓展中的程序修改为:
其余操作为:编译程序;配置工程属性,生成HEX文件;写入单片机;验证功能,成果展示。