单片机交通灯控制 课程设计报告_第1页
单片机交通灯控制 课程设计报告_第2页
单片机交通灯控制 课程设计报告_第3页
单片机交通灯控制 课程设计报告_第4页
单片机交通灯控制 课程设计报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

新能源与动力工程学院电子元器件调研与系统设计报告交通信号灯的制作专业电力工程与管理班姓级名电力1201 班学号师陆兴旺2015 年12 月指导教师评语及成绩评定表指指导教师评语(40)(50)(10)总成绩(100)成绩指导教师签字:年 月 兰州交通大学新能源与动力工程学院课程设计任务书课程名称电子元器件调研与系统设计报告 指导教师(签名班级姓名学号201211352 一、课程设计题目交通信号灯的制作二、课程设计设计技术要求:stc89C51protel99se,pcb三、课程设计的目的通过课程设计,主要达到以下目的:使学生增进对单片机的感性认识,加深对单片机理论方面的理解;/I/O计和实现单片机应用系统打下良好基础。四、课程设计的主要内容和要求(等)本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示。按键可以控制禁行、复位、东西通行、南北通行、时间加、时间减、切换等功能。五、工作进度安排熟悉题目、查阅资料,拟定设计方案按要求制定出切实可行的方案设计硬件电路及软件程序完成硬件设计及程序设计仿真调试及产品焊接先进行计算机仿真再完成实际焊接产品整理调试并完成设计报告实现设计要求,报告按要求装订成册六、主要参考文献[l]边海龙,孙永奎.单片机开发与典型工程项目实例详解[J].电子工业出版社,2008(10).王为青,邱文勋.51[J][3[J].电子工业出版社,2008审核批准意见系主任(签字) 年 月 日目录一、系统方案设计与要求 1单片机交通灯控制系统通行方案设计 1单片机交通控制系统的功能要求 2显示模块功能 2按键模块功能 2单片机交通控制系统的基本构成及原理 2二、系统硬件电路的设计 3系统硬件总电路构成 3单片机最小系统 3显示系统 4LED显示 4数码管显示 4键盘输入电路 5三、系统软件程序的设计 5程序主体设计流程 5子程序模块设计 6四、小结 8五、参考文献 9附录A 10附录B 11附录C 12PAGEPAGE10一、系统方案设计与要求单片机交通灯控制系统通行方案设计设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。其1-1所示。说明:黑色表示亮,白色表示灭。交通状态从状态61,周而复始,即如图(2-1)6这四个状态归纳如下:图1-1交通状态20秒。此状态下,东西向禁止通行,南北向允许通行;东西方向绿灯灭,同时黄2秒。此状态下,除了已经正在通行中的其他20秒。此状态下,东西向允许通行,南北向禁止通行;南2秒。此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。下面我们可以用图表表示灯状态和行止状态的关系如下:表1-1交通状态及红绿灯状态东西向南北向状态1禁行通行状态3等待变换等待变换状态4通行禁行状态6等待变换等待变换东西红灯1100东西黄灯0001东西绿灯0010南北红灯0011南北绿灯1000南北黄灯0100东西南北四个路口均有红绿黄3灯和数码显示管4个,在任一个路口,遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换。状态及红绿灯状态如表2-1所示。说明:0表示灭,1表示亮。单片机交通控制系统的功能要求本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示。按键可以控制禁行、复位、东西通行、南北通行、时间加、时间减、切换等功能。显示模块功能显示模块分数码管显示和LED显示,数码管倒计时显示可以提醒驾驶员在信号灯颜色发生改变的时间、在“停止”和“通过”两者间作出合适的选择。驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的一种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择。通过两种显示结合,是本设计更合理可靠。按键模块功能口足够,可直接采用独立式。按键可00可以将整个系统复位;东西通行是东西方向的绿灯亮,南北方向上的红灯亮;南北通行为南北方向上的绿灯亮,东西方向上的红灯亮;时间加减可以设置通行和等待通行的时间;切换按键可以切换加减的方向时间。通过安检模块的控制,使得整个系统具有灵活性,实用性。单片机交通控制系统的基本构成及原理十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用STC89C52单片机以及单片机最小系统和三极管驱动电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。设计通过两位一体共阴极数码管显示,并能通过按键对定时进行设置。本系统实用性强、操作简单、扩展功能强。在相同的时间里提高通车的质量、效率。并能在高峰期根据实际状况结合方程式控制按钮来调整主次干道的通车时间,降低交通拥挤堵塞现象。并使交通控制系统具有紧急控制,使救护车、救护车通过时,使两个方向均亮红灯,救护车和消防车通过后,恢复原来状态,增加对出现特殊情况的处理能力。本单片机控制交通灯系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,当然,接入LED行使者,更具人性化。本系统在此基础上,单片机对此进行具体处理,及时调整控制指挥。如图(2-2)所示:键盘设置模块对系统输入模式选择及具体通行时间设置的信号,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。在此过程中还要实时捕捉违规检测和紧急按键信号,以达到对异常状态进行实时控制的目的。急停按键和违规检测随时调用中断。最小系统最小系统复位电路 驱动显示复位电路驱动显示按键控制按键控制外围接口红黄绿信号灯红黄绿信号灯8LED数码管8LED数码管单片机据此,本设计系统以单片机为控制核心,连接成最小系统,和按键设置模块等产生输入,信号灯状态模块,LED图如上所示。二、系统硬件电路的设计系统硬件总电路构成stc89C51单片机及外围器件构成最小控制系统,124组红绿黄三色灯构成信号灯指示模块,8LED择按钮和紧急按钮等。系统硬件电路由单片机、状态灯、LED显示、按键等组成。其具体的硬件电路3-1所示。P0,P1LED数码管的型和位,P2极管,XTAL1XTAL2接入晶振时钟电路,REST引脚接上复位电路,P3于口按键控制。单片机最小系统STC89C51XTAL1XTAL2(简称晶振C1C230pFCYS1.2-12MHz12MHz11.0592MHz。STC89C51RST2片机内部就执行复位操作(若该引脚持续保持高电平,单片机就处于循环复位状态。最小系统图如图2-1所示VCCVCCVCCK01324RESET+C110uFC2R710KHM3090 Y1C33012345678911111111112P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTP3.0(RXD)P3.1(TXD)P3.2(INT0P3.3(INT1P3.4(T0)P3.5(T1)P3.6(WR)P3.7(RD)XTAL2XTAL1GND89C52VCC(AD0)P0.0(AD1)P0.1(AD2)P0.2(AD3)P0.3(AD4)P0.4(AD5)P0.5(AD6)P0.6(AD7)P0.7EA/VPPALE/PROGPSEN(A15)P2.7(A14)P2.6(A13)P2.5(A12)P2.4(A11)P2.3(A10)P2.2(A9)P2.1(A8)P2.04039383736353433323130292827262524232221图2-1单片机最小系统原理图显示系统LED显示LED交通灯利用发光二极管来显示不同颜色的信号指示灯。D1D1YD2GD3R数码管显示

图2-2LED灯数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示8124位等等数码管:按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码(COM)的数码管,共阳COM接到(COM)的数码管,共阴数码管在应用时应将公共极COMGND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。由于它的价格便宜使用简单在电器特别是家电领域应用极为广泛。

3 BCE D1 9

8 7 6BCE Dd AS1 2 3 S5键盘输入电路

图2-3数码管显示单片机键盘有独立键盘和矩阵式键盘两种:独立键盘每一个I/O口上只接一个按键,按键的另一端接电源或接地(一般接地I/O在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。这种抖动一般10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒的单片机而言则是慢长的。硬件去抖动就是用部分电路对抖动部分加之处理,软件去抖动不是去掉抖动,而是避抖动部分的时间,等键盘稳定了再对其处理。所以这里选择了软件去抖动,实现法是先查寻按键当有低电平出现时10~200(20毫秒110~2000时则表示有按键按下,调用相应的处理程序。硬件电路2-4示:

K2 K3 K7 K4121212121212123stop43dx43nb43ok4343434qiehuan三、系统软件程序的设计程序主体设计流程

图2-4键盘控制电路图LED显示程序,消抖动延时程序,次状态判断及处理程序,紧停或违规判断程序,中断服务子程序,车流量计数程序,红绿灯时间调整程序等。50ms图如图(3-1)所示。子程序模块设计

图3-1系统总的流程图按键模块的控制是调用中断来实现控制的,独立式键盘的实现方法是利用I/OI/O口,程序开始时将此I/O口置于高电平,平时无键按下时I/OI/OI/O口为低电平。按键I/OI/O口的电平状态就可以了解我们是否有按键动作了。图3-2中断子程序定时中断子程序是本设计的重点,负责完成数码管输出数据刷新和各个状态的处理切换。中断子程序包括数码管输出数据刷新程序和各状态处理程序。中断程序的流程图如图3-2所示。图3-3 定时中断流程图定时中断服务程序在系统中的函数如下:void int_t0() interrupt 1 using 1{TR0= 0;time++;tc++;if(tc>=3){tc=0;}if(time==100){waittime--;}elseif(time==200){waittime--;sec--;time=0;shu0=sec%10;shu1=sec/10;}TH0= TL0= if(tc==0) {smdis=md[shu0];weishuang0 = 0;weishuang1 = weishuang2 = 1;}else if(tc==1) { smdis=md[shu1]; weishuang0 = 1; weishuang1 = weishuang2 = 1;}elseif(tc==2){smdis=md[shu2];weishuang0 = 1;weishuang1 = weishuang2 = 0;}//if(tc>=3){tc=0;}TR0= 1;}我们由在主程序中设定的初值可知T05毫秒CPU序中,CPU200。为零表示1秒已到0.四、小结经过这次课程设计,我觉得自己学到了不少东西。归纳起来,主要有以下几点:将所学到的知识充分运用到本次设计中。同时,我也认识到自己知识上不足的地方,体会到了所学理论知识的重要性,知识掌握得越多,设计得就更全面、更顺利、更好。理论研究到硬件原理图设计,从元器件的选择到板的制作,从软件编程到最后的调试过程都由小组独立完成。这不仅锻炼了我们独立完成设计工作的能力,更重要的是了解了一个电子产品的设计流程,为将来投入工作增加了宝贵的经验,奠定了坚实的基础。解决的问题,于是我通过上网查阅和图书馆借阅资料,或是通过与老师同学交流一步步地解决了。从中我懂得了我们这个专业的知识面相当广泛,我们需要不断通过各种途径更新自己的知识,不断充实自己,同时要懂得与他人交流意见,积极听取别人的建议,懂得不断学习的重要性。五、参考文献[l]边海龙,孙永奎.单片机开发与典型工程项目实例详解[J].电子工业出版社,2008.[2]王为青,邱文勋.51单片机开发案例精选[J].人民邮电出版社,2001...[J].[4].[J].清华大学出版社,2005,(4).[5]黄智伟.[J].[6]蒋辉平,周国雄.基于Proteus的单片机系统设计与仿真实例[M].机械工业出版社.2009.附录A元件名称数量(个)元件名称数量9*15万用板1个0.36寸两位一体共阴4个STC89C511个数码管发光二极管红绿4个黄40PIC座1个DC座1个12M晶振1个按键5个30P瓷片电容2个自锁开关1个10k电阻1个导线若干102排阻2个USB电源线1根10uF电容1焊锡若干附录 B实物显示图附录 C#include<reg51.h> //#defineucharunsignedchar#defineuintunsignedint //宏定义uchardatabuf[4]; //秒显示的变uchardatasec_dx=20; //东西数默认uchardatasec_nb=30; uchardataset_timedx=20; //设置东西方向的时uchardataset_timenb=30; //设置南北方向的时intn;uchardatacountt0,countt1;//定时器0中断次数//定义6组开关sbitk4=P3^7;//设置时间sbitk3=P3^6;//时间减sbitk2=P3^5;//时间加sbitk1=P3^4;//切换紧急和夜间sbitRed_nb=P2^6; //南北红灯标志sbitYellow_nb=P2^5; //南北黄灯标志sbitGreen_nb=P2^4; //南北绿灯标sbitRed_dx=P2^3; //东西红灯标sbitYellow_dx=P2^2; //东西黄灯标sbitGreen_dx=P2^1; //东西绿灯标志ucharset=0; //调时方向切换键标志=1ucharmode=0;bitdx_nb=0; //东西南北控制位bitshanruo=0; //闪烁标志位bityejian=0; //夜间黄灯闪烁标志位ucharcodetable[11]={ //共阴极字型码0x3f,//--00x06,//--10x5b,//--20x4f,//--30x66,//--40x6d,//--50x7d,//--60x07,//--70x7f,//--80x6f, //--90x00 //--NULL};//函数的声明部分voiddelay(intms); //延时子程序voidkey(); //按键扫描子程序voidkey_to1(); //voidkey_to2();voidkey_to3();voiddisplay(); //显示子程序voidlogo(); //开机voidBuzzer();//主程序voidmain(){TMOD=0X11; //TH1=0X3C;TL1=0XB0;TH0=0X3C; //0置初值TL0=0XB0;EA=1; //开总中断ET0=1; //0中断开启ET1=1; //1中断开启TR0=1; //0TR1=0; //1EX0=1; //0EX1=1; //1logo(); //开机初始化P2=0Xc3; //开始默认状态,东西绿灯,南北黄灯sec_nb=sec_dx+5; //5秒while(1) //主循环{key(); //调用按键扫描程序display(); //调用显示程序}}//函数的定义部分voidkey(void)//按键扫描子程序{/* if(k1!=1) //K1(时间加)按下时{display(); //调用显示,用于延时消if(k1!=1) //如果确定按下{TR0=0; //关定时器shanruo=0; //闪烁标志位P2=0x00; //灭显示TR1=0; //1if(set==0) //设置键按set_timedx++; //南北加1Selseset_timenb++; //1Sif(set_timenb==100)set_timenb=1;if( set_timedx==100)set_timedx=1;sec_nb=set_timenb;sec_dx=set_timedx;do{display();}while(k1!=1);}}if(k2!=1){

//加到100置1//设置的数值赋给东西南北//调用显示,用于延时//等待按键释放//当K2(时间减)按键按下时display();if(k2!=1){

//调用显示,用于延时消抖//如果确定按下TR0=0;shanruo=0;P2=0x00;TR1=0;if(set==0)set_timedx--;

//关定时器0//闪烁标志位关//灭显示//关定时器1//南北减1Selse

set_timenb--;

//东西减1Sif(set_timenb==0)set_timenb=99;if( set_timedx==0set_timedx=99;sec_nb=set_timenb;sec_dx=set_timedx;do{

//减到1重置99//设置的数值赋给东西南北display(); //调用显示,用于延时}while(k2!=1); //等待按键释放}}if(k3!=1){

//当K3(确认)键按下时display();if(k3!=1){

//调用显示,用于延时消抖//如果确定按下TR0=1;sec_nb=set_timenb;sec_dx=set_timedx;TR1=0;if(set==0){

//启动定时器0//从中断回复,仍显示设置过的数值//显示设置过的时间//关定时器1//时间倒时到0时}else{}}}

P2=0X00;Green_dx=1;Red_nb=1;sec_nb=sec_dx+5;P2=0x00;Green_nb=1;Red_dx=1;sec_dx=sec_nb+5;

//灭显示//东西绿灯亮//南北红灯亮//回到初值//南北绿灯,东西红灯if(k4!=1){

//当K4(切换)键按下display();if(k4!=1){

//调用显示,用于延时消抖//如果确定按下TR0=0;set=!set;TR1=0;dx_nb=set;do{

//关定时器0//取反set标志位,以切换调节方向//关定时器1display(); //调用显示,用于延时}while(k4!=1);}}if(k5!=1){

//等待按键释放//当K5(禁止)键按下时display();if(k5!=1){TR0=0;P2=0x00;Red_dx=1;Red_nb=1;TR1=0;sec_dx=00;sec_nb=00;do{display();}while(k5!=1);}}if(k6!=1){

//调用显示,用于延时消抖//如果确定按下//关定时器//灭显示//全部置红灯//四个方向的时间都为00//调用显示,用于延时//等待按键释放//当K6(夜间模式)按下display();if(k6!=1){TR0=0;P2=0x00;TR1=1;sec_dx=00;sec_nb=00;do{display();}while(k6!=1);}}*/

//调用显示,用于延时消抖//如果确定按下//关定时器//四个方向的时间都为00//调用显示,用于延时//等待按键释放if(k2!=1&&set!=0) //时间加)按下时{display(); //调用显示,用于延时消抖if(k2!=1&&set!=0) //如果确定按{TR0=0; //关定时器shanruo=0; //闪烁标志位关P2=0x00;TR1=0;

//灭显示

//启动定时1if(set==1)set_timedx++;elseif(set==2)set_timenb++;if(set_timenb==100)set_timenb=1;if( set_timedx==100)set_timedx=1;sec_nb=set_timenb;sec_dx=set_timedx;do{display();}while(k2!=1);}}if(k3!=1&&set!=0){

//设置键按下//1S//1S//加到100置1//设置的数值赋给东西南北//调用显示,用于延时//等待按键释放//当K2(时间减)按键按下时display();if(k3!=1&&set!=0){

//调用显示,用于延时消抖//如果确定按下TR0=0;shanruo=0;P2=0x00;TR1=0;if(set==1)set_timedx--;elseif(set==2)set_timenb--;if(set_timenb==0)set_timenb=99;

//关定时器0//闪烁标志位关//灭显示//关定时器1//1S//1Sif( set_timedx==0)set_timedx=99; //减到1重置99sec_nb=set_timenb; //设置的数值赋给东西南sec_dx=set_timedx;do{display(); //调用显示,用于延时}while(k3!=1); //等待按键释放}}if(k4!=1&&mode==0){

//当K3(确认)键按下时display();if(k4!=1){

//调用显示,用于延时消抖//如果确定按下TR0=0;P2=0x00;

//灭显示

//启动定时器0sec_nb=set_timenb;sec_dx=set_timedx;TR1=0;set++;if(set>2){set=0;TR0=1;sec_nb=set_timenb;sec_dx=set_timedx;TR1=0;P2=0Xc3;sec_nb=sec_dx+5;}do{display();}

//从中断回复,仍显示设置过的数值//显示设置过的时间//关定时器1//启动定时器0//从中断回复,仍显示设置过的数值//显示设置过的时间//关定时器1//调用显示,用于延时while(k4!=1);}}if(k1!=1&&set==0){

//当K5(禁止)键按下时display(); //调用显示,用于延时消抖if(k1!=1) //如果确定按下{mode++;if(mode==1){TR0=0; //关定时器P2=0x00; //灭显示Red_dx=1;Red_nb=1; //TR1=0;sec_dx=00; //sec_nb=00;}elseif(mode==2){TR0=0; //关定时器P2=0x00;TR1=1;sec_dx=00; //00sec_nb=00;}if(mode>2){mode=0;TR0=1; //0sec_nb=set_timenb; //从中断回复,仍显示设置过的数值sec_dx=set_timedx; //TR1=0;P2=0Xc3;sec_nb=sec_dx+5; //1}do{display(); //调用显示,用于延时}while(k1!=1); //等待按键释放}}}voiddisplay(void)//显示子程序{buf[1]=sec_nb/10; //第1位东西秒十位buf[2]=sec_nb%10; //第2位东西秒个buf[3]=sec_dx/10; //第3位南北秒十位buf[0]=sec_dx%10; //第4位南北秒个P1=0xff; //初始灯为灭的P0=0x00; ////灭显示P1=0xfe; //片选LED1P0=table[buf[1]]; //送东西时间十位的数码管编delay(1); //延时P1=0xff; P0=0x00; P1=0xfd;P0=table[buf[2]];//片选LED2//送东西时间个位的数码管编码delay(1);//延时P1=0xff;//关显示P0=0x00;//关显示P1=0Xfb;//片选LED3P0=table[buf[3]];//送南北时间十位的数码管编码delay(1);//延时P1=0xff;//关显示P0=0x00;//关显示P1=0Xf7;//片选LED4P0=table[buf[0]];//送南北时间个位的数码管编码}delay(1);//延时voidtime0(void)interrupt1using1 //定时中断子程序{TH0=0X3C; //重赋初值TL0=0XB0; //12m50ms//重赋初值TR0=1; //重新启动定时器countt0++; //1if(countt0==10) //10也就是半秒{if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪{Green_dx=0;Yellow_dx=0;}if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪{Green_nb=0;Yellow_nb=0;}}if(countt0==20) //=20时(1秒时){ countt0=0; //清零计数sec_dx--; //东西时间减1sec_nb--; //1if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪{Green_dx=0;Yellow_dx=1;}if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪{G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论