⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 采用外部中断模拟交通信号灯控制.c

📁 北航新c51单片机实验源代码
💻 C
字号:
#include "reg51.h"
#define ON  1
#define OFF 0

sbit SR = 0x90;  // 南北红灯
sbit SY = 0x91;  // 南北黄灯
sbit SG = 0x92;  // 南北绿灯
sbit ER = 0x93;  // 东西红灯
sbit EY = 0x94;  // 东西黄灯
sbit EG = 0x95;  // 东西绿灯
bit Flash;       // LED状态
bit STOP;

void StopInt() interrupt 0 {
  STOP = 1;
}

void Delay(unsigned char CNT) {
  unsigned int I;
  while ((CNT > 0) && !STOP) {
    for (I=0; (I < 50000) && !STOP; I++) ;
    CNT--;
  }
}

void main() {
  unsigned char I;
  TCON = 0x01;  // INT0 下沿中断
  IE   = 0x81;  // EA =1,  EX0=1
  STOP = 0;
  SR = ON;       // 南北, 东西均红灯
  SY = OFF;
  SG = OFF;
  ER = ON;
  EY = OFF;
  EG = OFF;

  while (1) {
    if (STOP) goto AllRed;
    SR = ON;     // 南北红灯, 东西绿灯
    SY = OFF;
    SG = OFF;
    ER = OFF;
    EY = OFF;
    EG = ON;
    Delay(20);
    if (STOP) goto AllRed;
    SR = ON;     // 南北红灯, 东西黄灯闪
    SY = OFF;
    SG = OFF;
    ER = OFF;
    EY = OFF;
    EG = OFF;
    Flash = OFF;
    for (I=0; I < 9; I++) {
      EY = Flash;
      Delay(1);
      Flash = !Flash;
    }
    if (STOP) goto AllRed;
    SR = OFF;    // 南北绿灯, 东西红灯
    SY = OFF;
    SG = ON;
    ER = ON;
    EY = OFF;
    EG = OFF;
    Delay(20);
    if (STOP) goto AllRed;
    SR = OFF;    // 东西红灯, 南北黄灯闪
    SY = OFF;
    SG = OFF;
    ER = ON;
    EY = OFF;
    EG = OFF;
    Flash = OFF;
    for (I=0; I < 9; I++) {
      SY = Flash;
      Delay(1);
      Flash = !Flash;
    }
  AllRed:
    if (STOP) {
      SR = ON;       // 南北, 东西均红灯
      SY = OFF;
      SG = OFF;
      ER = ON;
      EY = OFF;
      EG = OFF;
      STOP = 0;
      Delay(10);
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -