当前位置:文档之家› AT89C52单片机交通灯设计1

AT89C52单片机交通灯设计1

目录摘要 (2)1 交通信号灯控制系统设计任务和性能指标 (3)1.1 设计任务 (3)1.2 性能指标 (3)2 交通信号灯控制系统设计方案 (3)2.1 设计思路 (3)2.1.1 设计思路 (3)2.1.2 功能设计 (3)2.2 总体设计 (3)2.2.1 通行方案设计 (4)2.2.2 硬件设计方案 (4)2.2.3 软件设计方案 (5)3 交通信号灯控制系统硬件设计 (5)3.1 系统硬件框图 (5)3.2 单元电路设计 (6)3.2.1 单片机最小系统 (6)3.2.2 信号灯显示电路 (7)3.2.3 倒计时显示电路 (7)3.2.4 电路原理图 (8)4 交通信号灯控制系统程序设计 (8)4.1 C语言程序编写 (8)5个人小结 (12)6参考文献 (12)摘要交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。

交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

本系统采用单片机AT89C52为中心器件来设计交通信号灯控制器,系统实用性强、操作简单、扩展性强。

本设计系统就是由单片机最小系统、交通灯状态显示系统、LED 数码显示系统、复位电路和按键操作电路等几大部分组成。

系统除具有基本的交通信号灯功能外,还具有倒计时、时间调整和紧急情况处理等功能,较好的模拟实现了十字路口可能出现的状况。

软件上采用KEIL C 编程,主要编写了主程序,LED数码管显示程序,中断程序,延时程序等。

经过整机调试,实现了对十字路口交通灯的模拟。

1 交通信号灯控制系统设计任务和性能指标1.1设计任务利用单片机设计一个十字路口交通信号灯控制系统,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,并有倒计时系统显示信号灯转换时间。

用红、绿、黄发光二极管作信号灯,两位八段数码管显示时间来控制交通信号灯的变化。

1.2性能指标(1)东西和南北方向的车辆交替通行,任意时刻只有一个方向通行,以黄灯闪烁来转换。

(2)系统开始运行时设置每次放行13秒,其中有3秒是黄灯闪烁提醒行人和车辆禁止通行。

2 交通信号灯控制系统设计方案2.1设计思路2.1.1设计思路(1)分析目前交通路口的基本控制技术以及各种通行方案,并以此为基础提出自己的交通控制的初步方案。

(2)确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能。

(3)选择器件,大体分配各个器件及模块的基本功能要求,设计主控电路、显示电路,信号灯状态电路,按键电路等。

(4)进行软件系统的设计,对于本系统,采用C语言编写,深入了解定时器,中断以及延时原理后,完成软件的编写。

2.1.2 功能设计本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示,通行时间调整和紧急情况处理等功能。

2.2 总体设计单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。

2.2.1 通行方案设计十字路口分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。

其具体状态如图所示。

说明:黑色表示亮,白色表示灭。

交通状态从状态1开始变换,直至状态4然后循环至状态1,周而复始。

S1 东西通行S2 东西禁行过渡状态S3 南北通行S4 南北禁行过渡状态通过对具体的十字路口交通信号灯状态的演示分析,可以把这四个状态归纳如下:状态S1:东西方向绿灯亮,允许通行,南北方向红灯亮,禁止通行;状态S2:东西方向绿灯转黄灯闪烁,允许通行,南北方向红灯亮,禁止通行;状态S3:东西方向红灯亮,禁止通行,南北方向绿灯亮,允许通行;状态S4:东西方向红灯亮,禁止通行,南北方向绿灯转黄灯闪烁,允许通行;依据上述分析,东西的通行时间为状态S1和状态S2的时间之和,南北的通行时间为状态S3和状态S4的时间之和。

2.2.2 硬件设计方案2.2.2.1 AT89C52单片机芯片简介AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

2.2.2.2 AT89C52单片机引脚图本系统选用Atmel公司的AT系列单片机AT89C52为中心器件设计交通信号灯控制器,实现了红绿灯循环点亮,绿灯变红灯中间为黄灯闪烁警示的功能。

每个方向采用红绿黄三色的LED灯的亮灭来模拟信号灯,采用两位八段共阳数码管,显示十字路口通行或禁止的剩余时间。

2.2.3 软件设计方案设计要求为:首先南北方向红灯、东西方向绿灯亮,南北方向红灯13秒、东西方向绿灯9秒,相应的数码管显示对应的数字并读秒,同时南北方向红色的二极管和东西方向的绿色二极管接通点亮显示,当东西方向的绿灯时间到,则东西方向的绿灯转为黄灯,同时数码管显示黄灯的时间3秒,东西方向的黄色二极管接通点亮,此时南北方向的红灯不变。

南北方向的红灯和东西方向的黄灯时间同时到,此时南北方向的红灯跳转为绿灯,时间同样为9秒,东西方向有黄灯跳转为红灯,时间为13秒。

当南北方向的绿灯时间到,南北绿灯跳转为黄灯,东西方向的红灯不变,当南北方向的黄灯和东西方向的红灯时间到,南北方向的黄灯跳转为红灯,东西方向的红灯跳转为绿灯。

进入开始的状态,循环执行。

根据设计要求编写C语言程序。

软件采用KEIL C语言完成。

3 交通信号灯控制系统硬件设计3.1系统硬件框图根据设计的要求,单片机选用AT89C52,其内部带有8KB的FLASH ROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。

四个方向各采用三个不同色的LED 灯和1个两位的数码管显示,来实现该方向的指示灯的点亮时间倒计时。

按键可以根据系统的需要进行操作。

系统硬件框图3.2单元电路设计3.2.1单片机最小系统对51系列单片机来说,单片机要正常工作,必须具有五个基本电路,也称五个工作条件:1、电源电路,2、时钟电路,3、复位电路,4、程序存储器选择电路,5、外围电路。

因此,单片机最小系统一般应该包括单片机、晶振电路、复位电路、外围电路等。

(1)电源电路设计单片机芯片的第40脚为正电源引脚VCC,一般外接+5V电压。

第20脚为接地引脚GND,常见电源电路设计如下图所示:电源设计(2)时钟电路设计单片机是一种时序电路,必须要有时钟信号才能正常工作。

单片机芯片的18脚(XTAL2)、19脚(XTAL1)分别为片内反向放大器的输出端和输入端,只要在18脚(XTAL2)和19脚(XTAL1)之间接上一个晶振,再加上2个20PF的瓷片电容即可构成单片机所需的AT89C52XTAL1P0.0XTAL2 |P0.5RESP2.0|P2.7时钟电路复位电路信号灯显示倒计时显示按键操时钟电路,本设计就采用图所示时钟电路。

时钟电路(3)复位电路设计单片机芯片的第9脚RST(Reset)是复位信号输入端。

单片机系统在开机时或在工作中因干扰而使程序失控,或工作中程序处于某种死循环状态等情况下都需要复位。

AT89C52单片机的复位靠外部电路实现,信号从RST引脚输入,高电平有效,只要保持RST引脚高电平2个机器周期,单片机就能正常复位。

复位电路(4)外围电路的设计外围电路的设计主要依据项目要实现的功能,本项目要实现的功能是用单片机控制交通信号灯。

3.2.2交通信号灯显示电路本系统采用LED作为信号灯来使用,单片机的I/O口直接与LED连接。

在十字路口的四组红、黄、绿三色交通灯中,东西方向的同色灯连接在一起,南北方向的同色灯也彼此连接,受单片机AT89C52的P1.0—P1.5控制。

12个LED指示灯采用共阳极的连接方式,因此I/O口输出低电平时,与之相连的LED会亮,输出高电平时,LED熄灭。

3.2.3倒计时显示电路该交通信号灯控制系统在正常工作情况下,为方便提示路上行人及车辆交通灯转换的剩余时间,专门为控制系统提供了一个倒计时的显示装置。

该装置采用2位八段数码管来显示,每个路口需要1个,共4个,在设计电路时,本系统采用用共阳数码管。

3.2.4电路原理图4 交通信号灯控制系统程序设计4.1 C语言程序编写本系统程序采用KEIL C 编程,来控制交通信号灯的亮灭及时长。

程序如下:/*#include<REG51.H> */#include<AT89X51.H>#define uchar unsigned char /*定义字符串类型为无符号型*/uchar code a[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};uchar code b[4]={0x0D,0x0E,0x07,0x0B}; /****P2口,低有效*/uchar code c[4]={0xDE,0xDD,0xF3,0xEB}; /****P1口,低有效*/char SN=10,WE=13;char SN_G=10,WE_G=10,Y=3;uchar i,k=0,count=0;void delay(uchar t);/*定义函数*/void light(); /*定义函数*/void led(); /*定义函数*//*程序初始化*/void init(void){/*12MHz */TMOD=0x01; /**计数器用模式1,为16位计数器*****/TH1=(65536-50000)/256; /*0x3C*/TL1=(65536-50000)%256; /*0xB0*//*计50000个数,用时50ms*/ IT0=1;/*外部中断0为边沿触发方式*/ET0=1;/*允许T0中断*/TR0=1;/*启动计数器*/EA=1;/*CPU开放总中断*/}/*定时函数*/void time1(void) interrupt 1{TH0=0x3c;TL0=0xb0;/*计50000个数,用时50ms*/count++; /*自增运算*/if(count>=20)/*当count大于或等于20时,历时1s,执行程序*/ {SN--;/*自减运算*/WE--;/*自减运算*/count=0;/*清零*/if(SN==0||WE==0)/*当SN=0或者WE=0时,执行程序*/{k++;/*自增运算*/if(k>3)/*当k>3时,执行程序*/k=0;/*清零*/switch(k)/*switch 语句*/{case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/ case 1:SN=Y,WE=Y;break; /*东西南北方向显示时间均为黄灯闪亮时间*/case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/ case 3:SN=Y,WE=Y;break; /*东西南北方向显示时间均为黄灯闪亮时间*/}}}}/*延时t毫秒*/void delay(uchar t){uchar i;for(t;t>0;t--){for(i=2000;i>0;i--){}}}/*交通灯函数*/{P1=c[k];/*交通灯对应着k的值变化*/if(P1==c[1]&&count==0)/*当南北方向亮黄灯且count=0时,执行程序*/ {TH1=(65536-50000)/256;TL1=(65536-50000)%256;/*延时50ms*/P1=0xDF;/*南北方向黄灯熄灭,东西方向亮红灯*/}elseif(P1==c[3]&&count==0)/*当东西方向亮黄灯且count=0时,执行程序*/ {TH1=(65536-300000)/256;TL1=(65536-300000)%256;/*延时50ms*/P1=0xFB;/*南北方向亮红灯,东西方向黄灯熄灭*/}}/*数码管函数*/void led(){P2=b[0],P0=a[SN%10];/*显示南北方向个位*/delay(5);/*延时*/P2=b[1],P0=a[SN/10];/*显示南北方向十位*/delay(5);/*延时*/P2=b[2],P0=a[WE%10];/*显示东西方向个位*/delay(5);/*延时*/P2=b[3],P0=a[WE/10];/*显示东西方向十位*/delay(5); /*延时*/}{init();/*调用程序初始化函数*/for(;;)/*无条件循环*/{light();/*调用交通灯函数*/led(); /*调用数码管函数*/}}5 个人小结这次是很有意义的一次课程设计,从原理图设计到软件仿真,我从中收获了许多。

相关主题