感悟网 导航

我在做一个单片机交通灯程序(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。由于新加入了绿灯转黄灯,则要再加入一个状态量,绿灯结束状态,黄灯根据绿灯结束状态启动,计时结束转红灯。对相应端口赋值即可。只需要东西方向与南北方向相反。

《Excel 图表颜色交通灯-Excel图表与图形-excel表格》
答:在一个新的工作表中,在单元格B2中输入文本。如果需要,请添加一些颜色和其他格式,如图所示。然后选择单元格B2,然后单击“相机”图标。这样做时,单元格B2周围的边框将变为移动的选取框,并且鼠标指针将变为十字形。现在,单击电子表格上的任意位置。这样做时,Excel将返回Camera对象,如上图...

《微机原理课程设计怎么做?》
答:按照时间控制原则,利用并行接口和定时器,采用时间中断方式设计一套十字路口的交通灯管理系统,通行时间(或禁止时间)30秒,准备时间3秒,在准备时间里黄灯闪烁3次,闪烁频率为0.5秒,周而复始。可利用8255、8253、8259等接口电路。总体设计 1、基本工作原理 设有一个十字路口,1、3为南,北方向,2...

《学习51单片机怎么开始?》
答:准备一套设备 建议买一套飞天三号STC1单片机开发板,兼容51单片机,带有液晶屏、矩阵键盘、点阵、数码管、蜂鸣器、温度传感器、AD/DA、交通灯、红外、触摸按键、RS485、WIFI模块接口、2.4G无线接口等。可通过开发板完成收音机、信号发生器等实战项目。配套书籍、视频教程、代码、开发工具等资料,是学习和...

《51单片机该怎么学?》
答:因此我的观点如下,单片机的硬件结构首先要有一个基本的了解,最起码要知道各引脚的功能、区别,能自己动手搭一个单片机的最小系统,然后就可以直接从程序入手,程序最好还是用 C 语言编程,从简单的跑马灯做起,逐渐深入,陆续可以做一些数码管、液晶、 DS1302 、 DS18B20 等电子元器件的应用,在深入就可以结合一些具体实例...

《5分钟说透red green lamp的程序》
答:3.强调一些细节,我想你在写这个的时候,一定会有很多细节问题,在不断的编写过程中得以完善. (如果时间没完的话,讲完后,你还可以再简述功能)附:至于语言的组织,你写了这么多解释,相信还是有一个语言表达能力, 这里谈下,我的一个学习习惯: 就是在学习中,总结笔记,一方面可以锻炼表达总结能力, 也给...

《8051单片机的存储器分为几个部分?各部分的空间大小为多少》
答:我有更好的答案推荐于2017-12-16 08:37:17 最佳答案 code 程序区 movcxdata 外部存储区 movxdata 内部存储区 mov ,直接访问或间接访问idata 内部存储区 mov 间接sfr 控制字区 mov 直接不同的厂家与不同型号的51单片机空间大小是不同的INTEL 8051系列 data 128 sfr 128 idata 0INTEL 8052系列 data 128 ...

《nds模拟人生2金手指码!注意是金手指码!有的帮帮我!要真的》
答:048 交通灯(同上)* 049 Urbverse战利品小姐(同上)* 04A 打字机(同上)* 04B 挂在墙上的短鼻鄂鱼(同上)* 04C 挂在墙上的旗鱼(同上)* 04D 98毒蛇缓冲器(同上)* 04E 休德.斯诺叔叔的手杖(同上)* 04F 电灯(同上)* 050 Khroniton反应器(同上)* 051 金的小提琴(某一个任务通过后给的奖品)* 052 木块(初...

《Excel图表颜色交通灯Excel图表与图形excel表格》
答:设置交通灯公式**该图说明了我们简单的交通信号灯显示。单元格B2已被命名为得分。它通常包含一个公式,该公式查看我们显示的数据,然后对结果进行评分。得分1将在图表周围显示绿色;2返回黄色;3返回红色。分数公式可以是任何您想要的。例如,假设一个名为Growth的单元格包含最近一个季度比上一个季度增长的百分比。如果...

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网