21天学会51单片机第9章.ppt_第1页
21天学会51单片机第9章.ppt_第2页
21天学会51单片机第9章.ppt_第3页
21天学会51单片机第9章.ppt_第4页
21天学会51单片机第9章.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

21天学51单片机开发 第九讲 C51的聚合类型 课程安排 联合类型枚举类型类型声明位域 联合类型 联合类型也称为共用体 在不同时刻呈现不同的数据类型 联合类型是将不同类型的变量组织成一个整体的数据类型 这些不同类型的变量在单片机内存中占用同一段存储单元 为了不互相影响 其在不同的时间保存不同的数据类型和不同长度的变量 联合的定义 联合类型也是用户自定义的数据类型 其定义的方式如下 union联合名 数据类型成员名 数据类型成员名 联合变量的声明 在定义了联合类型后 还需要使用该联合类型来声明联合变量 联合变量的声明有3种方法 先定义联合 再声明联合变量定义联合时声明联合变量直接声明联合变量 先定义联合 再声明联合变量 这种方法的一般形式如下 union联合名联合变量 注意 如果联合变量中成员变量的大小不一致 则自动取其中最大的长度为整个联合变量的长度 unionchar int charch inti unionchar inta 定义联合时声明联合变量 C51中 允许在定义联合的同时声明联合变量 这种声明方法的一般形式如下 union联合名 数据类型成员名 数据类型成员名 联合变量 直接声明联合变量 直接声明联合变量的方法示例如下 union inta charb floatc Test 注意 直接声明联合变量的方法不能再额外声明其他的联合变量 联合变量成员的引用 联合体变量成员的引用使用 来实现 例如 对于前面定义的Test 其成员引用为 Test aTest bTest c对联合体变量成员可以用于赋值和读取操作 注意 不能同时引用三个成员 既在任意时刻 只能使用其中之一的成员 联合变量数组 联合变量数组就是数组中的每一个元素均为联合类型 当使用联合变量数组时 其成员的引用同样采用 01 include 头文件02voidmain 主函数03 04unionTIO 定义联合05 06inta 07charb 08floatc 09 10unionTIOun 3 声明联合数组变量11un 0 a 10 赋值12un 1 b 3 7 13un 2 c A 14printf un 0 a d n un 0 a 输出成员变量15printf un 1 b c n un 1 b 16printf un 2 c f n un 2 c 17 联合变量指针 同结构变量类似 联合变量也可以定义为指针形式 当联合变量定义为指针时 要用 符号来访问内部的成员 联合名 成员名 01 include 头文件02voidmain 主函数03 04inti 10 定义并声明变量05floatf 3 7 06charc A 07unionTIO 定义联合08 09inta 10charb 11floatc 12 13unionTIO un 定义联合指针14un 20 联合和结构的嵌套 联合和结构可以灵活自由地嵌套使用 联合内的成员可以是结构 示例如下 unionThreeInOne inta charb floatc struct inta charb floatc st un 结构体内的成员可以是联合 示例如下 structThreeInOne inta charb floatc union inta charb floatc un st 结构和联合的区别 联合变量的成员占用同一个内存空间 而结构变量中的成员分别独占自己的内存空间 互相不干扰 在任何同一时刻 结构的所有成员都存在 即结构变量的不同成员赋值是互不影响的 而联合变量中只存放了一个被选中的成员 枚举类型 现实生活中的某些事物的取值范围是有限的 C51语言中提供了枚举类型来表示 枚举类型主要用于将变量的取值限定在一个有限的范围内的场合 枚举类型在定义中列举出所有可能的取值 被声明为该类型的变量取值不能超过定义的范围 采用枚举类型不但可以简洁明了地表示其取值 而且节省存储空间 定义枚举类型 在C51语言中 定义枚举类型的一般形式如下 注意 在枚举类型内部 每个枚举元素后的结束符是 而不是 并且最后一个元素后的结束符可以省略不写 enum枚举名 标识符 整型常量 标识符 整型常量 声明枚举变量 在定义了枚举类型后 还需要使用该枚举类型来声明枚举变量 程序中通过枚举变量来使用 枚举变量的声明有3种方法 先定义枚举 再声明枚举变量定义枚举时声明枚举变量直接声明枚举变量 先定义枚举 再声明枚举变量 enumweekday 定义枚举类型 Monday 枚举元素 0Tuesday 枚举元素 1Wednesday 枚举元素 2Thursday 枚举元素 3Friday 枚举元素 4Saturday 枚举元素 5Sunday 枚举元素 6 enumweekdaya b c 声明枚举变量 定义枚举时声明枚举变量 enumweekday 定义枚举类型 Monday 枚举元素 0Tuesday 枚举元素 1Wednesday 枚举元素 2Thursday 枚举元素 3Friday 枚举元素 4Saturday 枚举元素 5Sunday 枚举元素 6 a b c 声明枚举变量 直接声明枚举变量 enum Monday 枚举元素 0Tuesday 枚举元素 1Wednesday 枚举元素 2Thursday 枚举元素 3Friday 枚举元素 4Saturday 枚举元素 5Sunday 枚举元素 6 a b c 声明枚举变量 枚举变量的赋值和引用 枚举类型以及枚举变量在程序中使用时 符合如下的规则 枚举类型在定义时如果没有初始化 枚举元素本身由系统定义了一个表示序号的数值 一般从0开始顺序 如果枚举中的某个元素被显式地赋值后 其后成员按依次加1的规则来确定其序号值 只能把枚举元素赋予枚举变量 以使用强制类型转换来将枚举元素的数值赋值给枚举变量 枚举元素使用时不要加单 双引号 枚举类型中的枚举值是常量 不是变量 在枚举元素赋值时 可以为其赋负数 类型声明 类型声明就是为C51中的类型声明符来取一个新的名字 C51语言中的各个类型声明符都是关键字 类型声明是指由用户自己定义类型说明符 其一般形式如下 typedef原类型名新类型名 类型声明 类型声明可以增加代码的可读性 使用typedef可以使程序书写简单 使用typedef重定义数组时 需要注意书写的格式 示例如下 typedefcharNM 20 使用typedef也可以重定义结构 宏定义的功能与typedef的区别是 宏定义是由预处理完成的 而类型声明typedef则是在编译时完成的 在使用中 类型声明typedef更为灵活方便些 位域 位域是把一个字节中的二进位划分为几个不同的区域 并说明每个区域的位数 每个域有一个域名 允许在程序中按域名进行操作 这样就可以把几个不同的对象用一个字节的二进制位来表示 采用位域可以节省存储空间 并简化程序处理 定义位域 位域也常称为位段 位域的定义采用struct关键字来实现 其一般形式如下 struct位域结构名 类型说明符位段名 位段长度 位结构 在定义位域的时候 需要注意如下几点 位域定义时可以省略位段名 一个位段必须存储在同一个字节中 一个位段的长度不能超过8位二进制位 如果一个字节所剩空间不足以存放另一个位段时 应从下一单元起存放该位段 声明位域变量 在定义了位域类型后 还需要使用该位域类型来声明位域变量 程序中通过位域变量来使用 位域变量的声明可以采用如下三种方式 先定义位域 再声明位域变量定义位域时声明位域变量直接声明位域变量 先定义位域 再声明位域变量 structbtest inta 4 intb 1 intc 3 btestdata 定义位域时声明位域变量 structbtest inta 4 intb 1 intc 3 data 直接声明位域变量 struct inta 4 intb 1 intc 3 data 位域变量的引用 位域变量的位段名引用的一般形式如下 位域变量名 位段名 01 include 头文件02voidmain 主函数03 04structbtest 定义位域05 06unsigneda 1 07unsignedb 3 08unsignedc 4 09 mybtest 声明位域变量10mybtest a 1 位域变量赋值11mybtest b 7 12mybtest c 15 13printf d d d n mybtest a mybtest b mybtest c 输出结果14 位域指针 位域允许用各种格式输出 可以使用位域指针来实现 01 include 头文件02voidmain 主函数03 04structbtest 定义位域05 06unsigneda

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论