1. 基于51单片机控制交通灯的电路图与C语言程序
思路:
红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。四个方向各有一个红、黄、绿显示和两个数码管。
东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。
三、硬件电路设计
此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。
四、软件程序(C语言)
以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。
//*****************************//
//程序名:十字路口交通灯控制
//编写人:黄庭剑
//初写时间:2009年1月2日
//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.
//CPU说明:AT89C51型单片机;24MHZ晶体振荡器
//完成时间:2009年1月6日
//*****************************//
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
sfrp0=0x80;
sfrp1=0x90;
sfrp2=0xA0;
sfrp3=0xb0;//这部分内容其实在“#include<reg51.h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。其实两者是一样的。
sbitsw=p0^0;
sbitOE=P0^6;
sbitLE=P0^7;//74LS373锁存器控制端定义
chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;
//函数声明begin
voiddelay1(intcount);
voiddelay_long(intnumber1,intnumber2);
voidpeople_car_drive();
//函数声明end
//***********************//延时子程序
voiddelay1(intcount)
{inti;
for(i=count;i>0;i--)
{;}
}
voiddelay_long(intnumber1,intnumber2)
{
inta,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{_nop_();}
}
}
//**********************//延时子程序
voidpeople_car_drive()
{
intp_1=2,i,j=9,p_2=6;//****************//行人通行时,延时20秒
p2=0x09;//南北红灯亮
p3=0x24;//东西绿灯亮
while(p_1-->0)
{LE=1;
OE=0;
if(p_1==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break;//减到3时退出循环,让其黄灯闪烁显示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
//*******************************************************************************//
p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是车辆通行时延时60秒//
p2=0x24;//南北绿灯亮
p3=0x09;//东西红灯亮
while(p_2-->0)
{LE=1;
OE=0;
if(p_2==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break;//减到2时退出循环
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);//南北黄灯闪烁三秒完毕
}
voidmain()//主函数入口处
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00;//初始化各端口
{while(1)
{
if(sw==0)
{people_car_drive();}
else
{
p2=0x00;
p3=0x00;//关闭所有交通灯
}
}
}
}
详情访问:http://hi..com/hjiannew/
2. 基于单片机的交通灯系统设计 论文
这些方向都可以些,但是plc也可以
你觉得如
3. 如何用单片机AT89S51设计交通灯
这个完整的暂时没有,不过思路可以介绍一下:
主程序主要就是处理哪个灯亮
子程序主要就是显示。灯和数码管
系统图 就是一个芯片加几个线很简单的,如果有深度要求可以探讨
4. 基于89C51单片机的交通灯设计报告
可能不是很符合你的要求,看一看能不能用。
功能:红灯10秒,黄灯2秒。照着你的要求改一改。
看不清的话,留下邮箱,发给你。
#include"reg51.h"
#defineuintunsignedint
#defineucharunsignedchar
sbitla=P2^1;
sbitwela=P2^2;
sbitp1_0=P1^0;
ucharcodedat[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
ucharcodetem[]={0x01,0x02,0x04,0x08,0x10,0x20};
uinti;
ucharnum,st;
voiddelay(uint);
voidinit();
voidmain()
{
init();
la=1;
P0=0xc0;
la=0;
while(1)
{
if(i==1000)
{
i=0;
num++;
if(st==0)
{
if(num==10)
{
num=0;
st=1;
P2=0x40;
}
}
if(st==1)
{
if(num==2)
{
num=0;
st=2;
P2=0x30;
}
}
if(st==2)
{
if(num==10)
{
num=0;
st=3;
P2=0x40;
}
}
if(st==3)
{
if(num==2)
{
num=0;
st=0;
P2=0x88;
}
}
la=1;
P0=dat[num];
la=0;
delay(5);
}
}
}
//程序初始化
voidinit()
{
EA=1;//开总中断允许
EX0=1;//外部中断0允许
IT0=0;//外部中断0为低电平触发方式
TMOD=0X01;//设定T0为16位定时器
ET0=1;//定时器T0中断允许
TR0=1;//启动定时器T0
TH0=0XFC;
TL0=0X66;
i=0;
num=0;
st=0;
p1_0=1;
wela=1;
P0=0x01;
wela=0;
P0=0xff;
P2=0x88;
}
//延时约为Z毫秒
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=113;y>0;y--);
}
//外部中断0
voidint0()interrupt0
{
P2=0x28;
st=0;
i=0;
num=0;
la=1;
P0=0xc0;
la=0;
delay(10);
P2=0x88;
}
//定时器T0精确1ms
voidtimer0()interrupt1
{
TH0=0XFC;
TL0=0X66;
i++;
}
5. 基于51单片机的红绿灯设计
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
6. 基于89s51单片机的交通灯控制设计的汇编程序
没办法,我只有一个C的,刚开始学单片机的时候,一直用的汇编,后来,转学C了,觉得C要方便很多。网上应该都有啊,很多例子的呀
这样吧,如果你需要,给我一个邮箱,我可以发到你邮箱,你可以参考参考,语言只是一种方式,最关键是思路和算法。
7. 我准备用51单片机做交通灯设计选择哪个单片机合适,而且需要做实物哪个更方便那
用ATMEGA8吧,免费的IDE,GCC编译器!网上先去买个最小ATMEGA8系统,让后改改,搞一搞就行了。
8. 如何运用51单片机设计一个交通灯系统
运用定时器,数码管LED和8255A设计一个交通灯控制系统! 1.南北绿灯,东西红灯,20秒 2.南北转黄灯,东西红灯,5秒 3.南北红灯,东西绿灯,20秒 4.南北红灯,东西转黄灯,5秒 5.循环步骤1
9. 用单片机AT89C51设计一个交通灯系统
交通灯 有 C 语言,有汇编
发了