我在做一个单片机交通灯程序(c51),要求是控制一个十字路口的两组红绿灯,我用了8255芯片

作者&投稿:酉闵 (若有异议请与网页底部的电邮联系)
基于51单片机控制交通灯的电路图与C语言程序~

思路:
红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。四个方向各有一个红、黄、绿显示和两个数码管。
东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。
三、硬件电路设计
此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。
四、软件程序(C语言)
以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。
//*****************************//
//程序名:十字路口交通灯控制
//编写人:黄庭剑
//初写时间:2009年1月2日
//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.
//CPU说明:AT89C51型单片机; 24MHZ晶体振荡器
//完成时间:2009年1月6日
//*****************************//
#include
#include
#include
sfr p0 = 0x80;
sfr p1 = 0x90;
sfr p2 = 0xA0;
sfr p3 = 0xb0; //这部分内容其实在“#include”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。其实两者是一样的。
sbit sw = p0^0;
sbit OE =P0^6;
sbit LE =P0^7; //74LS373锁存器控制端定义
char display[]={ 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99 }; //p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;
//函数声明 begin
void delay1(int count);
void delay_long(int number1,int number2);
void people_car_drive();
//函数声明end
//***********************//延时子程序
void delay1(int count)
{ int i;
for(i=count;i>0;i--)
{ ;}
}
void delay_long(int number1,int number2)
{
int a,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{ _nop_(); }
}

}
//**********************//延时子程序
void people_car_drive()
{
int p_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); //南北黄灯闪烁三秒完毕
}

void main() //主函数入口处
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00; //初始化各端口
{ while(1)
{
if(sw==0)
{ people_car_drive();}
else
{
p2=0x00;
p3=0x00; //关闭所有交通灯
}
}

}
}
详情访问:http://hi.baidu.com/hjiannew/

哥们啊 你是不是做毕业设计啊,那还不自己好好做啊,这个作出来很有用啊,这个既不需要扩展口,真的很简单啊,好好做吧,给你个图看看吧,基本上就是这个电路就行了啊
程序也很简单,用定时器就好了啊,中断也用的到,加油啦,支持你,Myfriends!!!(这个图中用了8个LED,做交通灯再加上4个就行了,口也够)

给你一个思路:
假设是单纯的红绿灯,无黄灯的话,设红灯30秒,绿灯30秒。需要两个状态量,
方向Dir(1:东西,0:南北),东西灯颜色LightcolorEW,南北灯颜色LightcolorNS。
此刻,东西方向亮红灯,则Dir=1,LightcolorEW=red,LightcolorNS=green。对相应端口赋值即可。只需要东西方向与南北方向相反。
假设有黄灯,设红灯30秒,绿灯25秒,黄灯5秒。此刻,东西方向亮红灯,则Dir=1,LightcolorEW=red,前25秒LightcolorNS=green,后5秒LightcolorNS=yellow。由于新加入了绿灯转黄灯,则要再加入一个状态量,绿灯结束状态,黄灯根据绿灯结束状态启动,计时结束转红灯。对相应端口赋值即可。只需要东西方向与南北方向相反。


设计一个以单片机为核心的交通灯控制器。 要求红黄绿灯,各自闪烁时间...
实验内容:用并口实现模拟交通灯;要求:东西向的绿灯亮,接着该方向的黄灯闪烁5次,然后红灯亮;同时南北向的绿灯亮,接着该方向的黄灯闪烁5次,然后红灯亮;如此重复。转向灯可以不需要。include<reg51.h> sbit r1=P2^0;sbit y1=P2^1;sbit g1=P2^2;sbit r2=P2^3;sbit y2=P2^4;sbit g...

求一个用汇编语言编写单片机简易交通灯程序。求高手帮下忙谢谢了...
;--- ;程序实现功能 ;西南北路口直行与转弯交替通行,数码管显示直行通行倒计时,红绿黄灯显示包括人行道在内的道路交通状态。;某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。;紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。;工作寄存器及存储单元分配 ;1.工作寄存器 ;R2设置为定...

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

用单片机设计制作一个模拟的十字路口交通信号灯控制系统。
时钟电路用来产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。通过在芯片的外部XTAL1和XTAL2两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡电路。时钟电路为单片机产生时钟脉冲序列,本设...

单片机控制十字路口交通灯程序设计
�8�5 10个单位时间,南北红,东西黄;�8�5 60个单位时间,南北绿,东西红;�8�5 10个单位时间,南北黄,东西红;解:用P1端口的6个引脚控制交通灯,高电平灯亮,低电平灯灭。代码 include <at89x52.h> \/\/sbit用来定义一个符号位地址...

单片机的课程设计交通等的怎么写
内容:1、程序目的:使用定时器学习 倒计时 红绿灯原理 主要程序与倒计时相同 2、硬件要求:数码管、晶振12M 3、P1口连接至LED用于显示红绿灯(p1接锁存器,八段数码管的位信号和断信号都通过p1口锁存起来,这样可以节省端口)4、数码管用于显示时间 ---*\/ include<reg52.h>\/\/包含头文件,一般情况...

基于单片机的交通信号灯控制系统_基于单片机的交通信号灯控制系统设计...
覆盖路口控制机类型广泛,可以选择我公司出厂的HD202系列、HD204系列、HD207系列交通信号控制器,给用户最大的选择余地。建设成本低,本系统涵盖了我公司所有档次的信号机,在已经安装了电子警察的道路交叉口,可以借用电子警察网络资源,避免了重复投资。控制路口点数多,可以同时控制多达180个以上路口的交通...

最简单的单片机制作交通灯需要的元器件
89S51 11.0592M 晶振 1K电阻 、10UF电容 12个灯,红、黄、绿各四个,12个1K电阻 ,十字路口嘛。蜂鸣器一个。按键一个,按键复位 采用AT89s51型号的单片机,由于交通十字路口的对称性,所以一个引脚可以同时控制两个灯,将发光二极管分别接到P1各个引脚,在其中加入一个时振荡当电路,来控制时间,在...

急需一个单片机交通灯程序设计
\/ Keil C 89S51 交通信号控制程序 (C) 版权所有 Dai_Weis@hotmail.com \/ include "reg51.h"define UINT unsigned int define ULONG unsigned long define UCHAR unsigned char \/ 信号灯变量 南北方向绿灯 sbit n_bike_g = P1^0; \/\/自行车 sbit n_right_g = P1^1; \/\/右转 sbit n_up_g ...

单片机做交通灯
1. 任务分析:交通灯每2(4)秒变化一次,基本状态如下表 序号 状态 PB PC 1 4 南北红 东西绿 1000 01100001 2 3 2 东西绿闪 0000 01000001 4 2 东西黄 0100 01010001 5 4 南北绿 东西红 0011 00001100 6 7 2 南北绿闪 0010 00001000 8 2 南北黄 0010 10001010 红绿黄灯对应表 PB3 ...

隆子县18991674637: 我在做一个单片机交通灯程序(c51),要求是控制一个十字路口的两组红绿灯,我用了8255芯片 -
缪怜邦德: 给你一个思路:假设是单纯的红绿灯,无黄灯的话,设红灯30秒,绿灯30秒.需要两个状态量,方向Dir(1:东西,0:南北),东西灯颜色LightcolorEW,南北灯颜色LightcolorNS.此刻,东西方向亮红灯,则Dir=1,LightcolorEW=red,LightcolorNS...

隆子县18991674637: 求用C语言编写的交通灯程序,C51单片机控制,无左转右转 -
缪怜邦德: //以下代码经过Keil C51软件调试通过 #include "reg51.h" //头文件包含//宏定义 #define uint unsigned int #define uchar unsigned char#define ON 0 //0的时候灯亮 #define OFF 1 //1的时候灯亮//管脚定义 //南北道 黄灯亮3秒 红灯亮 30秒 黄灯3秒 ...

隆子县18991674637: 单片机简单交通灯怎么编程?? -
缪怜邦德: 红、黄、绿. 用LED来显示. 有专门的控制系统, 细节不说了. 编程就是 if (red) // 如果是红灯 yellow = false; green = false; else if (yellow) // 如果是黄灯 green = true; car_crash = true; sleep(3); // 3秒 red = true; green = false; else // 绿灯 yellow = false; red = false; 这里可以把false理解为“不亮灯”或者熄灭状态, 而true就是亮灯状态, car_crash作为一个模拟说明还可以运行.

隆子县18991674637: 单片机交通灯程序设计 -
缪怜邦德: #include<reg52.h> sbit green=P2^0;//绿灯 sbit yellow=P2^1;//黄灯 sbit red=P2^2;//红灯 void main(void) {delay(); green=0; yellow=0; red=0; while(1) {green=1; delay(10000); green=0; yellow=1; delay(500); yellow=0; red=1; delay(10000); red=0; }...

隆子县18991674637: C51单片机 交通指示灯的程序设计 要用汇编语言编制 -
缪怜邦德: 汇编语言编程交通指示灯 http://zhidao.baidu.com/question/511850150.html

隆子县18991674637: C51单片机程序交通灯程序设计与仿真,我是新手,考试急用,麻烦您了 -
缪怜邦德: 这是AVR Atmega8红绿灯的程序你参考一下吧 #include<iom8v.h>#include<macros.h>#define uint unsigned int uint x=0;/******************************************** x1红灯-->PC3 绿灯-->PC5 黄灯-->PC4 x2红灯-->PD6 绿灯-->PB0 黄灯-->PD7 y1红灯-...

隆子县18991674637: 单片机交通灯程序 -
缪怜邦德: #define N1 10000#define N2 1000#define ALL_OFF 0x00#define RED_ON 0x01#define YELLOW_ON 0x02 #define GREEN_ON 0x04#define A_LIGHT PA#define B_LIGHT PB void wait_n100mS(unsigned int n) //延时n秒 { unsigned int i,j,k; for(...

隆子县18991674637: 单片机交通灯的汇编程序 -
缪怜邦德: NAME T3 ;I/O口扩展实验一 PORT EQU 0CFA0H ;片选地址CS0 CSEG AT 0000HLJMP START CSEG AT 4100H START: MOV A,#11H ;两个红灯亮,黄灯、绿灯灭ACALL DISP ;调用273显示单元(以下雷同)ACALL DE3S ;延时3秒 ...

隆子县18991674637: 单片机控制十字路口交通灯程序设计 -
缪怜邦德: 如果一个单位时间为1秒,这里设定的十字路口交通灯按如下方式四个步骤循环工作: 60个单位时间,南北红,东西绿; 10个单位时间,南北红,东西黄; 60个单位时间,南北绿,东西红; 10个单位时间,南北黄,东西红;解:用P...

隆子县18991674637: 用51单片机做交通信号灯 -
缪怜邦德: 有以下可能的原因:1、51单片机高电平驱动能力较小,建议低电平点亮,也就是说二极管接正.2、启动电路(第9脚)有没有接到一个阻容电路上?99脚悬空,程序可能乱跑的.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网