您的位置:首页 > 编程语言 > C语言/C++

基于proteus的51单片机仿真实例二十九、C语言的switch-case多分支选择语句

2017-04-30 08:48 579 查看
switch-case开关语句

1、switch-case开关语句是一种多分支选择语句,用来实现多方向条件分支。虽然采用if-else条件判断语句也可以实现多方向条件分支,但是当分支较多时,使用if-else条件语句的嵌套层次会大大增多,从而导致程序冗长、结构混乱。switch-case语句可以直接处理多分枝选择,使程序结构清晰、使用方便。

 

2、switch-case开关语句的组成形式。它的一般形式如下:

switch(表达式)

{

     case 常量表达式1:{语句1;}    break;

     case 常量表达式2:{语句2;}    break;

     case 常量表达式3:{语句3;}    break;

     ....

     case 常量表达式n:{语句n;}    break;

     default:          {语句n+1;}  break;

}

开关语句的执行过程是:

1)当switch后面的表达式的值与某一case后面的常量表达式的值相等时,就执行该case后面的语句,然后遇到break语句退出该switch语句。若所有case中的常量表达式的值没有与表达式的值相匹配时,就执行default后面的语句。

2)switch后面括号内的表达式,可以是整型或字符型表达式,也可以是枚举类型的数据。

3)每一个case常量表达式的值必须不同,否则就会出现自相矛盾的现象。

4)每个case和default的出现次序不影响执行结果,可以先出现default,再出现case。

5)假如case语句的最后没有break这个关键字,则流程控制转移到下一个case继续执行,因此,在执行一个case分支后,如果不需要继续执行switch语句,则需要用一个break语句来完成。

 

对于switch语句,有两点注意事项:一是常量表达式的值必须是整型或字符型;二是注意break语句的使用

 

3、本实例用switch语句控制p0口的8个led灯的状态,通过检测按键按下的次数,选择点亮不同的LED。

4、在keil c51中新建工程ex18,编写如下程序代码,编译并生成ex18.hex文件

//实例18:利用switch-case开关语句控制p0口8个led的状态

#include <reg51.h>    //包含头文件

sbit KEY = P1^0;      //端口位定义,定义按键端口

void delay(void)

{

  unsigned int i;

 for (i=0;i<30000;i++);

}

void main(void)

{

  unsigned char keynum = 0;  //定义一个存储按键次数的变量,变量定义的同时给变量赋初值

 while(1)      //无限循环,

 {

   if(KEY == 0)    //判断按键是否按下

  {

    delay();

   if(KEY == 0)    //按键防抖

   {   

     keynum++;   //如果按键按下,按键次数加1

   }   

   if(keynum == 9)  //判断按键次数是否等于9次

   {

     keynum = 1;  //按键次数超过8次,则重新给按键次数赋值为1

   }

  }

  switch(keynum)    //使用switch-case开关语句,根据按键次数执行相应分支

  {

    case 1: P0 = 0xfe;    //按键次数为1次,则点亮第一个LED

                break;   //跳出switch语句

   case 2: P0 = 0xfd;

                break;

   case 3: P0 = 0xfb;

                break;

   case 4: P0 = 0xf7;

                break;

   case 5: P0 = 0xef;

                break;

   case 6: P0 = 0xdf;

                break;

   case 7: P0 = 0xbf;

                break;

   case 8: P0 = 0x7f;

                break;

   default:P0 = 0xff;   //如果按键此数值不等于上面的任何一个,则熄灭所有LED

                break;

  }

 }

}

5、在proteus中新建仿真文件ex18.dsn,电路图如下所示



 

6、将ex18.hex文件载入单片机at89c51,启动仿真,按动按键,观察程序的执行效果。下图是第8次按下按键后的运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 proteus 单片机
相关文章推荐