<meta name="keywords" content="必胜时时彩开户,keywords" /> 单片机交通灯设计 联系我们

单片机交通灯设计

交通灯控制系统设计
摘要:本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统网罗人行道、左转、右转、和基本的交通灯的功效。系统除基本交通灯功效外,还具有倒计时、时间设置、紧迫情形处置赏罚赏罚、分时段调剂旌旗暗记灯的点亮时间和凭证详细情形手动控制等功效。
要害词:AT89S51,交通规则
一、 妄图较量、设计与论证
1 电源供应妄图
为使模块稳固使命,须有可靠电源。我们推敲了两种电源妄图

计整齐:接纳自力的稳压电源。此妄图的优点是稳固可靠,且有种种成熟电路可供选用;弱点是各模块都接纳自力电源,会使系统严重年夜,且能够影响电路电平。
妄图二:接纳单片机控制模块供应电源。改妄图的优点是系统长篇年夜论,节约资源;弱点是输入功率不高。
综上所述,我们选择第二种妄图。
2 显示界面妄图
该系统请求完成倒计时、状态灯等功效。基于上述启事,我们推敲了三种妄图:
计整齐:完全接纳数码管显示。这类妄图只显示无限的符号和数码字苻,没法胜任效果请求。
妄图二:完全接纳点阵式LED 显示。这类妄图完成严重年夜,且须完成年夜量的软件使命;但功效强年夜,可便利的显示种种英文字符,汉字,图形等。
妄图三:接纳数码管与点阵LED 相联络的措施由于设计既请求倒计时数字输入,又请求有状态灯输入等,为便利不雅不雅看并推敲到现内情形,用数码管与LED灯划分显示时间与提醒信息。这类妄图既知足系统功效请求,又增添了系统完成的严重年夜度。权衡短长,第三种妄图可互补一二妄图的优缺,我们决议接纳妄图三以完成系统的显示功效。
3 输入妄图:
效果请求系统能手动设灯亮时间、紧迫情形处置赏罚赏罚,我们议论辩说了两种妄图:
计整齐:接纳8155扩年夜I/O 口及键盘,显示等。该妄图的优点是:
应用无邪可编程,而且有RAM,及计数器。若用该妄图,可供应较多I/O 口,但操作起来稍显严重年夜。
妄图二: 直接在IO口线上接上按键开关。由于设计时精简和优化了电路,以是残剩的口资源还较量多,我们应用四个按键,划分是K1、K2、K3、K4。
由于该系统关于交通灯及数码管的控制,只用单片机自己的I/O 口便可完成,且自己的计数器及RAM曾经够用,故选择妄图二。
2、现实剖析与盘算
1.交通灯显示时序的现实剖析与盘算
关于一个交通路口来讲,能在最短的时间内到达最年夜的车流量,就算是到达了最好的性能,我们称在单元时间内多能到达的最年夜车流为车流量,用公式:车流量= 车流 / 时间 来体现。

先设定一些标号如图2-1 所示。

诠释:此图为直方图,上边为北路口灯,左边为东路口灯,下边为南路口灯,左边为西
路口灯。
图2-2 所示为一种红绿灯规则的状态图,划分设定为S1、S2、S3、S4,交通灯以这四
的状态为一个周期,循环推行(见图2-3)。

请重视图2-1b和图2-1d,它们在一个时间段中四个偏向都可以通车,这类状态能在
一定的时间内到达较年夜的车流量,效力特殊高。
凭证上述的车辆行驶的状态图,可以列出各个路口灯的逻辑表,由于相向的灯的状态图
是一样的,以是只需写出相邻路口的灯的逻辑表;凭证图2-3 可以看出,相邻路口的灯它
们的状态在相位上相差180°。是以事实只需写出一组S1、S2、S3、S4的逻辑状态表。

如表2-1 所示。

表中的“×”代表是红灯亮(也代表逻辑上的0),“√”是代表绿灯亮(也代表逻辑上
的1),依上表,便可以向照顾的端口送逻辑值。

2.交通灯显示时间的现实剖析与盘算


器械和南北偏向的放行时间的是非是凭证路口的各个偏向寻常浅易的车流量来设定,而且
S1、S2、S3、S4各个状态保持的时间之有严酷的对应关系,其公式以下所示。
T-S1+T-S2=T-S3
T-S2=T-S4
T-S1=T-S3
我们可以凭证上述的尺度来改变车辆的放行时间。凭证浅易的规则,一个十字路口可分

为主干道和次干道,主干道的放行时间年夜于次干道的放行时间,我们设定值时也应以此为参
考。
3、电路图及设计文件
1.灯控制电路设计
由于32个LED 来完成红绿灯状态,若直接接在单片机的口线,路口倒计时的显示就不
能完成,以是本次设计中接纳一种新型的电路如图3-1 所示。

图中74LS04的作用是倒相和驱动,它输入的电流年夜约48mA,现实测试发现足以知足要
求,而且发光管也能到达足够的亮度。
不雅不雅察图可以看出:两组发光管(一组红、一组绿)由于反相器的作用,其逻辑状态恰恰
相反。
图中和电阻勾通的二极管的作用是为了分压,防止因曲折两组发光管分压不合招致逻辑
的弱点。
共四组和上述类似的电路划分代表器械南北四个偏向的红绿灯,应用两片74LS04 作为
驱动。
2.倒计时显示电路设计
前面曾经剖析过相向的灯的状态和倒计时都是类似的,以是为了节俭,接纳两组四个数码管
作为倒计时的显示;同时为了节俭口资源,接纳串口显示的要领驱动数码管。见图3-2 所
示。

四、法式模范模范设计思绪与流程图
1.主法式模范模范流程图
主法式模范模范中主若是一个去世循环,一直的循环四个状态,如图4-1 所示。

2.按键子法式模范模范流程图
它网罗倒计时调剂和紧迫状态两个状态。
主法式模范模范中放了一个按键的断定指令,当有按键按下的时间,法式模范模范就自动的跳转到按键子
法式模范模范处置赏罚赏罚。当检测到K2键按下的时间就自动前往到主法式模范模范。
当泛起紧迫的情形的时间,按下K3或许K4 就切换到紧迫状态,当紧迫事宜处置赏罚赏罚终了
的时间,按下K2,便可之前往正常状态。

五、测试、数据及效果剖析
1.状态灯显示测试
当电路毗连终了后,将写好的测试法式模范模范刷写到芯片内,K1 和K2划分给端口送高电平和
低电平,通电便可检测。
2.数码管的测试
将串口的和电路板上的接口毗连,将写好的测试法式模范模范刷写到芯片内,开电源便可测试。
3.所有电路测试
系统上电,刷写好法式模范模范便可泉源测试,不雅不雅测一个周期(算计S1~S4四个状态,默许140
秒)灯的显示状态能否正常,同时不雅不雅察倒计的计数能否正常。
六、总结
由于应用的是单片机作为焦点的控制元件,使得电路的可靠性较量高,功效也较量强年夜,
而且可以随时的更新系统,阻拦不合状态的组合。
然则在我们设计和调试的历程当中,也发清晰了了一些效果,例如红灯和绿灯的切换还不够迅
速,红绿灯规则不效力还不是很高等等,这须要在现实中进一步完善。
参考文献
[1] 李朝青.单片机原理及接口手艺(修订版).北京:北京航空航天年夜学出书社,1998
[2] 李广弟.单片机基础.北京:北京航空航天年夜学出书社,1992
[3] 何立夷易近.单片机应用手艺年夜全.北京:北京航空航天年夜学出书社, 1994
[4] 张毅刚. 单片机原理及接口手艺.哈尔滨:哈尔滨工业年夜学出书社,1990
[5] 谭浩强.单片机课程设计. 北京:清华年夜学出书社,1989
Abstract
This system is made up of single-chip microcomputer ,keyboard,lcd displaying module
and Traffic lights system.The system includes pavement,left truning,right truning,and the basic
traffic lights function.Excepting the basic traffic lights function,italso includes couting,time
installing,emergency disposaling,speech cluing,lcd information displaying,adjusting the lighting
time of lights based on different time and controlling with hand in accordance with circumstances
and so on.

附录 系统全体电路图

1.知足南北向红绿灯亮,器械向红灯亮,占25秒——南北向黄灯亮,器械向红灯亮,占5秒——南北向红灯亮,器械向绿灯亮,占25秒——南北向红灯亮,器械向黄灯亮,占5秒。云云循环,循环往复。 2.十字路口要有数字显示,提醒行人控制时间:当某偏向绿灯亮时,置显示器为24,然后以每秒减1计数要领使命,直到减为0,绿灯灭,黄灯亮。黄灯灭,红灯亮时,再次置显示器为29,并泉源减计数,直到为0,十字路口红绿灯交流,完成一次使命循环。
3.可手动调剂和自动调剂,夜间为黄灯闪灼。

下面是一个单片机交通灯法式模范模范

/*
******************************************************************************************
* *
* 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 = P1^2; //直行
sbit n_left_g = P1^3; //左转 调头

南北偏向红灯
sbit n_bike_r = P1^4; //自行车
sbit n_right_r = P1^5; //右转
sbit n_up_r = P1^6; //直行
sbit n_left_r = P1^7; //左转 调头

南北偏向黄灯
sbit n_bike_y = P3^0; //自行车
sbit n_right_y = P3^1; //右转
sbit n_up_y = P3^2; //直行
sbit n_left_y = P3^3; //左转 调头


器械偏向绿灯
sbit e_bike_g = P2^0; //自行车
sbit e_right_g = P2^1; //右转
sbit e_up_g = P2^2; //直行

器械偏向红灯
sbit e_bike_r = P2^4; //自行车
sbit e_right_r = P2^5; //右转
sbit e_up_r = P2^6; //直行

器械偏向黄灯
sbit e_bike_y = P3^4; //自行车
sbit e_right_y = P3^5; //右转
sbit e_up_y = P3^6; //直行
*/

//延时
void delay(UINT t, UINT s)
{
while (t)
{
UINT i;
for (i = 0; i < s; i++)
{
}
t --;
}
}

//旌旗暗记灯状态
void time_x(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3)
{
P1 = P_P1;
P2 = P_P2;
P3 = P_P3;
delay(150, 65535);
}

void time_s(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3, UCHAR P_P11, UCHAR P_P22)
{
UINT i;
for (i = 0; i < 3; i ++)
{
P1 = P_P1;
P2 = P_P2;
delay(5, 65535);
P1 = P_P11;
P2 = P_P22;
delay(5, 65535);
}
P1 = P_P1;
P2 = P_P2;
P3 = P_P3;
delay(10, 65535);
}

//主法式模范模范
void main()
{
P1 = P2 = P3 = 0x0;
while (1)
{
time_x(0xA5, 0x38, 0x0);

time_s(0xA4, 0x38, 0x1, 0xA5, 0x38);

time_x(0x96, 0x52, 0x0);

time_s(0x92, 0x52, 0x4, 0x96, 0x52);

time_x(0x5A, 0x52, 0x0);

time_s(0x50, 0x50, 0x2A, 0x5A, 0x52);

time_x(0xF0, 0x25, 0x0);

time_s(0xF0, 0x24, 0x20, 0xF0, 0x25);

time_x(0xD2, 0x16, 0x0);

time_s(0xD0, 0x10, 0x62, 0xD2, 0x16);

}
}
给你一个准时控制的旌旗暗记系统,我只做的质朴的测试,至于延时我用的软件,你自己想措施。^_^

 

Dai_Weis 于 2005-5-4 13:43:23

重新给你诠释
/*
***********************************************************************************
* *
* Keil C AT89S51 交通旌旗暗记控制法式模范模范 *
* (C) 版权一切 Dai_Weis@hotmail.com *
* *
***********************************************************************************
开发诠释:
固准时间旌旗暗记变换,南北设置调头、左传、直行、右转、自行车。
器械设置左传、直行、右转、自行车。
时序状态:
红 绿 红 绿
序号 左 前 右 自 左 前 右 自 前 右 自 前 右 自
1 1 0 1 0 0 1 0 1 1 1 1 0 0 0
2 1 0 0 1 0 1 1 0 1 0 1 0 1 0
3 0 1 0 1 1 0 1 0 1 0 1 0 1 0
4 1 1 1 1 0 0 0 0 0 1 0 1 0 1
5 1 1 0 1 0 0 1 0 0 0 1 1 1 0
*/
另外修改个弱点
while (1)
{
time_x(0xA5, 0x70, 0x0);

time_s(0xA4, 0x70, 0x1, 0xA5, 0x70);