用户工具

站点工具


侧边栏

抱歉,您没有权限增加页面
3.单片机c语言:6.switch-case语句

八位流水灯学单片机C语言之switch case语句

除了if else语句,C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为

switch(表达式)
{  
    case 常量表达式1:  
         语句1;
         break;
    case 常量表达式2:  
         语句2;
         break;
     … 
    case 常量表达式n:  
         语句n;
         break;
    default:  
         语句n+1;
        }

其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后 的语句。看个例子:输入几就输出星期几。

main(){
       int a;
       printf("input integer number:    ");
       scanf("%d",&a);
       switch (a){
      case 1:printf("Monday\n");break;
      case 2:printf("Tuesday\n"); break;
      case 3:printf("Wednesday\n");break;
      case 4:printf("Thursday\n");break;
      case 5:printf("Friday\n");break;
      case 6:printf("Saturday\n");break;
      case 7:printf("Sunday\n");break;
      default:printf("error\n");
    }
}

在使用switch语句时还应注意以下几点:
1)在case后的各常量表达式的值不能相同,否则会出现错误。
2)在case后,允许有多个语句,可以不用{}括起来。
3)各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
4)default子句可以省略不用。
5)在case语句结束应要加break 语句,否则将不能跳出switch语句,输出不应有的结果。

下面我要提一下break和continue语句,先了解下:
break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。

当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起。即满足条件时便跳出循环。

continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。其执行过程可用下图表示。

关于switch就说这么多,下面来看在单片机中的例子,使用switch case语句实现流水灯。

#include<stc12.h> //STC12系列头文件 复制到工程目录下
sbit LEDK = P1^4;// 控制三极管基极

void main(void)
{
  unsigned char i=0; //声明变量i
  unsigned int k;
  LEDK=0;  //置0使PNP型三极管导通LED负极接地
  P0M1=0x00;
  P0M0=0xff; //P0口全部设置为推挽输出 见手册87页 IO口模式配置
  while(1)
  {
	 switch(i) //i等于几就执行相应的case语句块
	 {
	   case 0:
	   {
	    P0=0x01; //点亮最低位的LED 下面的语句八个LED依次点亮
	   }break;	 //执行完case遇到break就跳出当前switch循环
	   case 1:
	   {
	    P0=0x02; 
	   }break;
	   case 2:
	   {
	    P0=0x04; 
	   }break;
	   case 3:
	   {
	    P0=0x08; 
	   }break;
	   case 4:
	   {
	    P0=0x10; 
	   }break;
	   case 5:
	   {
	    P0=0x20; 
	   }break;
	   case 6:
	   {
	    P0=0x40; 
	   }break;
	   case 7:
	   {
	    P0=0x80; 
	   }break;	   
	 
	   default:
	   break;
	 }
	
	  i++; //执行完上一个case后出来i增1 
	  if(i==8)i=0; //i=8 八个case执行完 i赋值为0 继续从头开始
	  for(k=0;k<50000;k++);  //延时一会 
  }
}
  以上代码完整工程在\STC51 Discovery\实验例程\基础实验\实验九
3.单片机c语言/6.switch-case语句.txt · 最后更改: 2017/02/28 13:47 由 wawooo