1、51单片机交通灯模拟系统设计与开发,成员:江清华 王雯 董友朋电子设计工作室,引言,随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。交通灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统就是采用AT89C52单片机设计的交通灯摸拟系统,使用Keil C51编写代码,并在Protues 7.5下进行仿真,实现了对交通灯系统的模拟。系统设计简便、实用性强、程序设计简便。,单片机概述,单片机是单片微型计算机SCMC的译名简称,也称单片微机,它包括中央处理器、随机存储器RAM、只读存
2、储器ROM、中断系统、定时/计数器、串行口和I/O等。单片机只需与适当的软件及外部设备相结合,便成为一个单片机控制系统,实现相关功能。单片机的控制功能强、可靠性好,非常易于根据应用系统要求进行扩展、功耗小,非常适用于各行各业。其中的80C51系列单片机,从其技术和产品延续性以及品种齐全性来看,都极具代表性与典型性。,交通灯模拟系统设计详情,1、交通灯模拟系统的工作原理以51单片机为主控芯片来模拟交通控制系统,工作顺序为东西方向红灯亮30秒,前28秒南北方向绿灯亮,后2秒黄灯亮。然后南北方向红灯亮30秒,前28秒东西方向绿灯亮,后2秒黄灯亮。东西,南北两个方向均有两位数码管适时显示该方向亮灯时间
3、,依次重复。由软件设置交通灯的初始时间即东西方向红灯30秒,南北绿灯亮28秒,此时东西方向通行,我们用P3口(P3.0、P3.1、P3.2、P3.3)分别控制数码管的位选即S1、S2、S3、S4,有P0口控制数码管的段选。 P1口控制各种信号灯的点亮时间 。当东西方向倒计时完毕后再交换倒计时起点和通行方向。重复执行即可实现交通灯系统的模拟。,交通灯模拟系统设计详情,交通灯模拟系统设计详情,2、数码管部分的工作原理本作品采用的是共阳四位一体的数码管,如图所示,本次作品中的数码管是采用NPN共阳三极管驱动的,由图可看出数码管的四个为选接口1234分别连在Q1、Q2、Q3、Q4的发射极e上,儿三极管
4、的集电极c全都再在+5V的电源上,而三极管的基极b分别接在单片机的P3孔上,这就构成了由单片机控制数码管的显示时间。数码管的另外8个插孔(abcdefgh)分别按顺序连在单片机的平P0口上,由单片机控制数码管显示的内容。,交通灯模拟系统设计详情,交通灯模拟系统设计详情,3、信号灯部分的工作原理本作品从节约的角度出发,只设计了各一个方向的交通灯模拟系统,如图所示,横向的为东西方向,纵向的为南北方向。二极管的阳极均接在1K的电阻上(仿真图未画出),电阻的另一头全共同接在+ 5V的电源上。二极管的阴极分别接在单片机P1口上,e-redP1.0, e-yellowP1.1, e-greenP1.2,
5、s-redP1.3, a-yellowP1.4, s-greenP1.5.因此,构成了单片机通过P1口来控制交通信号等的闪烁。,交通灯模拟系统设计详情,C语言程序代码,#include#define uchar unsigned charsbit d0=P30;/第一组数码管 sbit d1=P31;sbit d2=P32; /第二组数码管 sbit d3=P33;sbit e_red=P10; / 东西向红绿灯 sbit e_yellow=P11;sbit e_green=P12; sbit s_red=P13; / 南北向红绿灯 sbit s_yellow=P14;sbit s_green
6、=P15; uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;long int a=0;int aa=0;int time;int y=0,x=0,z=0;,C语言程序代码,void main() time=0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;P3=0;while(1) y=0; / 关闭第二组数码管 d2=0;d3=0;while(y!=3) / 进入东西向管理 P1=0xff;e_red=0; /
7、点亮南北向红灯 s_green=0;for(x=10;x-; ) ,C语言程序代码,time=0;do if(time=18)time=0;z+;d0=1;P0=table2-y;for(a=100;a-;);d0=0;d1=1;P0=table9-z;for(a=100;a-;);d1=0;,C语言程序代码,if(z=7,C语言程序代码,d2=1;P0=table2-y;for(a=100;a-;);d2=0;d3=1;P0=table9-z;for(a=100;a-;);d3=0;if(z=7 ,C语言程序代码,void timer0() interrupt 1 / 计时 TH0=(65536-50000)/256;TL0=(65536-50000)%256;time+; void exter0() interrupt 0 P1=0xf3; ,仿真结果,本作品采用protues 7.5仿真。仿真结果与实验结果一致,从而说明了本作品的正确性。仿真结果如图,仿真结果,仿真结果,