1、近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。初始状态为状态1,南北方向绿灯通车,东西方向红灯。经过一段时间(25S)转换状态2,南北方向亮黄灯,延时5S,东西方向仍然红灯,再转换到状态3,东西方向绿灯通车,南北方向红灯。过一段时间(25S)转换到状态4,东西方向绿灯亮黄等,延时5S,南北方向仍然红灯。最后循环至南北绿灯,东西红灯。在这些状态下,有时钟倒数计时。二、电路设计及原理分析1、本设计由STC82C52最小系统模块,电源供电模块,交通信号灯模块,显示倒计时模块。2、路口交通指挥系统示意图如下所示:(本设计实物中东西、南北方向各做一个)3、设计的方
2、案如下:(1)本设计采用单片机89C52作为控制器,通行时间及等待时间使用数码管以倒计时的方式显示,使用单片机P0.2-P0.4口控制东西方向的车辆通行;使用单片机P0.5-P0.7口控制南北方向车辆的通行;用P0.1-P02口控制两位共阴极数码管的选通;用P3.3口作为紧急情况东西南北方向全部红灯。(2)方案中设计有由人工控制的复位电路。(3)考虑到紧急情况获交通管制阶段需要路段不通车,本方案设计有东西南北四个方向全为红灯的设计。综上所诉,该产品的实现需要单片机模块,晶振模块,复位模块,中断信号模块,交通灯模块,倒计时数显模块,电源供电模块。三、焊接及安装调试过程1、调试过程如下图所示:2、
3、焊接过程: 3、焊接注意事项:(1)焊接前,应先检查焊锡设备和工具是否安全,如是否接触良好,焊接电缆绝缘外套有无破损等。(2)选用合适的焊锡。应选用焊接电子原件用的低熔点焊锡丝。(3)焊接时间不宜过长,否则容易烫伤原件。必要时可用镊子夹住管脚帮忙散热。(4)电烙铁应放在烙铁架上。2、安装调试过程(1)焊接完毕后,通电前对电路进行检查,首先检查正极与地是都短路,接下来检查各器件的高电平与电源是否接通,接地端是否与地线接通;(2)通电检查,如果通电交通灯没有反应,应立即关掉电源。重新检查电路。检查cpu的30号引脚电平的大小,并作出判断。正常情况下,30号引脚的电平为1-3V,若为5V,则说明cp
4、u没有正常工作。四、软件设计软件的设计分以下5个步骤进行:1、分析问题,抽象出描述问题的数据模型根据课程设计要求,基本提出设计方案及包含的设计模块2、确定程序设计的思想主函数控制交通灯的亮灭,并加入延时子程序、显示子函数等调用函数。定义初试时间为25秒,每减一秒,进行一次延时子函数调用,并通过计时器控制时间为1秒,并调用数码管显示函数,从而输出倒计时,如此循环。3、流程图如下主函数延时子函数数显子函数返回主函数延时子函数4、根据设计进行程序编写。5、静态检查,上机调试。五、安装调试结果六、个人体会及心得 查找教材,资料,相应软件,为了这次课程设计,我们在图书馆及网络上查找了大量的相关资料,终于
5、被我找全了和本次课程设计相关的不懂问题。根据所分析的系统的电路原理图,结合系统的设计要求,在Proteus环境下进行元器件之间的连线和编译与仿真,及时检查元器件的放置、连线是否有错误。 根据交通灯系统的控制要求,经过实验,排除所有实验中的错误并实现了预定的功能。在老师的指导下,通过学习交通灯系统控制器的设计的实验,学习一种设计电子的软件,增加了我们对电子设计的了解。本次设计出现的问题及解决方法:1、焊接不够熟练,出现了虚焊漏焊情况,经过后期检查电路才得以发现并解决问题,自己的焊接水平有了很大的提高;2、程序编写过程比较艰难,自己的编程能力还有待提高,通过查阅书籍资料,自学了很多课外知识,收获颇
6、丰;3、在电脑上进行仿真时,对软件操作熟练,软件的仿真还需要狠多特殊要求,比如:电脑用户名路径不能出现中文等,需要多次尝试才能发现问题。此次实验不但提高了我们实践的能力和理论水平,而且对于我们认识掌握各种操作技巧具有重大意义,使我们的综合素质得到了很大的提高。当然,通过这次实习,对我的影响远不只以上这些,它对我在以后的学习和生活中将会起到不可估量的作用。最后,我建议学校多搞些这样的设计,在锻炼我们的同时还丰富了我们的生活,还建议在今后的设计报告中,提供一些好的报告让我们参考。附录:#includesbit led_A=P00; /数码管位sbit led_B=P01;sbit dx_R=P02
7、;sbit dx_Y=P03;sbit dx_G=P04;sbit nb_R=P07;sbit nb_Y=P06;sbit nb_G=P05;bit flag=0;sbit key_stop=P33;char N=25; /初始时间是25char tab_disp= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x77,0x7C,0x39,0x5E,0x79,0x71,0x80;/共阴极码表/*延时子函数*/void delay(int t )while(t-);/*显示子函数*/void display(char dat) led_A=
8、led_B=1; P2=0XFF; P2=tab_dispdat/10; if(dat/10)led_A=0; delay(1000); /延时led_A=led_B=1; /段灭显 位灭显 P2=tab_dispdat%10; /赋显示的数 led_B=0;/循环显示60遍显示的函数void deal(char m) int t=60; while(t-)display(m); /循环显示60遍显示的函数void KEY() unsigned char save; if(key_stop=0) flag=1; save=P0; P0=0x84; while(key_stop=0); whil
9、e(flag=1) if(key_stop=0) flag=0; P0=save; while(key_stop=0); /*主函数*/void main(void) char i; EA=1; /全局中断开关 IT1=1; /外部中断下降沿有效 EX1=1; while(1) N=25; dx_R=1;dx_Y=0;dx_G=0; /指示灯0是亮,1是灭 nb_R=0;nb_Y=0;nb_G=1; for(i=N;i0;i-) /一秒一秒的减 deal(i); KEY();nb_Y=1;nb_G=0; N=5; /时间变成5 dx_R=0;dx_G=1; nb_R=1; /时间变成25i-) /一秒一秒的减dx_Y=1;