天津**大学2014届本科生毕业设计论文
3.6车流量检测控制模块
本系统通过单片机p3.2、p3.3口控制激光对管实现对十字路口的车流量检测,通过系统上电后,交通灯系统按照正常模式运行,红灯禁行时间为50秒,绿灯通行时间为40秒,黄灯缓冲为红灯和绿灯转换时间为10秒。当车流量超过5小于等于10时红灯禁行时间为70秒,绿灯通行时间60秒,黄灯时间为10秒。当车流量为其他数时红灯禁行时间为90秒,绿灯通行时间为80秒,黄灯时间为10秒,东西方向和南北方向过程是相同的。具体的电路如下图所示:
16
天津**大学2014届本科生毕业设计论文
第四章 软件设计
4.1主程序流程图
系统的主程序开始运行时,系统初始化,检测红绿黄灯的状态字是否改变,如果改变切换红绿黄灯的状态,若没有改变看红黄绿黄灯的持续时间控制字是否改变,如果改变则改变红绿黄灯的持续时间,然后继续循环检测,若没有改变则直接循环到初始状态。主程序流程图如下所示:
开始系统初始化是RGY状态控制字是否改变否RGY持续时间控制字是否改变是改变RGY灯的持续时间
否切换RGY灯的状态具体程序如下: void main(void) {
DISNumA = GHBtime+YHtime; //A'red time DISNumB = GHBtime; //b'green time Init_Timer0();
//初始化外部定时器0中断
ExternItrptInit(); //初始化外部中断 allInterruptEna; //总中断使能 while(true) {
17
天津**大学2014届本科生毕业设计论文
}
if(FLAG_GetDisNum) { } EX0 = 1; EX1 = 1;
switch(StatusCUT) //红绿灯执行 { }
delay(); //避免数码管显示重影 ScanDigitalLed();
case 1:{
Status1();
FLAG_GetDisNum = 0; RGY_CutControl();
TableNum[3] = (DISNumA >> 1)0/10; TableNum[2] = (DISNumA >> 1); TableNum[1] = (DISNumB >> 1)0/10; TableNum[0] = (DISNumB >> 1);
}break; case 2:{
Status2();
}break; case 3:{
Status3();
}break; case 4:{
Status4();
}break; default : ;
18
天津**大学2014届本科生毕业设计论文
}
//定时器0负责切换红绿灯
void Timer0_isr(void) interrupt 1 using 1 { TH0=0x13; //重新赋值
TL0=0x88; T0Counter++; DISNumA--; DISNumB--;
FLAG_GetDisNum = 1;
}
//外部中断0中断服务函数 void Int0_isr(void) interrupt 0 using 1 { if(!(EnCarCounter-1)) { //Int1Counter=0; Int0Counter++;
}
}
//外部中断1中断服务函数 void Int1_isr(void) interrupt 2 using 1 { if(!(EnCarCounter-2))
{
19
天津**大学2014届本科生毕业设计论文
}
}
//Int0Counter=0; Int1Counter++;
4.2红绿黄灯相互转换流程图
当系统上电完成后,系统程序开始运行,起始A方向红灯亮,B方向绿灯亮,与此同时在A方向红灯亮的情况下判断车流量不同时,对A方向下次绿灯亮的时间进行调整。然后B方向红灯亮,A方向绿灯亮,同时在B方向红灯亮的情况下对B方向车流量进行判断以便于对下次B方向绿灯亮的时间进行调整。最后整个系统按照各个状态依次循环运行。
开始A方向红灯,B方向的绿灯时间A方向红灯,判断车流量不同时A方向下次绿灯时间B方向红灯,A方向的绿灯时间B方向红灯,判断车流量不同时,A方向下次绿灯时间结束
20