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

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     //包含头文件
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,电路图如下所示
基于proteus的51单片机仿真实例二十九、C语言的switch-case多分支选择语句_第1张图片
 
6、将ex18.hex文件载入单片机at89c51,启动仿真,按动按键,观察程序的执行效果。下图是第8次按下按键后的运行结果

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

你可能感兴趣的:(51单片机)