• 大小: 29KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: 其他
  • 标签:

资源简介

以单片机为核心,设计一个简单交通灯控制系统,设A车道与B车道交叉组成十字路口,A是主道,B是支道。设计要求如下: (1) 用发光二极管模拟交通信号灯、两个方向分别设置红、绿、黄3种通行指示灯,用按键开关模拟车辆检测信号。 (2) 正常情况下,A、B两车道轮流放行, A车道放行40秒,其中5秒用于警告,B车道放行25秒,其中5秒用于警告。有计时牌显示路口通行转换剩余时间。 (3) 在交通繁忙时,交通信号灯控制系统应有手控开关,可人为地改变信号灯的状态,以缓解交通拥挤状况。在B车道放行期间,若A车道有车而B车道无车,按下开关K1使A车道放行15秒;在A车道放行期间,若B车道有车而A车道无车,按下开关K2使B车道放行15秒。 (4) 有特种车辆如119、120通过路口时,系统可转为特种车辆放行,其他车辆禁止通行的状态,15s后系统恢复正常管理。 (5) 两个方向放行的时间可以通过键盘设置。

资源截图

代码片段和文件信息

#include
#define uint unsigned int
#define uchar unsigned char
uchar code SEG7[10]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f}; //段码组合共阴极
uchar code ACT[4]={0xfa0xf50xfa0xf5}; //位码组合  低有效
//*************************************************************************************

uchar sec=15cntflag=0mnstatus=0ijsign1sign2sign3ab=0;  //cnt记录一次中断;flag控制黄灯闪烁;sign作为按键按下标记;
char  c=15d=10;
//*************************************************************************************

sbit EWGREEN=P2^0;      //定义六盏交通灯的端口         
sbit EWYELLOW=P2^1;
sbit EWRED=P2^2;
sbit SNGREEN=P2^4;
sbit SNYELLOW=P2^5;
sbit SNRED=P2^6;
sbit k1=P3^0;     // 定义按键接口
sbit k2=P3^1;  
sbit k3=P3^2;
sbit k4=P3^3;
sbit k5=P3^4;
sbit k6=P3^5;
sbit k7=P3^6;
//************************调用函数定义**************************************************

void LED_ORD(uchar);
void LED_5S(uchar);
void inter0(uchar);
void display(uchar);
void display1(uchar);
void keys1();
void keys2();
void keys3();
//*************************中断程序*************************************************
void inrupt(void)
{
TMOD=0x01;
TH0 = -(50000/256);
TL0 = -(50000%256);
ET0=1;
TR0=1;
EA=1;
}

//**************************中断处理程序***************************************************

void timeout(void) interrupt 1
{
TH0=-(50000/256);
TL0=-(50000%256);
cnt++;
//**********************************//
keys1();  //控制“东西”道路时间的按键(有20和30秒的选择)
keys2();  //控制“南北”道路时间的按键
keys3();  //紧急停止通车按键
//****************************************//
switch(status)
{
case 0: m=1;n=1;i=0;j=1; break;  //status是0和1两种状态;控制是轮到“东西”显示还是“南北”显示;
case 1: m=2;n=2;i=2;j=3; break;
case 2:m=3;n=3;break;
}

if(flag==0){LED_ORD(m);}   //红绿灯正常显示
      else
      {
     if(cnt<=10){LED_5S(n);}  //黄灯闪
   else {EWYELLOW=1;SNYELLOW=1;}  // 黄灯灭
      }
if(cnt>=20)
{
sec--;cnt=0;
//*****************************//
if(status==0)
{
if(k2==0) {status=1;flag=0;sec=8;}
if(k3==0) {status=2;a=sec;flag=0;sec=4;b=0;}
}
if(status==1)
{
if(k1==0) {status=0;flag=0;sec=6;}
if(k3==0) {status=2;a=sec;flag=0;sec=4;b=1;}
}
//*************************************//
if(sec<=5)
{
  flag=1;
 if(sec==0)
  {
if(status==0)       //让两次交替循环下去
{
   flag=0;i=2;j=3; //status=0状态结束,开始status=1状态,重新赋值; 
   status=1;sec=d;
}

   //flag重置为0;flag用来提示到了5秒内闪黄灯;
else if(status==1)
{
status=0;flag=0;i=0;j=1;sec=c;  //status=1状态结束,开始status=0状态,重新赋值;

}
  else if(status==2&&b==0){sec=a;status=0;flag=0;}
  else if(status==2&&b==1){sec=a;status=1;flag=0;}
//此处多添加了i和j重新复制;是因为:

  }  //当一个状态过后到了这里,但是i和j如果不重新赋值则还是等于上个状态显示的位码;
    } //则接下去会在原来显示的位码处显示一个中断时间,又跳回新的显示位码;

}


}

void LED_ORD(uchar f)  //控制东西、南北红绿灯
{
switch(f)
{
case 1: P2=0xBE; break;
case 2: P2=0xEB; break;
case 3: P2=0xbb;break;
}
}

void LED_5S(

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2010-12-28 13:11  智能交通灯\
     文件        4736  2010-12-28 13:07  智能交通灯\jtd.c
     文件        6376  2005-03-22 15:22  智能交通灯\STARTUP.A51
     文件       14048  2010-12-28 13:07  智能交通灯\STARTUP.LST
     文件         749  2010-12-28 13:07  智能交通灯\STARTUP.OBJ
     文件      109553  2010-12-28 13:07  智能交通灯\traffic_light.DSN
     文件        2184  2010-12-28 13:07  智能交通灯\交通灯.Uv2
     文件       20480  2010-12-28 13:11  智能交通灯\说明.doc

评论

共有 条评论

相关资源