⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51结构、联合和枚举的使用.htm

📁 单片机教程 用c语言实现编程 可以大大缩短我们的开发周期
💻 HTM
📖 第 1 页 / 共 3 页
字号:

	}
}

function copyurl(url)
{
	try{
		clipboardData.setData('Text',url);
		showAlert('已经把该社团网址复制到系统剪贴板,您可以使用(Ctrl+V或鼠标右键)粘贴功能,通过其他软件记录或发送给您的朋友。')
	}
	catch(e){}
}
function add_favorite(uid, url, name)
{
	window.open("/personal/favorite/add.php?member_id="+uid+"&url="+url+"&name="+name,'_blank','width=400,height=220,toolbar=0,locationbar=0,menubar=0,statbar=0'); 
	return false;
}

// 提示登录
function alertlert_login()
{
	showAlert('对不起,您目前没有权限,请先登录!');
	document.login_form1.account.focus();
}


//申请加入社团
function con_join(con_gid)
{
	showConfirm("您确认加入本社团吗?","window.location.href='/league/apply.php?g_id="+con_gid+"';","");
}


//退出本社团
function con_quiet(con_gid,con_uid)
{
	showConfirm("您确认退出本社团吗?","window.location.href='/league/member/quiet_member.php?g_id="+con_gid+"&q_uid="+con_uid+"';","");
}

</SCRIPT>
<!-- 回复框 -->
<DIV id=background style="DISPLAY: none"></DIV>
<DIV id=postbox 
style="DISPLAY: none; Z-INDEX: 50; LEFT: 769px; WIDTH: 600px; POSITION: absolute; TOP: 271px">
<FORM name=reply_comment action=/league/comment/index.php?gid=514465 method=post 
target=hidden_frame><INPUT id=act type=hidden value=add name=act> <INPUT id=r_id 
type=hidden name=r_id> <INPUT id=t_id type=hidden name=t_id> <INPUT id=f_uid 
type=hidden name=f_uid> 
<TABLE cellSpacing=0 cellPadding=0 width="70%" border=0>
  <TBODY>
  <TR>
    <TD height=13>&nbsp;</TD></TR>
  <TR>
    <TD class=box_common height=26>&nbsp;<SPAN 
      class=font_common_title>回复评论</SPAN></TD></TR></TBODY></TABLE>
<TABLE class=box_common01 cellSpacing=0 cellPadding=0 width="70%">
  <TBODY>
  <TR>
    <TD>
      <TABLE cellSpacing=8 cellPadding=0 width="100%" bgColor=#ffffff 
        border=0><TBODY>
        <TR>
          <TD class=font_common vAlign=top align=right height=63>内容:</TD>
          <TD class=font_common vAlign=top><TEXTAREA class=input_box01 id=input_area name=input_area rows=6 cols=48></TEXTAREA></TD></TR>
        <TR>
          <TD class=font_common vAlign=top align=right width="15%">原文:</TD>
          <TD class=font_common style="LINE-HEIGHT: 18px" vAlign=top 
            width="85%"><SPAN class=gray id=past_type></SPAN></TD></TR>
        <TR>
          <TD class=font_common vAlign=top align=middle colSpan=2><INPUT class=btn01 onclick=javascript:hidden_reply();submit_post(document.reply_comment); type=button value=发表 name=queding> 
            &nbsp;&nbsp; <INPUT class=btn01 onclick=hidden_reply(); type=reset value=取消> 
        </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></FORM></DIV><!-- 回复框 -->
<DIV id=mainBox>
<DIV id=mainBoxBg>
<TABLE class=module_title cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR>
    <TD class=corner_left></TD>
    <TD class=corner_center><A 
      href="http://www.5jia1.com/league/?gid=514465">首页</A>&nbsp;&gt;&nbsp;<A 
      href="http://www.5jia1.com/league/blog/blog_index.php?gid=514465">社团文集</A>&nbsp;&gt;&nbsp;<A 
      href="http://www.5jia1.com/league/blog/show_comm.php?bid=361549">第十七课 
      C51结构、联合和枚举的使用</A></TD>
    <TD class=corner_right></TD></TR></TBODY></TABLE>
<DIV class=module_content>
<DIV class=module_content_line>
<DIV class=bg>
<TABLE cellSpacing=10 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD align=middle>
      <TABLE class=box_common cellSpacing=1 cellPadding=5 width="100%" 
        border=0><TBODY>
        <TR class=box_common_title>
          <TD colSpan=2>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD width="35%"><B>第十七课 C51结构、联合和枚举的使用</B></TD>
                <TD align=right width="65%">作者: <A 
                  href="http://www.5jia1.com/personal/?member_id=505887" 
                  target=_blank>张文俊</A> &nbsp;&nbsp;2007-08-15 
                  09:18:14&nbsp;&nbsp; </TD></TR></TBODY></TABLE></TD></TR>
        <TR class=box_content>
          <TD vAlign=top align=middle width="10%"><A 
            href="http://www.5jia1.com/personal/?member_id=505887" 
            target=_blank><IMG class=box01 height=98 
            src="17.files/s_0_personal_photo_505887.jpg" width=98 vspace=5 
            border=0></A><BR><IMG height=14 src="17.files/icon_boy.gif" width=14 
            border=0>&nbsp; <A 
            href="http://www.5jia1.com/personal/?member_id=505887" 
            target=_blank>张文俊</A> </TD>
          <TD>
            <TABLE class="font_content  autowrap" cellSpacing=12 cellPadding=0 
            width="100%" border=0>
              <TBODY>
              <TR>
                <TD class=line_h20 style="WIDTH: 790px">
                  <DIV style="OVERFLOW-X: auto; WIDTH: 100%">
                  <TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" 
                  cellSpacing=0 cellPadding=0 width="100%" border=0>
                    <TBODY>
                    <TR>
                      <TH vAlign=center align=middle height=32>
                        <H1>第十七课 C51结构、联合和枚举的使用</H1></TH></TR>
                    <TR>
                      <TD align=middle bgColor=#f7f7f7 
                        height=25>作者:佚名&nbsp;&nbsp;&nbsp;&nbsp;来源:本站原创&nbsp;&nbsp;&nbsp;&nbsp;点击数: 
                        113&nbsp;&nbsp;&nbsp;更新时间:2007年07月12日&nbsp;&nbsp;&nbsp;</TD></TR>
                    <TR>
                      <TD align=middle>&nbsp;</TD></TR></TBODY></TABLE>
                  <P>前面的文章中介绍了 C &nbsp;语言的基本数据类型,为了更有效的处理更复杂的数据,C &nbsp;语 
                  言引入了构造类型的数据类型。构造类型就是将一批各种类型的数据放在一起形成一种特殊 
                  类型的数据。之前讨论过的数组也算是一种构造类型的数据,单片机c语言 中的构造类型还有结构、 枚举和联合。</P>
                  <P>结构</P>
                  <P>结构是一种数据的集合体,它能按需要将不一样类型的变量组合在一起,整个集合体用 
                  一个结构变量名表示,组成这个集合体的各个变量称为结构成员。理解结构的概念,能用 
                  班级和学生的关系去理解。班级名称就相当于结构变量名,它代表所有同学的集合,而每个 
                  同学就是这个结构中的成员。使用结构变量时,要先定义结构类型。一般定义格式如下:</P>
                  <P>struct &nbsp;结构名 &nbsp;{结构元素表};</P>
                  <P>例子:struct&nbsp;&nbsp;&nbsp; FileInfo</P>
                  <P>{</P>
                  <P>unsigned char FileName[4]; unsigned long Date; unsigned int 
                  Size;</P>
                  <P>}</P>
                  <P>上面的例子中定义了一个简单的文件信息结构类型,它可用于定义用于简单的<A 
                  href="http://www.51hei.com/" target=_blank><U><FONT 
                  color=#800080>单片机</FONT></U></A>文 
                  件信息,结构中有三个元素,分别用于操作文件名、日期、大小。因为结构中的每个数据成 
                  员能使用不一样的数据类型,所以要对每个数据成员进行数据类型定义。定义好一个结构类 
                  型后,能按下面的格式进行定义结构变量,要注意的是只有结构变量才能参与程序的执 
                  行,结构类型只是用于说明结构变量是属于那一种结构。</P>
                  <P>struct &nbsp;结构名 &nbsp;结构变量名 1,结构变量名 2……结构变量 N; 例子:struct 
                  FileInfo NewFileInfo, OleFileInfo;</P>
                  <P>通过上面的定义 NewFileInfo 和 OleFileInfo 都是 FileInfo 结构,都具有一个字符型数组 
                  一个长整型和一个整形数据。定义结构类型只是给出了这个结构的组织形式,它不会占用存 
                  储空间,也就说结构名是不能进行赋值和运算等操作的。结构变量则是结构中的具体成员, 会占用空间,能对每个成员进行操作。</P>
                  <P>结构是允许嵌套的,也就是说在定义结构类型时,结构的元素能由另一个结构构成。 如:</P>
                  <P>struct clock</P>
                  <P>{</P>
                  <P>unsigned char sec, min, hour;</P>
                  <P>}</P>
                  <P>struct date</P>
                  <P>{</P>
                  <P>unsigned int year;</P>
                  <P>unsigned char month, day;</P>
                  <P>struct clock Time; //这是结构嵌套</P>
                  <P>}</P>
                  <P>struct date NowDate; //定义 data 结构变量名为 NowDate</P>
                  <P><BR style="PAGE-BREAK-BEFORE: auto" clear=all>&nbsp;</P>
                  <DIV class=Section75>
                  <P>开始学习的朋友看到这可能会发问:“各个数据元素要如何引用、赋值呢?”使用结构变量 
                  时是通过对它的结构元素的引用来实现的。引用的方法是使用存取结构元素成员运算符“.” 来连接结构名和元素名,格式如下:</P>
                  <P>结构变量名.结构元素</P>
                  <P>要存取上例结构变量中的月份时,就要写成 &nbsp;NowDate..year。而嵌套的结构,在引用元 
                  素时就要使用多个成员运算符,一级一级连接到最低级的结构元素。要注意的是在 &nbsp;单片机c语言 &nbsp;中 
                  只能对最低级的结构元素进行访问,而不可能对整个结构进行操作。操作例子:</P>
                  <P>NowDate.year = 2005;</P>
                  <P>NowDate.month = OleMonth+ 2; //月份数据在旧的基础上加 2</P>
                  <P>NowDate.Time.min++; //分针加 1,嵌套时只能引用最低一级元素 
                  一个结构变量中元素的名字能和程序中其他地方使用的变量同名,因为元素是属于它所在 的结构中,使用时要用成员运算符指定。</P>
                  <P>结构类型的定义还能有如下的两种格式。</P>
                  <P>struct</P>
                  <P>{</P>
                  <P>结构元素表</P>
                  <P>} &nbsp;结构变量名 1,结构变量名 2……结构变量名 N;</P>
                  <P>例:struct</P>
                  <P>{</P>
                  <P>unsigned char FileName[4]; unsigned long Date; unsigned int 
                  Size;</P>
                  <P>} NewFileInfo, OleFileInfo;</P>
                  <P>这一种定义方式定义没有使用结构名,称为无名结构。通常会用于程序中只有几个确定 
                  的结构变量的场合,不能在其它结构中嵌套。</P>
                  <P>另一种定义方式如下:</P>
                  <P>struct &nbsp;结构名</P>
                  <P>{</P>
                  <P>结构元素表</P>
                  <P>} &nbsp;结构变量名 1,结构变量名 2……结构变量名 N;</P>
                  <P>例:struct FileInfo</P>
                  <P>{</P>
                  <P>unsigned char FileName[4]; unsigned long Date; unsigned int 
                  Size;</P>
                  <P>} NewFileInfo, OleFileInfo;</P>
                  <P>使用结构名能便于阅读程序和便于以后要在定义其它结构中使用。 枚举</P>
                  <P>在程序中经常要用到一些变量去做程序中的判断标志。如经常要用一个字符或整型变量</P>
                  <P>去储存 1 和 0 做判断条件真假的标志,但我们也许会疏忽这个变量只有当等于 0 或 1 才是有</P></DIV>
                  <P><BR style="PAGE-BREAK-BEFORE: auto" clear=all>&nbsp;</P>
                  <DIV class=Section76>
                  <P>效的,而将它赋上别的值,而使程序出错或变的混乱。这个时候能使用枚举数据类型去定义变 
                  量,限制错误赋值。枚举数据类型就是把某些整型常量的集合用一个名字表示,其中的整型 
                  常量就是这种枚举类型变量的可取的合法值。枚举类型的二种定义格式如下:</P>
                  <P>enum &nbsp;枚举名 &nbsp;{枚举值列表} &nbsp;变量列表;</P>
                  <P>例 &nbsp;enum TFFlag {False, True} TFF;</P>
                  <P>enum &nbsp;枚举名 &nbsp;{枚举值列表};</P>
                  <P>emum &nbsp;枚举名 &nbsp;变量列表;</P>
                  <P>例&nbsp;&nbsp; &nbsp;enum Week {Sun, Mon, Tue, Wed, Thu, 
                  Fri, Sat};</P>
                  <P>enum Week OldWeek, NewWeek;</P>
                  <P>看了上面的例子,你也许有一个地方想不通,那就是为什么枚举值不用贬值就能使 
                  用?那是因为在枚举列表中,每一项名称代表一个整数值,在默认的情况下,编译器会自动 为每一项赋值,第一项赋值为 0,第二项为 
                  1…...如 Week 中的 Sun 为 0,Fri 为 5。C 语言也 
                  允许对各项值做初始化赋值,要注意的是在对某项值初始化后,它的后续的各项值也随之递 增。如:</P>
                  <P>enum Week {Mon=1, Tue, Wed, Thu, Fri, Sat, Sun};</P>
                  <P>上例的枚举就使 Week 值从 1 到 7,这样会更符合我们的习惯。使用枚举就如变量一样, 
                  但在程序中不能为其赋值。</P>
                  <P>联合</P>
                  <P>联合同样是 &nbsp;C &nbsp;语言中的构造类型的数据结构。它和结构类型一样能包含不一样类型的 
                  数据元素,所不一样的是联合的数据元素都是从同一个数据地址开始存放。结构变量占用的内 
                  存大小是该结构中数据元素所占内存数的总和,而联合变量所占用内存大小只是该联合中最 
                  长的元素所占用的内存大小。如在结构中定义了一个 int 和一个 char,那么结构变量就会占</P>
                  <P>用 3 个字节的内存,而在联合中同样定义一个 int 和一个 char,联合变量只会占用 2 个字节。 
                  这种能充分利用内存空间的技术叫‘内存覆盖技术’,它能使不一样的变量分时的使用同一 
                  个内存空间。使用联合变量时要注意它的数据元素只能是分时使用,而不能同时使用。举个 简单的例子,程序先为联合中的 int 赋值 
                  1000,后来又为 char 赋值 10,那么这个时候就不能引用</P>
                  <P>int 了,不然程序会出错,起作用的是最后一次赋值的元素,而上一次赋值的元素就失效了。 
                  使用中还要注意定义联合变量时不能对它的值初始化、能使用指向联合变量的指针对其操 
                  作、联合变量不能作为函数的参数进行传递,数组和结构能出现在联合中。</P>
                  <P>联合类型变量的定义方法和结构的定义方法差不多,只要把关键字 struct 换用 union 就 
                  能了。联合变量的引用方法除也是使用‘.’成员运算符。</P>
                  <P>下面就用一个综合的例子说明三种类型的简单使用。</P>
                  <P>#include &lt;AT89X51.H&gt;</P>
                  <P>#include &lt;stdio.h&gt;</P>
                  <P>void main(void)</P>
                  <P>{</P>
                  <P>enum TF {</P>
                  <P>False, True} State; //定义一个枚举,使程序更易读</P>
                  <P>union File { //联合中包含一数组和结构,</P></DIV>
                  <P><BR style="PAGE-BREAK-BEFORE: auto" clear=all>&nbsp;</P>
                  <DIV class=Section77>
                  <P>unsigned char Str[11]; //整个联合共用 11 个字节内存</P>
                  <P>struct FN {</P>
                  <P>unsigned char Name[6],EName[5];} FileName;</P>
                  <P>} MyFile;</P>
                  <P>unsigned char Temp;</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -