学C51的基础 11《 枚 举(enum) 》

发布者:喜悦的38号最新更新时间:2015-03-10 来源: laogu关键字:C51  enum 手机看文章 扫描二维码
随时随地手机看文章
枚      举(enum)

    枚举是一个被命名的整型常数的集合, 枚举在日常生活中很常见。
    例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, 就是一个枚举。
    枚举的说明与结构和联合相似, 其形式为:

          enum 枚举名{
               标识符[=整型常数],
               标识符[=整型常数],
               ...
               标识符[=整型常数],
          } 枚举变量;

    如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始, 顺次赋给标识符0, 1, 2,...。但当枚举中的某个成员
赋值后, 其后的成员按依次加1的规则确定其值。
    例如下列枚举说明后, x1, x2, x3, x4的值分别为0, 1, 2, 3。

     enum string{x1, x2, x3, x4}x;

    当定义改变成:

      enum string
      {
          x1,
          x2=0,
          x3=50,
          x4,
      }x;

    则x1=0, x2=0, x3=50, x4=51

    注意:
    1. 枚举中每个成员(标识符)结束符是",",  不是";", 最后一个成员可省略","。
    2. 初始化时可以赋负数, 以后的标识符仍依次加1。
    3. 枚举变量只能取枚举说明结构中的某个标识符常量。
    例如:
      enum string
      {
          x1=5,
          x2,
          x3,
          x4,
      };
     enum strig x=x3;
    此时, 枚举变量x实际上是7。

                             类   型   说   明

    类型说明的格式为:
     typedef 类型 定义名;
    类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型。这里类型是Turbo C许可的任何一种数据类型。定义名
表示这个类型的新名字。
    例如: 用下面语句定义整型数的新名字:
     typedef int SIGNED_INT;
    使用说明后, SIGNED_INT就成为int的同义词了, 此时可以用SIGNED_INT 定义整型变量。
    例如:  SIGNED_INT i, j;(与int i, j等效)。
    但 long SIGNED_INT i, j; 是非法的。
    typedef同样可用来说明结构、联合以及枚举。
    说明一个结构的格式为:

      typedef struct{
          数据类型  成员名;
          数据类型  成员名;
          ...
        } 结构名;

    此时可直接用结构名定义结构变量了。例如:

     typedef struct{
          char name[8];
          int class;
          char subclass[6];
          float math, phys, chem, engl, biol;
      } student;
      student Liuqi;

    则Liuqi被定义为结构数组和结构指针。
    在第二节讲过的文件操作中, 用到的FILE就是一个已被说明的结构, 其说明如下:

     typedef struct
     {
          short level;
          unsigned flags;
          char fd;
          unsigned char hold;
          short bsize;
          unsigned char *buffer;
          unsigned char *curp;
          unsigned istemp;
          short token;
     } FILE

    这个结构说明已包含在stdio.h中, 用户只要直接用FILE 定义文件指针变量就可以。事实上, 引入类型说明的目的并非为了方
便, 而是为了便于程序的移植。

                         预  处  理  指  令

    由ANSI的标准规定, 预处理指令主要包括:
     #define
     #error
     #if
     #else
     #elif
     #endif
     #ifdef
     #ifndef
     #undef
     #line
     #pragma
    由上述指令可以看出, 每个预处理指令均带有符号"#"。下面只介绍一些常用指令。

    1. #define 指令

    #define指令是一个宏定义指令, 定义的一般形式是:
     #define 宏替换名字符串(或数值)
    由#define指令定义后,  在程序中每次遇到该宏替换名时就用所定义的字符串(或数值)代替它。
    例如: 可用下面语句定义TRUE表示数值1, FALSE表示0。

     #define TRUE 1
     #define FALSE 0

    一旦在源程序中使用了TRUE和FALSE, 编译时会自动的用1和0代替。

    注意:
    1. 在宏定义语名后没有";"
    2. 在Turbo C程序中习惯上用大写字符作为宏替换名, 而且常放在程序开头。
    3. 宏定义还有一个特点, 就是宏替换名可以带有形式参数,  在程序中用到时, 实际参数会代替这些形式参数。
    例如:

     #define MAX(x, y) (x>y)?x:y
     main()
     {
          int i=10, j=15;
          printf("The Maxmum is %d", MAX(i, j);
     }

    上例宏定义语句的含义是用宏替换名MAX(x, y)代替x, y中较大者, 同样也可定义:

     #define MIN(x, y) (x

    程序也允许嵌入其它文件, 例如:

     main()
     {
          #include 
     }

    其中help.c为另一个文件, 内容可为

       printf("Glad to meet you here!");

    上例编译时将按集成开发环境的Options/Directories/Include directories 中指定的包含文件路径查找被嵌入文件。

    4. #if、#else、#endif指令
    #if、#els和#endif指令为条件编择指令, 它的一般形式为:

     #if 常数表达式
          语句段;
     #else
          语句段;
     #endif

    上述结构的含义是: 若#if指令后的常数表达式为真, 则编译 #if到 #else 之间的程序段; 否则编译 #else 到 #endif 之间的
    程序段。

    例如:

     #define MAX 200
     main()
     {
          #if MAX>999
               printf("compiled for bigger ");
          #else
               printf("compiled for small ");
          #endif
     }

    5. #undef指令

    #undef指令用来删除事先定义的宏定义, 其一般形式为:

     #undef 宏替换名
    例如:

      #define TRUE 1
       ...
      #undef TURE
    #undef主要用来使宏替换名只限定在需要使用它们的程序段中。

关键字:C51  enum 引用地址:学C51的基础 11《 枚 举(enum) 》

上一篇:学C51的基础 12《 函 数 》
下一篇:学C51的基础 10《 联 合(union) 》

推荐阅读最新更新时间:2024-03-16 13:54

c51单片机学习笔记-IO扩展(串转并)实验 - 74HC595
目的:通过 74HC595 模块控制 LED 点阵以一行循环滚动显示。 编译软件:keil5 过程: (1)先定义好74HC595 控制管脚,以及点阵列控制口 //定义 74HC595 控制管脚 sbit SRCLK=P3^6; //移位寄存器时钟输入 sbit RCLK=P3^5; //存储寄存器时钟输入 sbit SER=P3^4; //串行数据输入 #define LEDDZ_COL_PORT P0 //点阵列控制端口 u8 ghc595_buf ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; (2)重新定义了一个 ms 级延时函数 delay_ms,该函数与前面 de
[单片机]
<font color='red'>c51</font>单片机学习笔记-IO扩展(串转并)实验 - 74HC595
C51单片机设计的水箱温度PID控制系统的程序,PID控制程序
此系统是基于PID的单片机温度控制系统,我在网上搜到一段完整的程序,并按他的程序做出了相应的proteus硬件仿真,但 是并没有达到预期的效果.待提高。 程序如下: #include<reg51.h #include<intrins.h #include<math.h #include<string.h struct PID { unsigned int SetPoint; // 设定目标 Desired Value unsigned int Proportion; // 比例常数 Proportional Const unsigned int Integral; // 积分常数 Integral Const
[单片机]
C51编程24-应用篇(ESP-01S WIFI模块与电脑端通讯)
为了实现电脑端与单片机透传之前,我们先要了解下wifi模块。 测试wifi模块的是否正常 使用串口线连接到wifi模块串口。CH340G串口线TX与wifi模块的RX连接,CH340G串口线RX与wifi模块的TX连接。如下表 注:wifi模块不可以用5V供电,wifi模块是3.3V供电的。引脚图如下 连接串口调试助手(可以使用安信可助手,或者其他串口调试助手),通过串口发送数据给wifi模块进行设置。 注:在使用友善串口助手发送命令时,需要按回车键后,再点击发送否则命令会识别失败 建议使用安信可串口调试,里面自带命令,链接如下。 AiThinker_Serial_Tool.rar-嵌入式文档类资源-
[单片机]
<font color='red'>C51</font>编程24-应用篇(ESP-01S WIFI模块与电脑端通讯)
基于C51单片机的遥控小车设计与制版
一、 设计任务 1、熟悉用Proteus绘制原理图的过程; 2、利用Proteus进行电路仿真 3、熟悉PCB制版的过程; 4、学会封装的制作; 5、学会自动、手动布局、布线; 二、 设计思路 此次试验采用基于C51单片机的遥控小车的设计。以 89C51 单片机为控制核心,采用 L298N 对小车电机的控制,利用以 PT2262/PT2272 芯片为模块的无线遥控装置,实现小车的前进、后退、左转、右转。 整个系统的构成是由两部分组成。 一部分是硬件系统, 一 部分是软件系统(见附录1)。 硬件方案确定如下:在现有电动车模型的基础上,加装无线控制模块,电机驱动模块,实现对电动车的无线遥控,并将数据传送至单片机进行处
[单片机]
C51写的单片机音乐彩灯程序
#include AT89X51.H #define TLEDS 20//每个花样状态持续时间,以50mS为单位 #define NUM_OF_LED_S 4//每种模式LED花样数? typedef unsigned char uchar; typedef unsigned int uint; data uchar led_array_num;//当前模式下,LED花样状态序号 data uchar music_array_num;//音符的序号 data uchar i;//模式号 data uchar t_count_led;//用于LED状态持续时间计时 data uint t_count_music;// data
[单片机]
C51单片机为核心的嵌入式系统实时控制设计
随着现代通信技术的发展,通信测试仪器不断推陈出新。各种新型设备对系统的实时响应能力的要求越来越高,一种通信测试仪器的实时响应性能,就成为系统设计能否成功的关键因素之一。笔者曾在多个通信测试仪器项目中,成功地应用ARM处理器、C51单片机等为主控芯片的嵌入式系统,实现了对仪器相关模块的实时控制功能。因此提出一种在某通信测试仪器中使用C51单片机来实现实时控制的设计方案。 1 硬件设计与实现 1.1 总体方案设计 在该通信测试仪器中,实时控制模块主要实现对射频接收频综、射频发生频综、滤波器组件、射频输入模块、射频输出模块等实时控制作用。对射频检波信号进行A/D转换以获取数据。与上位计算机进行通信等功能。 根据待实现的系统功能要
[单片机]
以<font color='red'>C51</font>单片机为核心的嵌入式系统实时控制设计
C51 串口收发,printf, 接收字符串
串口发送,接收 在while(1){printf(“xxx”); delay(100); //此处需要有delay函数;} #include reg51.h //stdio.h,string.h用于printf函数原型 #include stdio.h void delay(unsigned int z) { unsigned int x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } void uart_init(void) { TMOD=0x20;//即0010 0000,定时器/计数器1,工作方式2 TH1=0xe6;//设置波
[单片机]
利用全局及外部变量实现C51无能数化调用A51函数
摘要: 利用C51全局及外部变量,可实现无参数化调用A51函数,不但避免开了传统C51调用C51时繁琐的接口约定,而且把在A51中所用到的变量全部放至C51程序中而不必考虑变量在内存中的位置,使编程更加简洁。用实例验证了该方法的优越性和有效性。 关键词: C51 A51 汇编语言 无参数化调用 电子技术应用 2001年第7期发表苟帅的文章“ASM51无参数化调用C51函数的实现”,阐述了ASM51无参数化调用C51函数的实现原理并给出实例来验证该方法的优越性和可行性。作者在文章中
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved