收藏 分享(赏)

21天学会51单片机第9章.ppt

上传人:精品资料 文档编号:10904766 上传时间:2020-01-20 格式:PPT 页数:32 大小:232KB
下载 相关 举报
21天学会51单片机第9章.ppt_第1页
第1页 / 共32页
21天学会51单片机第9章.ppt_第2页
第2页 / 共32页
21天学会51单片机第9章.ppt_第3页
第3页 / 共32页
21天学会51单片机第9章.ppt_第4页
第4页 / 共32页
21天学会51单片机第9章.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、21天学51单片机开发,第九讲:C51的聚合类型,课程安排,联合类型 枚举类型 类型声明 位域,联合类型,联合类型也称为共用体,在不同时刻呈现不同的数据类型。 联合类型是将不同类型的变量组织成一个整体的数据类型。 这些不同类型的变量在单片机内存中占用同一段存储单元。 为了不互相影响,其在不同的时间保存不同的数据类型和不同长度的变量。,联合的定义,联合类型也是用户自定义的数据类型,其定义的方式如下:,union 联合名 数据类型 成员名; 数据类型 成员名; . ;,联合变量的声明,在定义了联合类型后,还需要使用该联合类型来声明联合变量。 联合变量的声明有3种方法: 先定义联合,再声明联合变量

2、定义联合时声明联合变量 直接声明联合变量,先定义联合,再声明联合变量,这种方法的一般形式如下: union 联合名 联合变量; 注意:如果联合变量中成员变量的大小不一致,则自动取其中最大的长度为整个联合变量的长度。,union char_int char ch; int i; ; union char_int a;,定义联合时声明联合变量,C51中,允许在定义联合的同时声明联合变量。 这种声明方法的一般形式如下:,union 联合名 数据类型 成员名; 数据类型 成员名; . 联合变量;,直接声明联合变量,直接声明联合变量的方法示例如下:,union int a ; char b; float

3、 c; Test;,注意:直接声明联合变量的方法不能再额外声明其他的联合变量。,联合变量成员的引用,联合体变量成员的引用使用“.”来实现。 例如,对于前面定义的Test,其成员引用为: Test.a Test.b Test.c 对联合体变量成员可以用于赋值和读取操作。 注意:不能同时引用三个成员,既在任意时刻,只能使用其中之一的成员。,联合变量数组,联合变量数组就是数组中的每一个元素均为联合类型。 当使用联合变量数组时,其成员的引用同样采用“.”。,01 #include /头文件 02 void main() /主函数 03 04 union TIO /定义联合 05 06 int a; 0

4、7 char b; 08 float c; 09 ; 10 union TIO un3; /声明联合数组变量 11 un0.a=10; /赋值 12 un1.b=3.7; 13 un2.c=A; 14 printf(“un0.a=%dn“,un0.a); /输出成员变量 15 printf(“un1.b=%cn“,un1.b); 16 printf(“un2.c=%fn“,un2.c); 17 ,联合变量指针,同结构变量类似,联合变量也可以定义为指针形式。 当联合变量定义为指针时,要用“-”符号来访问内部的成员: 联合名-成员名,01 #include /头文件 02 void main()

5、/主函数 03 04 int i=10; /定义并声明变量 05 float f=3.7; 06 char c=A; 07 union TIO /定义联合 08 09 int a; 10 char b; 11 float c; 12 ; 13 union TIO *un; /定义联合指针 14 un= 20 ,联合和结构的嵌套,联合和结构可以灵活自由地嵌套使用。 联合内的成员可以是结构,示例如下:,union ThreeInOne int a; char b; float c; struct int a;char b;float c; st; un;,结构体内的成员可以是联合 ,示例如下:,s

6、truct ThreeInOne int a; char b; float c; union int a;char b;float c; un; st;,结构和联合的区别,联合变量的成员占用同一个内存空间,而结构变量中的成员分别独占自己的内存空间,互相不干扰。 在任何同一时刻,结构的所有成员都存在,即结构变量的不同成员赋值是互不影响的。 而联合变量中只存放了一个被选中的成员。,枚举类型,现实生活中的某些事物的取值范围是有限的。 C51语言中提供了枚举类型来表示。 枚举类型主要用于将变量的取值限定在一个有限的范围内的场合。 枚举类型在定义中列举出所有可能的取值,被声明为该类型的变量取值不能超过定

7、义的范围。 采用枚举类型不但可以简洁明了地表示其取值,而且节省存储空间。,定义枚举类型,在C51语言中,定义枚举类型的一般形式如下: 注意:在枚举类型内部,每个枚举元素后的结束符是“,”,而不是“;”,并且最后一个元素后的结束符可以省略不写。,enum 枚举名 标识符=整型常量, 标识符=整型常量, ;,声明枚举变量,在定义了枚举类型后,还需要使用该枚举类型来声明枚举变量。 程序中通过枚举变量来使用。 枚举变量的声明有3种方法: 先定义枚举,再声明枚举变量 定义枚举时声明枚举变量 直接声明枚举变量,先定义枚举,再声明枚举变量,enum weekday /定义枚举类型 Monday, /枚举元素

8、,0 Tuesday, /枚举元素,1 Wednesday, /枚举元素,2 Thursday, /枚举元素,3 Friday, /枚举元素,4 Saturday, /枚举元素,5 Sunday, /枚举元素,6 ; enum weekday a,b,c; /声明枚举变量,定义枚举时声明枚举变量,enum weekday /定义枚举类型 Monday, /枚举元素,0 Tuesday, /枚举元素,1 Wednesday, /枚举元素,2 Thursday, /枚举元素,3 Friday, /枚举元素,4 Saturday, /枚举元素,5 Sunday, /枚举元素,6 a,b,c; /声明

9、枚举变量,直接声明枚举变量,enum Monday, /枚举元素,0 Tuesday, /枚举元素,1 Wednesday, /枚举元素,2 Thursday, /枚举元素,3 Friday, /枚举元素,4 Saturday, /枚举元素,5 Sunday, /枚举元素,6 a,b,c; /声明枚举变量,枚举变量的赋值和引用,枚举类型以及枚举变量在程序中使用时,符合如下的规则: 枚举类型在定义时如果没有初始化,枚举元素本身由系统定义了一个表示序号的数值,一般从0开始顺序。 如果枚举中的某个元素被显式地赋值后,其后成员按依次加1的规则来确定其序号值。 只能把枚举元素赋予枚举变量。 以使用强制类

10、型转换来将枚举元素的数值赋值给枚举变量 。 枚举元素使用时不要加单、双引号。 枚举类型中的枚举值是常量,不是变量。 在枚举元素赋值时,可以为其赋负数。,类型声明,类型声明就是为C51中的类型声明符来取一个新的名字。 C51语言中的各个类型声明符都是关键字。 类型声明是指由用户自己定义类型说明符,其一般形式如下: typedef 原类型名 新类型名;,类型声明,类型声明可以增加代码的可读性。 使用typedef可以使程序书写简单。 使用typedef重定义数组时,需要注意书写的格式,示例如下: typedef char NM20; 使用typedef也可以重定义结构 。 宏定义的功能与typed

11、ef的区别是: 宏定义是由预处理完成的, 而类型声明typedef则是在编译时完成的。在使用中,类型声明typedef更为灵活方便些。,位域,位域是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。 每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位来表示。 采用位域可以节省存储空间,并简化程序处理。,定义位域,位域也常称为位段,位域的定义采用struct关键字来实现,其一般形式如下:,struct 位域结构名 类型说明符 位段名:位段长度; ;,位结构,在定义位域的时候,需要注意如下几点: 位域定义时可以省略位段名。 一个位段必须存储

12、在同一个字节中。 一个位段的长度不能超过8位二进制位。 如果一个字节所剩空间不足以存放另一个位段时,应从下一单元起存放该位段。,声明位域变量,在定义了位域类型后,还需要使用该位域类型来声明位域变量。程序中通过位域变量来使用。 位域变量的声明可以采用如下三种方式 : 先定义位域,再声明位域变量 定义位域时声明位域变量 直接声明位域变量,先定义位域,再声明位域变量,struct btest int a:4; int b:1; int c:3; ; btest data;,定义位域时声明位域变量,struct btest int a:4; int b:1; int c:3; data;,直接声明位域

13、变量,struct int a:4; int b:1; int c:3; data;,位域变量的引用,位域变量的位段名引用的一般形式如下: 位域变量名.位段名,01 #include /头文件 02 void main() /主函数 03 04 struct btest /定义位域 05 06 unsigned a:1; 07 unsigned b:3; 08 unsigned c:4; 09 mybtest; /声明位域变量 10 mybtest.a=1; /位域变量赋值 11 mybtest.b=7; 12 mybtest.c=15; 13 printf(“%d,%d,%dn“,mybte

14、st.a,mybtest.b,mybtest.c); /输出结果 14 ,位域指针,位域允许用各种格式输出,可以使用位域指针来实现。,01 #include /头文件 02 void main() /主函数 03 04 struct btest /定义位域 05 06 unsigned a:1; 07 unsigned b:3; 08 unsigned c:4; 09 mybtest,*pbit; /声明位域变量和位域指针 10 mybtest.a=1; /位域变量赋值 11 mybtest.b=7; 12 mybtest.c=15; 13 printf(“%d,%d,%dn“,mybtest.a,mybtest.b,mybtest.c); /输出结果 14 pbit= /输出结果 19 ,性格决定命运, 专注成就人生, 源智天下,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报