设计思路:

①:按下按钮1,左转向灯闪烁。

②:按下按钮2,右转向灯闪烁。

③;按键1,2同时按下,开启双闪(同频率)

仿真元器件清单:

AT89C51

BUTTON

CAP

CRYSTAL

RES

LED-BLUE

LED-YELLOW

SW-SPDT

实现程序:

  #include<reg51.h>
  #define time 20000
  sbit LED_left1=P0^0;
  sbit LED_left2=P0^1;
  sbit LED_right1=P0^2;
  sbit LED_right2=P0^3;
  sbit P3_0=P3^0;
  sbit P3_1=P3^1;
  void delay(unsigned int i)
  { while(i--);}
  void main()
  {  
    while(1)
    {
        P3_0=1;
        P3_1=1;
        // 定义p3输入口表达式,并置1

       switch(P3)   
                {
        case 0xfc:
        // 1111 1100
          LED_left1=0;LED_left2=0;
          LED_right1=0;LED_right2=0;
          break;
          // 打开双闪
        case 0xfd: 
        // 1111 1101
          LED_right1=0;LED_right2=0;
          LED_left1=1;LED_left2=1;
          break;
          // p3,0端口置0时,打开右转向灯,蓝灯
        case 0xfe: 
        // 1111 1110
          LED_left1=0;LED_left2=0;
          LED_right1=1;LED_right2=1;
          break;
          // p3,1端口置1时,打开左转向灯,黄灯
        case 0xff:
        // 1111 1111
          LED_left1=1;LED_left2=1;      
          LED_right1=1;LED_right2=1;      
          break;
          // 关闭转向灯
                 }
        delay(20000);
          LED_left1=1;LED_left2=1;      
          LED_right1=1;LED_right2=1;
        delay(20000);
        }
  }

:上面代码复制,可能会有额外乱码,需要自行审查

实现仿真图:

实现效果视频: