1、基于单片机的数显交通灯总结报告提供全套毕业设计,欢迎咨询电子技术综合设计姓 名: 专业与班级: 越崎11级2班 设计题目: 交通灯控制系统设计 时 间: 2013 2014 学年第(1)学期 指导教师: 成 绩: 日 期: 2013年12月26日一、课题任务基于单片机的数显交通灯;设计内容:(1)设计指标1) 设计一个十字路口的交通灯控制电路,要求东西方向车道和南北方向车道两条交叉道路上的车辆交替运行,每次通行时间都设为40秒。时间可设置修改;2) 在绿灯转为红灯时,要求黄灯先亮3秒钟,才能变换运行车道;3) 黄灯亮时,要求每秒闪亮一次;4) 东西方向、南北方向车道除了有红、黄、绿灯指示外,每
2、一种灯亮的时间都用显示器进行显示(采用倒计时的方法);5) 同步设置人行横道红、绿灯指示。(2)设计要求1) 画出电路原理图(或仿真电路图);2) 元器件及参数选择;3) 单片机程序设计与编程;4) 电路仿真与调试;5) PCB文件生成与打印输出二、方案比较与选择本设计以单片机为核心,以LED数码管作为倒计时指示,根据设计的要求我们考虑了各功能模块的几种设计方案,以求最佳方案,实现实时显示系统各种状态,系统还增设了根据交通拥挤情况可分别设置主干道和次干道的通行时间,以提高效率,缓减交通拥挤。系统总体设计框图如图1-1所示。图1-1系统总体设计框图1电源提供方案为使模块稳定工作,须有可靠电源。本
3、次设计考虑了两种电源方案:方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。方案二:采用单片机控制模块提供电源。该方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。综上所述,选择第二种方案。2显示界面方案该系统要求完成倒计时功能。基于上述原因,本次设计考虑了两种方案:方案一:完全采用点阵式LED显示。这种方案功能强大,可方便的显示各种英文字符,汉字,图形等,但实现复杂,且须完成大量的软件工作。方案二:完全采用数码管显示。这种方案优点是实现简单,可以完成倒计时功能。缺点是功能较少,只能显示有限的符号和
4、数码字符。根据本设计的要求,方案二已经满足了要求,所以本次设计采用方案二以实现系统的显示功能。3输入方案这里同样讨论了两种方案:方案一:采用8155扩展I/O口、键盘及显示等。该方案的优点是使用灵活可编程,并且有RAM及计数器。若用该方案,可提供较多I/O口,但操作起来稍显复杂。方案二:直接在I/O口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的端口资源还比较多,我们使用六个按键,分别是P16、P17、P27、P30、P32、P33,依次完成倒计时加1、倒计时减1、调完确认、调时方向切换、南北强行和东西强行等功能。由于该系统是对交通灯及数码管的控制,只需用单片机本身的I/O口就可实现
5、,且本身的计数器及RAM已经够用,故选择方案二。三、硬件设计硬件设计是整个系统的基础,要考虑的方方面面很多,除了实现交通灯基本功能以外,主要还要考虑如下几个因素:系统稳定度;器件的通用性或易选购性;软件编程的易实现性;系统其它功能及性能指标。因此硬件设计至关重要。现从各功能模块的实现逐个进行分析探讨。3.1总体设计本设计以单片机为控制核心,采用模块化设计,共分以下几个功能模块:单片机控制系统、键盘及状态显示、倒计时模块等。单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数据处理器。它由单片机振荡电路、复位电路等组成。键盘及状态显示,开关键盘输入交通灯初始时间,通过单片机P1输入到
6、系统。系统采用双数码管倒计时计数功能,最大显示数字99。3.2单片机最小系统1振荡电路AT89C51是内部具有振荡电路的单片机,只需在18脚和19脚之间接上石英晶体,给单片机加工作所需直流电源,振荡器就开始振荡起来。振荡电路就为单片机工作提供了所需要的时钟脉冲信号,是单片机的内部电路、单片机的内部程序(若有)开始工作。振荡电路不工作,整个单片机电路都不能正常工作。AT89C51常外接6MHz、12MHz的石英晶体,18脚和19脚分别对地接了一个20pF的电容,目的是防止单片机自激。若从18脚输入外部时钟脉冲,则19脚接地。2复位电路复位电路就是在RST端(9脚)外接的一个电路,目的是使单片机上
7、的电开始工作时,内部电路从初始状态开始工作,或者在工作中人为让单片机重新从初始状态开始工作。在时钟工作的情况下,只要复位引脚高电平保持在两个机器周期以上的时间,AT89C51便能完成系统重置的各项工作,使得内部特殊功能寄存器的内容均被设置成已知状态,并且从地址0000H处读入程序代码而执行程序。单片机最小系统电路如图3-1所示。图3-1单片机最小系统电路原理图3.3显示及其驱动模块1.键盘与状态显示功能键盘在本设计中用于紧急情况的手动控制装置,以及定时时间的设置等功能,起到了不可缺少的重要作用。当定时器定时为1秒时程序跳转到时间显示及信号灯显示子程序,它将依次显示信号灯时间,同时一直显示信号灯
8、的颜色,这时在返回定时子程序定时1秒,在显示黄灯的下一个时间,这样依次把所有的时间显示完后在重新给时间计数器赋初值,重新进入循环。键盘电路如图3-2所示。图3-2键盘电路2.倒计时计数功能本系统使用数码管完成倒计时显示功能。以南北方向为例,数码管显示的数值从绿灯的设置时间最大值往下减,每秒钟减1,一直减到1。然后又从红灯的设置时间最大值往下减,一直减到1。接下来又显示绿灯时间,如此循环。系统共有4个两位的LED数码管,分别放置在模拟交通灯控制板上的四个路口。因为四个方向的数码管应该显示同样的内容,所以我们可以把它们同样对待。也就是说各个方向的数码管个位(把数码管第二位定义为个位,第一位定义为十
9、位)用一根信号线控制,十位用另一根信号线控制。这里采用动态显示。LED数码管如图3-3所示。图3-3LED数码管四、软件设计软件在硬件平台上构筑,完成各部分硬件的控制和协调。系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是本系统的灵魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。同时,对软件进行全面测试也是检验错误排除故障的重要手段。这里我们选用了移值性好、结构清晰、能进行复杂运算的C语言来实现编程。4.1软件总体设计软件总体设计主要完成各部分的软件控制和协调。本系统主程序模块主要完成的工作是对系统的
10、初始化,发送显示数据,同时对键盘进行扫描,等待外部中断,以及根据所需要的功能进行相应的操作。其流程图如图4-1所示。图4-1软件总体流程图4.2软件主要子程序设计1.紧急状态子程序设计在紧急状态下,只有紧急状态手动控制按键才可以使所有的LED都被置为红灯,车辆禁行、行人通行。紧急情况结束后再转成自动状态。程序流程如图4-2所示。图4-2紧急状态子程序2.设置状态子程序设计设置状态子程序如图4-3所示。图4-3设置状态子程序在设置状态,按下按键1(P16)开始设置南北的红灯时间,按下按键2(P17)设置南北的绿灯时间,按下按键3(P27)返回正常运行状态。红灯和绿灯的时间最大可以设为99,超出9
11、9的时候会从40开始重新计数。它包含倒计时调整和紧急状态两个状态。主程序中放了一个按键的判断指令,当有按键按下的时候,程序就自动的跳转到按键子程序处理。当检测到按键2(P17)键按下的时候就自动返回到主程序。当出现紧急的情况的时候,按下按键3(P27)就切换到紧急状态,当紧急事件处理完毕的时候,按下按键2(P17),就可以返回正常状态。3.键盘模块子程序设计键盘是人机进行交互的重要接口之一。用户通过按键对仪器下达命令,仪器对按键译码获得相应的键值,并执行相应的命令程序。键盘部分的软件实现主要是指对键盘管理进行编程,从而成功地读取键盘值,实现相应的功能。键盘实现的程序流程图如图4-4所示。图4-
12、4键盘实现的程序流程图五、系统调试5.1系统操作说明本设计采用的是开关键盘,共6个键。键盘用来输入倒计时时间数字信息;功能菜单选择键则用于主次干道通行时间分别设置、确定、取消(即调时方向的切换、倒计时的加减、东西强行、南北强行,调完确认)等功能。系统分为两个状态:设置状态和显示状态。利用键盘可以进行两个状态间的切换;开机时,系统为显示状态,此时显示四个路口数码管从默认的倒计时时间开始倒计时;显示状态时,交通灯模组的四个LED数码管进行倒计时;显示过程中按键可以重新进入设置状态。5.2调试根据电路功能逐级进行:1通行方式功能调试:对行人和行车方向指示灯亮度和驱动电路调试;2倒计时功能调试:数码管
13、亮度调试;3紧急情况手动控制功能调试:包括按键功能的调试;测试结果如下图所示:调试后的原理图结论本设计以单片机为核心,以LED数码管作为倒计时指示,该设计很好地完成了设计的各项要求,主要体现如下:出现紧急情况时系统可设置成手动控制,紧急情况结束后再转成自动,控制十分灵活;主干道和次干道可以分开设置时间功能,使控制更加灵活;以上所有功能均在城市交道口模型上得到很好地实现,该设计在确保功能实现的基础上,充分考虑了控制系统操作方便、可靠性高、稳定性好等要求。该设计的交通灯控制器,实现了能根据实际车流量通过AT89C51芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩3秒时黄灯闪烁警示
14、绿灯时间可检测车流量并可通过双位数码管显示。通过这次设计实验,使我得到了一次用专业知识、专业技能分析和解决问题全面的系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧,特别是对C语言的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。该设计虽然结束了,但由于时间、设备、条件和水平等各方面因素,还存在一些不足,还需要不断改进,当然也就需要学习并运用更多相关的知识。参考文献1沈鸿星LED交通信号灯系统的硬件设计J电子工程师,2004(03)2张毅坤单片微型计算机原理及应用西安:西安电子科技大学出版社,19983余锡存,曹国华单片机原理及接口技
15、术M陕西:西安电子科技大学出版社,20004 邓世建,微机原理与应用,徐州:中国矿业大学出版社,2012附录1交通灯的总体设计原理图附录2PCB板图附录三 实物图附录四 程序清单#include #include #define uchar unsigned char#define uint unsigned intsbit k1=P16;sbit k2=P17;sbit k3=P27;sbit k4=P30;sbit yellowled_nb=P14; /南北黄灯sbit yellowled_dx=P11; /东西黄灯uchar code table11=0x3f,0x06,0x5b,0x4
16、f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;uchar data dig; /位选uchar data led; /偏移量uchar data buf4;uchar data sec_dx=39;/东西数码指示值uchar data sec_nb=39;/南北数码指示值uchar data set_timedx=39;uchar data set_timenb=39;/倒计时设置的键值保存uchar data b;/定时器中断次数bit time;/灯状态循环标志bit int0_time;/中断强行标志bit set;/调时方向切换键标志void delay(i
17、nt ms);/延时子程序void key();/按键扫描子程序void key_to1();/键处理子程序void key_to2();void display();/显示子程序void main() TMOD=0X01; TH0=0X3C; TL0=0XB0; EA=1; ET0=1; TR0=1; EX0=1; EX1=1; P1=0Xf3;/ 东西通行 while(1) key(); /调用按键扫描程序 display(); /调用显示程序 void key() /按键扫描子程序 if(k1!=1) delay(10); if(k1!=1) while(k1!=1); key_to1(
18、); if(k2!=1) delay(10); if(k2!=1) while(k2!=1); key_to2(); if(k4!=1) delay(10); if(k4!=1) while(k4!=1); set=!set; if(k3!=1&int0_time=1) TR0=1; /启动定时器 sec_nb=39; sec_dx=39; int0_time=0;/清标志 else if(k3!=1&int0_time=0) TR0=1;set_timenb=sec_nb; set_timedx=sec_dx; /设置的键值返回保存 void display() buf1=sec_dx/10
19、; /第1位 东西秒十位 buf2=sec_dx%10; /第2位 东西秒个位 buf3=sec_nb/10; /第3位 南北秒十位 buf0=sec_nb%10; /第4位 南北秒个位 P0=tablebufled; delay(2); /先延时,提前显示一位了 P2=dig; dig=_crol_(dig,1); led+; if (led=4) led=0; dig=0xfe; void time0(void) interrupt 1 using 1 /定时中断子程序 b+; if(b=16) / 定时器中断次数。 b=0; sec_dx-; sec_nb-;/*南北黄灯闪烁判断*/ i
20、f(sec_nb=3&time=0) yellowled_nb=1;/南北黄灯亮 delay(300); yellowled_nb=0; if(sec_nb=2&time=0) yellowled_nb=1;/南北黄灯亮 delay(300); yellowled_nb=0; if(sec_nb=1&time=0) yellowled_nb=1; delay(300); yellowled_nb=0; /*东西黄灯闪判断*/ if(sec_dx=3&time=1) yellowled_dx=1;/南北黄灯亮 delay(300); yellowled_dx=0; if(sec_dx=2&tim
21、e=1) yellowled_dx=1;/南北黄灯亮 delay(300); yellowled_dx=0; if(sec_dx=1&time=1) yellowled_dx=1; delay(300); yellowled_dx=0; /*/ if(sec_dx=0|sec_nb=0) /东西或南北先到达1S时即开始重新计时 sec_dx=set_timedx; sec_nb=set_timenb; /第一次循环结束重置 if(time=1) P1=0XF3; /东西通行 else P1=0xde; /南北通行 time=!time; /取反 void key_to1() TR0=0; /关
22、定时器 if(set=0) sec_nb+; /南北加1S else sec_dx+;/东西加1S if(sec_nb=100) sec_nb=1; if( sec_dx=100) sec_dx=1;/加到100置1 void key_to2() TR0=0;/关定时器 if(set=0) sec_nb-; /南北减1S else sec_dx-; /东西减1S if(sec_nb=0) sec_nb=99; if( sec_dx=0 ) sec_dx=99;/减到1重置99 void int0(void) interrupt 0 using 1 /东西强行 TR0=0; P1=0XF3; sec_dx=88; sec_nb=88; int0_time=1; void int1(void) interrupt 2 using 1 /南北强行 TR0=0; P1=0XDE; sec_nb=88; sec_dx=88; int0_time=1;void delay(int ms) uint j,k; for(j=0;jms;j+) for(k=0;k124;k+);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1