资源简介
(1)支干道交替通行,主干道每次放行30秒,支干道每次放行20秒;
(2)绿灯亮时表示可以通行,红灯亮时表示禁止通行;
(3)每次绿灯变红灯时,黄灯先亮5秒(此时另一干道上的红灯不变);
(4)十字路口要求有数字显示,作为时间提示,以便人们更直观地把握时间,具体要求主、支干道通行时间及黄灯亮的时间均以秒为单位做减数器;
在黄灯亮时,原红灯按1HZ的频率闪烁;
当有急救车到达时,路口的信号灯全部变红,让急救车通过;假定急救车通过时间为10s,急救车通过后,交通灯恢复先前状态

代码片段和文件信息
#include “reg52.h“
#define uint unsigned int
#define uchar unsigned char
#define BIT(X) (1 << X)
sbit G1 = P0^0;
sbit R1 = P0^1;
sbit Y1 = P0^2;
sbit G3 = P0^6;
sbit R3 = P0^7;
sbit Y3 = P0^5;
sbit L0 = P3^0;
sbit L1 = P3^1;
sbit L4 = P3^4;
sbit L5 = P3^5;
uchar const duanma[] = {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};
uchar const duanma1[] = {0xbf0x860xdb0xcf0xe60xed0xfd0x870xff0xef};
uint countsecEXNum;
bit MainFlagSecondFlagEXFlag0EXFlag1;
void delay_ms(unsigned int i)
{
unsigned int j;
while(i--)
{
for(j=89;j>0;j--);
}
}
void DisMainNum(uint i)
{
// P2 = 0XFF;
P2=duanma[i/10];
L0 = 0;
delay_ms(3);
L0 = 1;
P2=duanma[i%10];
L1 = 0;
delay_ms(3);
L1 = 1;
}
void DisSecondNum(uint i)
{
// P2 = 0XFF;
P2=duanma[i/10];
L4 = 0;
delay_ms(3);
L4 = 1;
P2=duanma[i%10];
L5 = 0;
delay_ms(3);
L5 = 1;
}
void DisMain()
{
if(sec < 30)
{
G1 = 0;
R3 = 0;
// R2 = 1;
Y1 = 1;
R1 = 1;
Y1 = 1;
TR0 = 1;
DisMainNum(30 - sec);
DisSecondNum(30 - sec);
}
// DisMainNum(30 - sec);
if(sec >= 30)
{ DisMainNum(35 - sec);
DisSecondNum(35 - sec);
G1 = 1;
// G2 = 1;
// Y2 = 0;
Y1 = 0;
if(sec%2 == 0)
{
R3 = 0;
// R4 = 0;
}
else if(sec%2 == 1)
{
R3 = 1;
// R4 = 1;
}
if(sec == 35)
{
MainFlag = 0;
SecondFlag = 1;
G1 = 1;
// G2 = 1;
// R2 = 1;
Y1 = 1;
R1 = 1;
// Y2 = 1;
TR0 = 0;
sec = 0;
}
}
}
void DisSecond()
{
if(sec < 20)
{
G3 = 0;
// G4 = 0;
R1 = 0;
// R2 = 0;
R3 = 1;
Y3 = 1;
// R4 = 1;
// Y4 = 1;
TR0 = 1;
DisSecondNum(20 - sec);
DisMainNum(20 - sec);
}
//DisSecondNum(sec);
if(sec >= 20)
{
DisSecondNum(25 - sec);
DisMainNum(25 - sec);
G3 = 1;
// G4 = 1;
Y3 = 0;
// Y4 = 0;
if(sec%2 == 0)
{
R1 = 0;
// R2 = 0;
}
else
{
R1 = 1;
// R2 = 1;
}
if(sec == 25)
{
MainFlag = 1;
SecondFlag = 0;
G3 = 1;
// G4 = 1;
R3 = 1;
Y3 = 1;
// R4 = 1;
// Y4 = 1;
TR0 = 0;
sec = 0;
}
}
}
void EXMain()
{
EXNum = 10;
G1 = 1;
G3 = 1;
R1 = 0;
R3 = 0;
while(EXNum)
{
DisMainNum(EXNum);
DisSecondNum(EXNum);
}
EXFlag0 = 0;
EXNum = 10;
}
void EXSecond()
{
EXNum = 10;
G1 = 1;
G3 = 1;
R3 = 0;
R1 = 0;
// R2 = 0;
while(EXNum)
{
DisSecondNum(EXNum);
DisMainNum(EXNum);
}
EXFlag1 = 0;
EXNum = 10;
}
void main()
{
EA = 1;
TMOD = 0X01;
ET0 = 1;
TR0 = 1;
TH0 = 0X3C;
TL0 = 0XB0;
EX0 = 1;
IT0 = 1;
EX1 = 1;
IT1 = 1;
MainFlag = 1;
while(1)
{
if(EXFlag0)
{
EXMain();
}
if(EXFlag1)
{
EXSecond();
}
if(MainFlag == 1)
{
DisMain();
}
else if(SecondFlag == 1)
{
DisSecond();
}
}
}
void ex0() interrupt 0 //
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-12-12 22:01 交通灯\
文件 115328 2012-12-12 17:42 交通灯\Last Loaded 交通灯仿真图.DBK
文件 3340 2012-12-12 22:01 交通灯\src.c
文件 11169 2012-12-12 22:01 交通灯\src.LST
文件 10836 2012-12-12 22:01 交通灯\src.OBJ
文件 6376 2009-05-07 14:37 交通灯\STARTUP.A51
文件 14048 2012-12-12 22:01 交通灯\STARTUP.LST
文件 749 2012-12-12 22:01 交通灯\STARTUP.OBJ
文件 9689 2012-12-12 22:01 交通灯\交通灯
文件 2528 2012-12-12 22:01 交通灯\交通灯.hex
文件 57 2012-12-12 22:01 交通灯\交通灯.lnp
文件 16748 2012-12-12 22:01 交通灯\交通灯.M51
文件 569 2012-12-12 22:01 交通灯\交通灯.plg
文件 56197 2012-12-12 22:01 交通灯\交通灯.uvopt
文件 13401 2012-12-07 22:19 交通灯\交通灯.uvproj
文件 56197 2012-12-12 17:43 交通灯\交通灯_uvopt.bak
文件 0 2012-12-07 21:36 交通灯\交通灯_uvproj.bak
文件 115328 2012-12-12 17:42 交通灯\交通灯仿真图.DSN
文件 742 2012-12-12 17:42 交通灯\交通灯仿真图.PWI
相关资源
- 基于proteus的单片机仿真--交通灯控制
- 基于单片机交通灯设计
- 基于VHDL的交通灯控制器设计
- 数字电路课程设计—交通灯
- 8086交通灯 Proteus原理图及程序
- Quartus EDA交通灯控制电路的设计实训报
- Quartusii十字交叉路口三色交通灯设计
- 微机原理 十字路口交通灯控制 prot
- 基于Verilog的交通灯设计EDA课程设计
- 数电交通灯 Multisim 13.0 仿真程序已验
- 基于51单片机的交通灯设计
- 交通灯原理图、PCB3d图、Solidworks外壳
- 基于AT89C51的十字路口交通灯设计pro
- 交通灯模拟程序十字路口
- 十字路口交通灯设计
- 基于Multisim10的十字路口交通灯控制器
- 基于51单片机的智能十字路口交通灯系
- 十字路口交通灯.pdsprj
- 交通灯控制实验(计算机组成原理)
- 数电设计 交通灯控制逻辑电路设计
- 基于LabVIEW的交通灯设计,报告,程序
- 基于Multisim10的十字路口交通灯控制器
- 基于51单片机的十字路口交通灯Protu
- 数字逻辑课程设计 交通灯
- VHDL简易交通灯设计 quartus 2
- 十字路口交通灯系统控制源代码
- 十字路口交通模拟
- 微机原理 8086 十字路口交通灯控制
- VHDL交通灯
- 8255应用—交通灯的设计
评论
共有 条评论