单片机:编写十字路口交通灯程序

利用P1.1控制4个红灯,P1.2控制4个黄灯,P1.3控制4个绿灯,先绿灯亮,持续10s,之后黄灯闪烁5次,每次闪烁间隔1s,之后红灯亮,持续10s,然后黄灯闪烁5次,每次闪烁间隔1s,之后绿灯亮,重复前面过程........
求大神相助,感激不尽!

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//sbit BI=P3^4; //74Ls49的消隐引脚
sbit DXR=P1^0; //东西红
sbit DXG=P1^1; //东西绿
sbit DXY=P1^2; //东西黄
sbit NBR=P1^3; //南北红
sbit NBG=P1^4; //南北绿
sbit NBY=P1^5; //南北黄
uchar code table0[30]={0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,
0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};

void delay(uchar x)
{
uchar t;
while(x--)
for(t=0;t<10;t++);
}
uint count;
char i,j,k=1;
void main()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
P3=0xff;
while(1)
{
// BI=0;
// BI=1;

switch(k)
{

case 1: //南北方向黄灯灭,红灯亮(29-06)s,东西方向红灯灭,绿灯亮24S
P0=table0[i];
P2=table0[j+6];
NBY=1;DXR=1;NBR=0;DXG=0;
if(i==24)
{
i=0;
j=0;
k++;
// delay(0);
}
break;
case 2://南北方向红灯依然亮(05-00)s,东西方向绿灯灭,黄灯亮6s

P0=table0[i+24];
P2=table0[j+24];
DXG=1;DXY=0;
if(i==6)
{ i=0;
j=0;
k++;
}
break;
case 3: //南北方向红灯灭,绿灯亮24s,东西方向黄灯灭,红灯(30-06)s
P0=table0[i+6];
P2=table0[j];
NBR=1;DXY=1;NBG=0;DXR=0;
if(i==24)
{
i=0;
j=0;
k++;
}
break;
case 4://南北方向绿灯灭,黄灯亮6s,东西方向红灯依然亮6s
P0=table0[i+24];
P2=table0[j+24];
NBG=1;NBY=0;
if(i==6)
{
i=0;
j=0;
k=1;
}
break;
}
}
}
void timer0() interrupt 1
{
TH0=0x3c; //50ms
TL0=0xb0;
count++;
if(count==20) //20次中断为1s
{
count=0;
i++;
j++;
}
}

具体时间参数你可以自己在修改。 我的是红灯30S 绿灯24 黄灯 6S
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-11
MOV P1,#0;置灯全暗
JNB P1.0,$;P1.0=0;时则等待通电
STA:SETB P1.1;点亮红灯
LCALL DEL;延时30S
CLR P1.1;灭红灯
STEB P1.3;亮黄灯
LCALL DEL;延时5秒
SETB P1.2;亮绿灯
LCALL DEL;延时30S
CLR P1.2;灭绿灯
STEB P1.3;亮黄灯
LCALL DEL;延时5秒
SJMP STA;转STA处
DEL:MOV R7,#240;
DEL1:MOV R6,#250;
DEL2:MOV R5,#250;
DJNZ R5,$;
DJNZ R6,DEL2;
DJNZ R7,DEL1;
RET;追问

我们用的是80C51的单片机

本回答被网友采纳
第2个回答  2012-12-11
多年单片机工作经验,专业代做毕业设计,课程设计,项目设计!

c51单片机c语言交通灯的程序
使用C语言为C51单片机编写交通灯控制程序是完全可行的,通过合理地设置定时器、I\/O端口以及逻辑控制,可以实现交通灯的定时切换和状态显示。接下来,我将详细解释如何为C51单片机使用C语言编写交通灯控制程序。首先,我们需要了解C51单片机的基本结构和资源,包括其I\/O端口、定时器\/计数器等。通常,交通灯系...

十字路口交通灯控(单片机 课程设计)制
用单片机控制LED灯模拟指示。模拟东西方向的十字路口交通信号控制情况。东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。二、设计原理利用定时器T0产生每10ms一次的中断,每100次中断为1s。对两个方向分别显示红、绿、黄灯,已经相应的剩余时间即可。值得注意的是,需要意识到,A方向红灯时间=B...

单片机交通灯程序
;---黄灯闪烁5秒程序--- N1: SETB P3.0 MOV R3,#05H MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮 MOV A,#0D4H MOVX @DPTR,A N11: MOV R4,#00H N12: CJNE R4,#7DH,$ ;黄灯持续亮0.5秒 N13: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭 MOV A,#0DDH MOVX ...

我在做一个单片机交通灯程序(c51),要求是控制一个十字路口的两组红...
假设是单纯的红绿灯,无黄灯的话,设红灯30秒,绿灯30秒。需要两个状态量,方向Dir(1:东西,0:南北),东西灯颜色LightcolorEW,南北灯颜色LightcolorNS。此刻,东西方向亮红灯,则Dir=1,LightcolorEW=red,LightcolorNS=green。对相应端口赋值即可。只需要东西方向与南北方向相反。假设有黄灯,设...

如何用单片机制作交通灯
LED模拟交通灯 本例中的12只LED分成东西向和南北向两组,各组指示灯均有相向的2只红色、2只黄色与2只绿色的LED,本例中对应的LED单独进行定义,程序运行时模拟了十字路口交通信号灯得切换过程与显示效果。本例电路如下图:(呵呵 图片插入不进来)程序设计调试与实训:源程序中用6行sbit对东西和南北向...

如何用c语言编程在单片机上做交通信号灯
Hex代码。通过以上电路,下载到单片机,可直接运行。\/\/***\/\/\/程序名:十字路口交通灯控制\/\/编写人:黄庭剑\/\/初写时间:2009年1月2日\/\/程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.\/\/CPU说明:AT89C51型单片机; 24MHZ晶体振荡器\/\/完成时间:2009...

c51单片机c语言交通灯的程序
\/\/主程序 void main(){ TMOD=0X01;TH0=0XD8;TL0=0XF0;EA=1;ET0=1;TR0=1;EX0=1;EX1=1;logo();P2=0Xc3;\/\/ 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5;while(1){ key(); \/\/调用按键扫描程序 display(); \/\/调用显示程序 Buzzer();} } \/\/函数的定义部分 void key()...

单片机的红绿灯控制程序如何写啊
\/\/交通灯切换子程序 \/\/--- void Traffic_light(){ switch(Operation_type){ case 1:\/\/东西向绿灯南北向红灯亮 RED_A=1;YELLOW_A=1;GREEN_A=0;RED_B=0;YELLOW_B=1;GREEN_B=1;DelayMS(2000);Operation_type=2;break;case 2:\/\/东西向黄灯闪烁,绿灯关闭 DelayMS(300);GREEN_A=1;YELLO...

单片机交通灯的汇编程序
PORT EQU 0CFA0H ;片选地址CS0 CSEG AT 0000H LJMP START CSEG AT 4100H START: MOV A,#11H ;两个红灯亮,黄灯、绿灯灭 ACALL DISP ;调用273显示单元(以下雷同)ACALL DE3S ;延时3秒 LLL: MOV A,#12H ;东西路口绿灯亮;南北路口红灯亮 ACALL DIS...

用单片机设计制作一个模拟的十字路口交通信号灯控制系统。
1 交通灯任务、功能要求说明及总体方案介绍 1.1 交通灯任务 设计一个具有特定功能的十字路口交通灯。该交通灯上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。按开始键则开始工作,按结束键则返回“P.”状态。要求甲车道和乙车道两条交叉道路上的车辆交替运行,甲车道为主车道,每次通车时间为60秒,...

相似回答