当前位置:文档之家› at89c51单片机_交通灯控制系统(含源码及仿真图).

at89c51单片机_交通灯控制系统(含源码及仿真图).

模拟交通灯设计报告题目交通信号灯控制系统团队研发区第二组完成时间2011-11-31贵州民族学院开放实验室`目录一、项目名称 (1)二、选题背景 (1)2.1 课题背景 (1)2.2 交通灯的历史 (1)三、单片机简介 (2)3.1 单片机的发展历程 (2)3.2 单片机的特点: (3)3.3 AT89C52单片机简介 (4)四、设计基本要求和步骤 (5)4.1 基本要求 (5)4.2 设计步骤 (6)五、硬件和软件设计 (6)5.1 硬件电路图 (6)5.2 程序流程图 (8)主程序 (8)运行过程 (9)LED显示程序 (10)T0中断 (11)INT0中断 (11)5.3 P0、P1口显示状态编码表 (12)5.4 程序源代码 (12)5.5 程序运行效果图 (21)六、心得体会 (22)七、参考文献................................................................................. 错误!未定义书签。

模拟交通灯设计报告一、项目名称十字路口交通信号灯控制系统二、选题背景2.1 课题背景由于我国经济的快速发展从而导致了汽车数量的猛增,大中型城市的城市交通,正面临着严峻的考验,从而导致交通问题日益严重,其主要表现如下:交通事故频发,对人类生命安全造成极大威胁;交通拥堵严重,导致出行时间增加,能源消耗加大;空气污染和噪声污染程度日益加深等。

日常的交通堵塞成为人们司空见惯而又不得不忍受的问题,在这种背景下,结合我国城市道路交通的实际情况,开发出真正适合我们自身特点的智能信号灯控制系统已经成为当前的主要任务。

随着电子技术的发展,利用单片机技术对交通灯进行智能化管理,已成为目前广泛采用的方法。

2.2 交通灯的历史1868年12月10日,信号灯家族的第一个成员就在伦敦议会大厦的广场上诞生了,由当时英国机械师德·哈特设计、制造的灯柱高7米,身上挂着一盏红、绿两色的提灯--煤气交通信号灯,这是城市街道的第一盏信号灯。

1914年,在美国的克利夫兰市才率先恢复了红绿灯,不过,这时已是“电气信号灯”。

稍后又在纽约和芝加哥等城市,相继重新出现了交通信号灯。

随着各种交通工具的发展和交通指挥的需要,第一盏名副其实的三色灯(红、黄、绿三种标志)于1918年诞生。

它是三色圆形四面投影器,被安装在纽约市五号街的一座高塔上,由于它的诞生,使城市交通大为改善。

中国最早的马路红绿灯,是于1928年出现在上海的英租界。

三、单片机简介3.1 单片机的发展历程单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。

单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。

在MCS-51系列单片机中,有两个子系列:51子系列和52子系列。

每个子系列有诺干中型号。

51系列有8051、8751和8031三个型号,后来经过改进产生了80c51、87c51、80c31三个型号;52系列有5021、8752、8032三个型号,改进后的型号是80c52/87c52、80c32。

改进后的型号更加省电。

52系列比对应的51系列增加了定时器T2并将内部程序存贮器增加到8KB。

Inter公司停止生产MCS-51系列单片机之后将生产权转让给了许多其他公司,于是出现了许多与Mcs-51兼容的单片机。

现在生产mcs-51兼容单片机的公司对其进行了不同程度的改进和提高。

我们现在使用比较的多的是AT89C51/AT89s51等。

通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。

因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。

单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗3.2 单片机的特点:(1)性价比高,开发周期短,易于产品化,(2)集成度高,可靠性好,抗干扰性强,(3)功能完善,接口多样,(4)低功耗、低电压一般电源供电电压在5~3V范围内单片机都能正常工作,供电的下限可达1~2V。

(5)总线多样,易于扩展单片机外部的典型三总线结构,方便系统构扩展,构成各种规模的应用系统。

外部总线增加了I2C及SPI等串行总线方式, 可根据需要进行并行或者串行扩展。

3.3 AT89C52单片机简介AT89C52是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。

AT89C2052是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,AT89C2052是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

主要特性:·与MCS-51 兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128×8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路四、设计基本要求和步骤十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。

那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。

交通信号灯控制方式很多。

4.1 基本要求本系统需要采用MSC-51系列单片机AT89C52作为中心器件来设计交通灯控制器,实现以下功能:1.初始东西绿灯亮,南北红灯亮,东西方向通车。

2.延时27s,东西路口绿灯熄灭,黄灯闪烁3次。

3.黄灯闪烁后,东西路口红灯亮同时南北路口绿灯亮,南北方向开始通车。

4.延时27s,南北方向绿灯灭,黄灯闪烁3次,然后又切换成东西方向通车,如此重复。

5.当发生交通意外(中断产生)时,全部亮红灯,进行交通事故的处理。

当事故处理完毕(再次按中断键),重新按上述方式工作。

6.当南北路口的流量大时,可以增加南北路口亮绿灯的时间,当东西路口的流量大时,可以增加东西路口亮绿灯的时间,结束后调回正常状态。

4.2 设计步骤1.利用Proteus 7.5 SP3仿真软件按下列要求绘制仿真实例✧用4个共阳极LED数码管的分别表示东、西、南、北四个方向路口,以数码管的上、中、下3个横段分别代表红、黄、绿3盏灯✧用P0、P1口分别输出控制模拟交通灯的状态显示的数码管和倒计时显示数码管的状态码✧P3^1、P3^2、P3^4~~~P3^7控制数码管的位选✧P2^0~~~P2^4接收中断信号并反馈给INT0接口进行中断处理2.按照基本要求编制程序实现相应功能。

五、硬件和软件设计5.1 硬件电路图硬件电路图通过Proteus 7.5 SP3仿真之后如图1所示,其中:按钮K0连接P2^0端口实现红灯全亮,处理交通意外按钮K1连接P2^1端口实现南北方向亮灯时间+1s 按钮K2连接P2^2端口实现南北方向亮灯时间-1s 按钮K3连接P2^3端口实现东西方向亮灯时间+1s 按钮K4连接P2^4端口实现东西方向亮灯时间-1s 整体实验连接电路如下图所示:图1 整体连接电路图5.2 程序流程图5.3 P0、P1口显示状态编码表5.4 程序源代码#include<reg52.h>#define uchar unsigned charuchar 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]={0x6a,0x66,0x5c,0x3c}; //P1口低电平有效char SN=35,WE=40; //SN表示南北方向主干道WE表示东西方向支干到char SN_G=35,WE_G=20,Y=5; //sn——g表示南北方向的绿灯we——g表示东西方向的绿灯uchar i,k=0,count=0;void delay(uchar t);void light();void led();void ledthrough();void leddrive();sbit K0=P3^7; //开关KOsbit K1=P3^6; //开关K1sbit K2=P3^3; //开关K2sbit K3=P3^5; //开关K3sbit K4=P3^2; //开关K4/*******程序初始化**********/void init(void){TMOD=0X01; //计数器模式1 为16位计数器TH1=(65536-50000)/256;TL1=(65536-50000)%256; //用时50msIT0=1; //外部中断为低电平触发ET0=1; //允许T0中断TR0=1; //启动计数器EA=1; //总中断EX0=1; //允许外部中断0EX1=1; //允许外部中断1}/*******中断0处理程序*****/void int0(void) interrupt 0{EA=0; //关闭总中断P1=0x6c; //东西南北方向为红灯TR0=!TR0; //计数器停止工作for(; ;) //无条件循环{ledthrough(); //调用通行时间显示函数if(K0==0) //设置南北通行时间{delay(10);if(K0==0){while(!K0) //当松手时跳出循环执行后面程序{ledthrough(); //调用通行时间显示函数}SN_G++; //南北方向绿灯时间+1if((SN_G+Y)==100) //南北通行时间100msSN_G=1; //时间归1}}if(K1==0) //设置东西方向通行时间{delay(10);if(K1==0){while(!K1) //当松手时跳出循环执行后面程序{ledthrough(); //调用通行时间显示函数}WE_G++; //东西时间+1if((WE_G+Y)==100)WE_G=1; //时间归1}}if(K3==0) //返回{delay(10);if(K3==0){while(!K3) //当松手时跳出循环执行后面程序{ledthrough(); //调用通行时间显示函数}TR0=!TR0; //启动计数器EA=1; //开总中断break; //跳出}}}}/*****中断1处理程序********/void int1(void) interrupt 2{P1=0X6C,P0=a[0]; //东西南北都为红灯EA=0; //TR0=!TR0; //计数器停止工作for(;;){leddrive(); //数码管驱动程序if(K3==0){delay(10);if(K3==0) //返回{while(!K3){leddrive(); //数码管驱动程序}EA=1;TR0=!TR0; //启动定时器break;}}}}/******键盘程序*******/void key(){if(K0==0){delay(10);if(K0==0){while(!K0){light(); //调用交通灯函数led(); //调用数码管函数}count=0; //清零k=0; //南北方向通车东西方向不通车SN=SN_G, WE=SN_G+Y; //南北显示时间为绿灯时间东西方向显示时间为南北绿灯通行时间加黄灯闪亮时间}}if(K1==0) //南北无车而东西有车{delay(10);if(K1==0){while(!K1){light();led();}count=0;k=2; //南北不通车东西通车SN=WE_G+Y,WE=WE_G; //南北显示时间为东西绿灯通行时间+黄灯闪亮时间东西方向显示时间为其绿灯时间}}}/********定时函数*********/void time1(void) interrupt 1{TH0=0X3C;TL0=0XB0;count++;if(count>=20){SN--;WE--;count=0;if(SN==0||WE==0){k++;if(k>3) //当k》3执行程序k=0;switch(k){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--){}}}/*********交通灯函数*******/void light(){P1=c[k];if(P1==c[1]&&count==0){TH1=(65536-50000)/256;TL1=(65536-50000)%256;P1=0X6E;}elseif(P1==c[3]&&count==0){TH1=(65536-50000)/256;TL1=(65536-50000)%256;P1=0X7c;}}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);}/******通行时间显示函数*********/void ledthrough(){P2=b[0],P0=a[(SN_G+Y)%10];delay(5);P2=b[1],P0=a[(SN_G+Y)/10];delay(5);P2=b[2],P0=a[(WE_G+Y)%10];delay(5);P2=b[3],P0=a[(WE_G+Y)/10];delay(5);}/*****数码管驱动函数********/void leddrive(){P2=b[0];delay(5);P2=b[1];delay(5);P2=b[2];delay(5);P2=b[3];delay(5);}/********主函数********/void main(void){init();for(;;){key();light();led();}}5.5 程序运行效果图图2 正常状态图3 黄灯状态图4 紧急状态六、心得体会通过这次交通灯的课程设计,使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。

相关主题