51单片机典型项目实战全能一本通(C语言版)(视频版)
上QQ阅读APP看书,第一时间看更新

例3-6 开关检测案例2

如图3-7所示,单片机P1.0和P1.1引脚接有两个开关S0和S1,两只脚上的高低电平共有4种组合,这4种组合分别控制P2.0~P2.3引脚上的4只LED(LED0~LED3)点亮或熄灭。当S0、S1均闭合时,LED0亮,其余灭;S0打开、S1闭合时,LED1亮,其余灭;S0闭合、S1打开时,LED2亮,其余灭;S0、S1均打开时,LED3亮,其余灭。编程实现此功能。

图3-7 开关检测案例2的原理电路

参考程序如下。

  #include <reg51.h>            // 包含头文件reg51.h  
  void  main(  )                // 主函数main( ) 
  {  
      char state;
      do 
      {  
          P1=0xff;                      // P1口为输入 
          state=P1;                     // 读入P1口的状态,送入state 
          state=state&0x03;             // 屏蔽P1口的高5位 
          switch (state)                // 判断P1口低2位的状态
          {  
             case 0: P2=0x01; break;    // 如果键值为0,则点亮P2.0脚上的LED0  
             case 1: P2=0x02; break;    // 如果键值为1,则点亮P2.1脚上的LED1  
             case 2: P2=0x04; break;    // 如果键值为2,则点亮P2.2脚上的LED2  
             case 3: P2=0x08; break;    // 如果键值为2,则点亮P2.3脚上的LED3  
          }  
      }while (1); 
  }

程序段中用到了循环结构控制语句do…while和switch…case。