(急)利用51单片机设计红绿灯控制系统

请帮我利用51单片机设计一个交通红绿灯控制系统具体的程序。
希望知道的朋友给设计一下,加上必要的文字说明说明的好能让我读懂。
谢谢!
我编的不知道对不对,需要的朋友可以结合着下面的回答看一下!
#include"reg51.h"
#include"my_define"
ORG 0000H
LIJMP START
ORG 0001H
LIJMP TO_ZDZCS ;中断子程序
ORG 0050H
START:
MOV SP,#06FH
CALL CSH_ZCX ;初始化子程序
MAIN_LOOP:
MOV A,SEC
XRL A,SEC_OLD
JZ MAIN_NEXT
CALL XXXX1_ZCX
MOV SEC_OLD,SEC
MAIN_NEXT:
LIJMP MAIN_LOOP
TO_ZDZCS:
PUSH A
PUSH PSW
MOV TLO,#0F6H
MOV THO,#0D8H
INC MS100
CJNE A,#100,TO_TC ;退出
MOV MS100,#00H
INC SEC
TO_TC:
RET
CSH_ZCX:
CLR A
MOV MS100,A
MOV SEC,A
MOV SEC_OLD,A
MOV THO,#0D8H
MOV TLO,#0FOH
MOV TMOD,#00000001B
SETB TRO
SETB ETO
SETB EA
RET
MY_DEFINE:
SEC EQU 30H
SEC_OLD EQU 31H
MS100 EQU 32H
ADRO EQU 33H
XXXX1_ZCX:
MOV A,ADRO
MOV DPTR,#RGY_TAB
MOV A,@A+DPTR
MOV P1,A
INC ADRO
MOV A,ADRO
CJINE A,#60,XXX1_NEXT
MOV ADRO,#00H
XXXX1_NEXT:
RET
RGY_TAB:
DB 1111 1110B
DB 1111 1101B
.
.
.

#include"reg51.h"老大这是C里用的,你用汇编不需要调用什么库.
1.我做的是12个灯的.四个方向各3个(红,绿,黄),每个模块说的也比较清楚了,如果不是你想要的可以在这个基础上改改
2.灯你可用专门的驱动芯片驱动,也可以自己做简单的电路驱动.
3.有问题可以发消息给我.

/*********************************************************************
P1^0 P1^1 P1^2 P1^3 P1^4 P1^5 P1^6 P1^7 P3^0 P3^1 P3^2 P3^3
东红 东绿 东黄 西红 西绿 西黄 南红 南绿 南黄 北红 北绿 北黄
0 1 1 0 1 1 0 1 1 0 1 1
初始化;P1=0xB6 P3=0x0D;四路口红灯亮
**********************************************************************/

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
sbit ered=P1^0;
sbit egreen=P1^1;
sbit eyellow=P1^2;
sbit wred=P1^3;
sbit wgreen=P1^4;
sbit wyellow=P1^5;
sbit sred=P1^6;
sbit sgreen=P1^7;
sbit syellow=P3^0;
sbit nred=P3^1;
sbit ngreen=P3^2;
sbit nyellow=P3^3;
void inti(void);
void start(void);
void delay500ms(void);
uchar count;
uchar timecount;
bit flag;

void main ()
{
count=1;
timecount=10;
flag=0;
TMOD=0x01;
TH0=0X3C;
TL0=0XB0;
EA=1;
ET0=1;
TR0=1;
inti();
start();
while(1)
{
if (count>=17)
{
if(timecount<=3)
{
if(flag==0)//flag=0说明东西绿灯 南北红灯 应东西黄灯闪
{ eyellow=0;
wyellow=0;
delay500ms();
eyellow=1;
wyellow=1;
}
else
{
syellow=0;//flag=1说明东西红灯 南北绿灯 应南北黄灯闪
nyellow=0;
delay500ms();
syellow=1;
nyellow=1;
}
}
}
}
}

/*********************************************************************
P1^0 P1^1 P1^2 P1^3 P1^4 P1^5 P1^6 P1^7 P3^0 P3^1 P3^2 P3^3
东红 东绿 东黄 西红 西绿 西黄 南红 南绿 南黄 北红 北绿 北黄
0 1 1 0 1 1 0 1 1 0 1 1
初始化;P1=0xB6 P3=0x0D;四路口红灯亮
**********************************************************************/
void inti(void)
{
P1=0xB6;
P3=0x0D;
}

/*********************************************************************
P1^0 P1^1 P1^2 P1^3 P1^4 P1^5 P1^6 P1^7 P3^0 P3^1 P3^2 P3^3
东红 东绿 东黄 西红 西绿 西黄 南红 南绿 南黄 北红 北绿 北黄
1 0 1 1 0 1 0 1 1 0 1 1
进入正常工作状态;P1=0xAD P3=0x0D;东西绿灯 南北红灯
**********************************************************************/
void start(void)
{
P1=0XAD;
P3=0X0D;
}

/**********延时程序************/

void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--);
for(k=81;k>0;k--);

}

/****************定时中断************************/
void timer_0() interrupt 1 using 2
{
TH0=0X3C;
TL0=0XB0;
count++;
if (count==20)
{
count=1;
timecount--;
}

else
goto return1;

if (timecount==0)//30秒时间到
{
flag=~flag;
timecount=10;
ered=~ered; //取反改变路中状态
egreen=~egreen;
wred=~wred;
wgreen=~wgreen;
sred=~sred;
sgreen=~sgreen;
nred=~nred;
ngreen=~ngreen;
}

return1:_nop_();

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-04-21
ORG 0000H
MOV DPTR ,#0B00H ;选中8155的命令寄存器,P2.2接CE端,p2.1接I/O
MOV A,#01H ;命令寄存器设为01H=000000001B D0=1A口输出,D1=0B口输入
MOVX @DPTR,A
LOOP :MOV DPTR,#0B01H
LED0:MOV A,#0FFH ;第一组灯点亮
MOVX @DPTR,A
MOV R4,#09H
LOOP0:ACALL DELAY
DJNZ R4,LOOP0
MOV A,#11011110B
MOVX @DPTR,A
ACALL DELAY
ACALL DELAY
ACALL DELAY
LED1:ACALL DELAY ;第二组灯点亮
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
MOV A,#0FFH
MOVX @DPTR,A
ACALL DELAY
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
MOV A,#0FFH
MOVX @DPTR,A
ACALL DELAY
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY

LED2:MOV R5,#09H ;第三组灯点亮
LOOP1:ACALL DELAY
DJNZ R5,LOOP1
MOV A,#11110011B
MOVX @DPTR,A
ACALL DELAY
ACALL DELAY
ACALL DELAY
SJMP LOOP
DELAY:MOV R3,#02H
LOP3:MOV R1,#85H
LOP1:MOV R2,#0FAH
LOP2:DJNZ R2,LOP2
DJNZ R1,LOP1
DJNZ R3,LOP3
RET
END本回答被提问者采纳
第2个回答  2008-04-14
hg

基于51单片机的红绿灯原理
;p2口为东西绿灯 ;p3南北红灯 ;p4南北黄灯 ;p5南北绿灯 ;绿灯停留3s;黄灯闪烁5次,每次0.2s,红的停留4s ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV DPTR,#B1 MOV R2,#4 MOV A,#0H F3:MOV R1,A MOVC A,@A+DPTR JNB ACC.4,SS1 ;判断东西方向黄灯是否亮,若亮则转移到黄灯闪烁程...

基于51单片机控制交通灯的电路图与C语言程序
红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。四个方向各有一个红、黄、绿显示和两个数码管。东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。三、硬件电路设计 此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管...

求大神解答,用51单片机汇编语言实现一个红绿灯的程序,不是一个路口的...
;某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。;紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。;工作寄存器及存储单元分配 ;1.工作寄存器 ;R2设置为定时器定时中断次数,R6、R7用于延时程序中的寄存器 ;2.片内存储单元 ;30H、31H作为两组数码管显示数据存储单元;32H、33H作为交...

MSC-51单片机交通灯论文
编写好源程序后,采用keil软件对其进行编译,使其生成单片机可以识别的.hex文件,再把此文件导入单片机89C51中即可。硬件电路和源程序及目标文件都设计完后,我们可以采用相关软件进行仿真,以使交通信号灯控制系统的设计更加准确,可靠。设计者采用PROTUES软件进行仿真调试,仿真时注意此软件使用,从而进一步熟悉...

编程加实践(单片机):求利用89C51 CPU编写红绿灯程序
回答:^_^,安装一个KEILC程序,它的安装目录下面有一个交通灯的完整例子 ^_^

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

急求:51单片机 交通灯控制
MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1 MOV TH1,#00H ;T1计数器清零 MOV TL1,#00H SETB TR1 ;启动T1计时器 SETB EX1 ;允许INT1中断 SETB IT1 ;选择边沿触发方式 MOV DPTR ,#0003H MOV A, #80H ;给8255赋初值,8255工作于方式0 MOVX @DPT...

51单片机交通灯设计,求程序和Proteus仿真图,急需请大神们帮帮忙啊_百...
已按要求完成,两个中断按钮。望采纳。

单片机交通灯程序
采用51单片机作为系统的MCU,基本完成控制两组交通指示灯交替亮 每个街口有左拐、直行及行人三种指示灯。直行灯每个灯有红、黄、绿三种颜色。自行车与汽车共用左拐和直行灯。首先东西向直行绿灯和行人灯亮1分钟,左转灯亮30秒,黄灯亮5秒(同时南北向红灯亮95秒),然后东西向红灯亮95秒钟(同时首先南北...

单片机交通灯的设计与方法,要具体,只要文字,不要图片谢谢了,大神帮忙啊...
本系统采用MSC-51系列单片机ATSC51和可编程并行I\/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过8255的PC口输出至双位数码管);车辆闯红灯...

相似回答