- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机控制交通信号灯系统
摘要:
本文先对单车道、双向六车道十字路口和丁字路口交通规则进行研究,进而总结出复杂的大型多交叉路口交通信号控制方式。
本系统以MSC-51系列单片机可编程并行I/O接口芯片855为中心器件设计实现了实用性强操作简单。 PCB
一、数据统计(Excel软件)
通过对香港中路与燕儿岛路交界处交通灯的观察和记录,用Excel做出了此路口交通灯的时序如下(其中,红黄绿三色代表灯的颜色,两灯中间的数字为数码管显示的倒计时时间)。
二、建立数学模型(交通规则)
根据统计的数据,总结交通规则如下 :
1、交通灯仅控制直行与左转车辆,右转车辆可不受控制。
2、南北车流量大,车道多,通行时间长;东西方向反之。
3、向北较向南直行车辆多,直行时间多加10s。除此之外,南北向车辆的通行情况具有对称性,左转、直行不能同时通行。
4、东西方向不对称。一个方向的直行与左转同时为绿灯时,其余三方向均为红灯。基于此,东西方向可简化为只用一组灯控制(原来为直行、左转两组灯)。
5、绿灯变为红灯时,均有3s的黄灯时间。
因此,把交通灯和数码管分为十五个状态,每个状态会有至少对应一组灯的变化。程序中时以一秒为一个检测间隔,若检测到状态的变化则刷新灯的状态同时给数码管赋值;若没有状态的变化,则灯的状态保持,数码管显示的数据减一。
三、keil 编程
主要思路:应用视觉暂留的原理,快速循环扫描数码管,以达到持续显示时间的效果。利用单片机的P1口向数码管(8个)送入数据,138译码器的输出作为选通信号。
由于东西方向交通灯的简化,共需要6组(共十八个)发光二极管。需要18个管脚对二极管持续提供高低电平。单片机的IO口显然不够,故采用外部扩展芯片8155的PA(高6位)、PB(高6位)、PC,实现此要求。
本程序中,以五毫秒为时间间隔扫描数码管、当时间为1s时进行状态扫描,定时器中断程序如下:
void tim(void) interrupt 1 using 1
{
TH0=(65535-5000)/256;
TL0=(65535-5000)%256; //定时器赋初值
num++;
if (num==200)
{num=0;
m++;
switch(m)
{case 1:east=96;west=86;north=34;south=0;light1=0x90;light2=0x90;light3=0x24;break;
……//15种状态赋值
case 132:m=0;
default:east--;west--;north--;south--;
}
}
count++;
if(count==1)
{P2=0;
dataled=str[0];}……//数码管显数
具体程序见附录。
扩流模块
对于扩流模块我们有两个选择:自制的三极管扩流电路(图11)和74hc573芯片总线驱动(图12)两种方案。经实际检测,后者显示效果更好,所以最终采用了74hc573实现数码管的扩流。
四、Proteus仿真图
用138作为数码管的片选信号,P1口给数码管送数值,此为模块一;用8155控制所有交通灯,此为模块二。具体硬件仿真如下图。
八、附录:keil 编程
#includereg52.h
#includemath.h
#includeINTRINS.H
#includeabsacc.h
#define uchar unsigned char
#define uint unsigned int;
/******************************************************************/
/* 端口定义 */
/******************************************************************/
sbit seg1=P2^1;
sbit seg2=P2^2;
sbit seg3=P2^3;
sfr dataled=0x90;//???????????
#define light1 XBYTE[0x7f01]
#define light2 XBYTE[0x7f02]
#define light3 XBYTE[0x7f03]
#define com8155 XBYTE[0x7f00]
/***************************************
文档评论(0)