单片机课程设计-智能交通灯(完整版)

单片机课程设计报告

交通灯

这个是我亲自做过的 保证能用 !希望对大家有所帮助!但是不要照抄照搬哦!

            

智能交通灯控制系统设计

摘要

近年来,随着我国国民经济的快速发展,我国机动车辆发展迅速,而城镇道路建设由于历史等各种原因相对滞后,交通拥挤和堵塞现象时常出现。如何利用当今计算机和自动控制技术,有效地疏导交通,提高城镇交通路口的通行能力,减少交通事故是很值得研究的一个课题。目前,国内的交通灯一般设在十字路口,在醒目位置用红、绿、黄三种颜色的指示灯加上一个倒计时的显示器来控制行车。

关键词:

AT89S51,交通规则,交通灯,车流量控制

1.设计目的:

1、通过交通信号灯控制系统的设计,掌握80C51传输数据的方法,以控制发光二极管的亮与灭以及数码管的显示;

2、用80C51作为输出口,控制十二个发光二极管熄灭,模拟交通灯管理.

3、通过单片机控制设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高动脑和动手的能力;

4、完成控制系统的硬件设计、软件设计、仿真调试。

2.设计内容和功能:

交通信号灯模拟控制系统设计利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭。用8051做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。在一个交通十字路口有一条主干道(东西方向),一条从干道(南北方向),主干道的通行时间比从干道通行时间长,四个路口安装红,黄,绿,灯各一盏;

如图所示:

1、设计一个十字路口的交通灯控制电路,要求东西方向(主干道)车道和南北方向(从干道)车道两条交叉道路上的车辆交替运行,时间可设置修改。

2、在绿灯转为红灯时,要求黄灯闪烁,才能变换运行车道

3、黄灯亮时,要求每秒闪亮一次。

4、紧急情况发生,如消防车、救护车等紧急车辆通过时,要求四个路口同时加亮黄灯闪烁,并且倒计时显示装置关闭,四个路口的信号灯全部变成红灯。

5当东西或南北方向车流量大时,四个路口同时加亮黄灯进行闪烁,并且倒计时显示装置关闭,黄灯闪烁5秒后,只允许东西或南北方向车辆通行。

3各功能模块说明及系统使用说明;

3.1总体设计电路如图所示

3.2交通灯电路

为了方便实验,可以用发光二极管作为交通灯来使用,单片机的I/O接口直接和交通灯(发光二极管)连接。在十字路口的四组红、黄、绿三色交通灯中,东西方向道路上的两组同色灯连接在一起,南北方向道路上的两组同色的灯也彼此连接在,受单片机P1.0~P1.5控制。单片机的I/O接口与交通灯电路的具体连接方式为:P1.0~P1.2分别接东西方向的红、黄、绿共6个放光二极管,P1.3~P1.5分别接南北方向的红、黄、绿共6个发光二极管。12个发光二极管采用了共阳极的连接方式,因此I/O口输出低电平时,与之相连的发光二极管会亮,I/O口输出高电平是,相应的发光二极管会灭。交通灯电路如图所示。

3.3倒计时显示电路

    该交通灯控制系统在正常情况下,每60s循环一次,为方便提示路上行人及车辆交通灯转换的剩余时间,专门为控制系统设计了一个倒计时显示装置。该显示装置选用七段数码管来显示交通灯转换的剩余时间,根据控制要求,每个路口需要两个数码管,这样四个路口就要求八个数码管。有序AT89C51单片机的I/O作为输出时,具有较强吸收电流能力,因此我们可以选用共阳型数码管,这样由单片机的I/O就可以直接驱动,从而简化硬件电路的设计。四个路口倒计时显示被置在同一时刻显示相同的数字,期中P0口用来显示时间的十位,P2口用来显示时间的个位;东西南北四个方向共四个路口,令DS1和DS2是一组,DS3和DS4是一组,DS5和DS6是一组,DS7和DS8是一组。考虑到AT89C51    单片机所能提供I/O接口的数量以及该控制系统所需要的I/O的个数并结合我们的实际能力,数码管在本系统采用的是静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的数码管恒定地导通或截止。采用静态显示时。占用CPU的资源较少,单片机只要把要显示的字符代码发送到接口电路即可,直到要显示新的数据时,再发送新的字形码。倒计时显示电路如图所示。

3.4紧急通行电路

       该系统的K1、K2、K3三个按键分别于单片机的P3.0、P3.1、P3.6相接,它们可以在特殊的交通情况下使用。例如,当有紧急情况发生时,如消防车、救护车等紧急车辆通过时,按下K1键,四个路口同时加亮黄色信号灯并进行闪烁(闪烁时间为5秒)。并且倒计时显示装置关闭,黄灯5s闪烁完成后,四个路口的信号灯全部变成红灯,从而保证紧急车辆的及时通过,待紧急车辆通过后,松开K1键,紧急情况消除,交通灯控制系统恢复正常工作;按下K2键,四个路口同时加亮黄色信号灯并进行闪烁(闪烁时间为5秒),并且倒计时显示装置关闭,黄色等5s闪烁完成后,只允许东西方向车辆准行、南北方向车辆禁行,松开K2键,交通灯控制系统又开始正常工作;按下K3键,四个路口同时加亮黄色信号灯并进行闪烁(闪烁时间为5秒),并且倒计时显示装置关闭,黄色等5s闪烁完成后,只允许南北方向车辆准行、东西方向车辆禁行,松开K3键,交通灯控制系统又开始正常工作。按键电路如图所示。

5监控电路

       51系列单片机通常工作在一些特定环境中,不可避免会受到外界干扰,这些干扰轻则导致系统内部数据出错,重则将严重影响程序的运行。为了保护数据、抑制干扰,在单片机系统的开发过程中需要进行可靠性设计。

    监控功能主要是指控制电源电压、处理掉电情况、产生正确复位信号等。在本次课设中我们选用的是MAX6304,但是由于元器件没有买到,所以这个部分没有在硬件电路中实现,所以在此也详细介绍了。电路图如下图所示。

4.系统程序设计

4.1 主程序流程图

4.2定时中断子程序

4.3显示子程序流程图

4.4按键子程序流程图

5.调试与检测:

5.1.硬件检测:

 

第一步:目测,检查外部的各种元件或则电路是否有断点;

  第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象;

  第三步:加电检测。给板加电,检测所有的插座或是器件的电源端是否符合要求的值;

第四步:是联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。

5.2.软件调试:

软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。程序后,编辑,查看程序是否有逻辑的错误。

6.实验心得

6.1 徐春栋的心得:

这次课程设计,我们小组做的智能交通等控制系统。如往常每一次实训,我获得了很大的收获。

首先,我要说说我学到的团队精神,这次课设需要多人协作完成,我有幸找到两位认真负责且乐于交流讨论的队友。

我负责了这次课设的硬件部分,也就是根据原理图和程序布局、焊接电路。他们两人负责采购元件、设计原理图、写程序调试程序等等。当初分工后我们都是各自为政,但是我发现焊接时,由于有的线很密,有的地方自己一人无法完成焊接,他们帮助我一起完成了那部分的焊接,后来我们就不局限于各自分工,而是着眼全局,互相帮助,不仅将各自分工部分效率的完成了,还在构建交通灯控制系统的全过程中了解了其他的环节,提高了学习效率。我学到了,明确分工固然重要,团队合作才更能体现一个团队的优势,提高工作效率!

其次,就是对于大学相关课程特别是单片机的深入理解和巩固。经过这次课设,我脱离了依靠现成电路焊接元器件的层次,学会更具要求设计电路。我们做的交通灯不是拖动方面的,而是和数电关系密切,通过图书馆和网络,我们将数电相关知识系统回顾了一遍,如数码管显示原理等。

通过交通的设计我们了看到科技服务人类的冰山一角,大大激起我们对于知识应用的兴趣,我们小组分析了另外许多类似交通灯的控制系统。

另外,这次课设涉及广泛,我还熟练了用keil编译程序,掌握了用proteus仿真电路原理图,用STC窜口下载程序等许多平时书本学习不会太过关注的步骤,可谓真正锻炼了动手能力,真正做出东西来。

这次选交通灯为题目来做课设一是经验不足,二是信心不足。通过这次课设,我既积累了经验,也获取了信心,今后会找寻机会再做一些与拖动相关的电子设计,因为我们自动化专业和电机是息息相关的额,很大程度研究的是电机的拖动问题。

6.2 张杰的心得:

通过这两周的单片机课程设计,我们运用所学的知识,利用单片机控制原理设计了一个交通灯控制系统,我们对单片机有了更深的体会。我们了解和掌握了一些简单的编程思想和对I/O口的使用。这次课设通过单片机的I/O口来控制交通灯。实现一些具体的功能和对特殊情况的处理。

通过这次的实践,我们对单片机的I/O口的使用的条件有更深的理解,对单片机的各个管脚功能的理解也加深了,以及在常用编程设计思路技巧,特别是汇编语言的掌握方面都能向前迈了一大步。这次的课程设计让我们把单片机的理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论是实践的基础,实践有着能检验理论的正确性,让我们受益非浅,对我们以后参加工作或者继续学习将会产生巨大的帮助和影响。

在课设过程中遇到的硬件和软件问题都通过询问老师、同学和去图书馆、上网得到了解决。

课设中如果能加入MAX6304则可以实现更更多的功能,我们的课设可以向这个方向改进,在课设结束后我们会找相关资料完善我们的交通灯,争取做到最好。

6.3 董夏冰的心得:

这次单片机课程设计我们小组选做了交通灯,因为我们觉得交通灯在现实生活中非常常见并且对交通灯的工作原理非常好奇,于是我们便选择了这个题目。我们小组认真分析课题要求,研究我们的方案,包括功能的实现原理,硬件的安排、布线、器件的型号功能和参数、程序的编写、调试等等。然后我们分头去图书馆和网上去查找相关资料,经过比较充分的时间准备之后我们终于设计出了我们自己的课设方案,然后我们将其焊接起来,经过调试之后我们的交通灯便做好了。

 这其中我们也遇到了非常多的困难,比如在设计好方案后,发现有一个元件很难购买,于是我们修改了原来的方案,减少了一个中断。在进行焊接时线路非常多并且密集,我们焊接时非常的小心,认真的辨识每一个管脚,仔细的对照原理图,即便是这样还是出现了错误,用万用表检测发现多个管脚出现了焊接短路,我们对这几个管脚进行了重焊才解决问题。

 通过这次课程设计我学到了很多知识,比如团队合作的能力,我们小组的三个成员在好几个问题上产生过意见的分歧,经过我们之间的相互沟通协调最终都达成了统一的意见并且齐心合力的完成了实验。我想我以后再遇到团队合作时我一定会表现得更好。还有就是自己以前只知道理论知识,对其如何在实践中应用并不了解,这次课程设计很好的将理论和实践结合起来让我收获很多。我也发现了自己的很多不足,比如在编程时发现自己的知识是那么的薄弱,靠翻课本、查资料才行,对单片机各个接口的功能和结构的理解并不是非常深入。经过这次实验我的编程技巧和对单片机的理解都有所增加。

这次单片机课程设计对我以后的学习和工作都会有很大的帮助。

7.参考文献

[1] 柴鈺.单片机原理及应用[M]. 西安电子科技大学出版社.

[2] 李海滨,片春媛,许瑞雪.单片机技术课程设计与项目实例[M]. 电子出版社.

[3] 百度文库.www.baidu.com

[4] 单片机爱好者.ww.51hei.com

8.程序

ORG      0000H

LJMP     MAIN

ORG      001BH                                             ;定时器T1中断入口

LJMP     IINT1    

ORG      0100H                                             ;主程序入口

;********;

;*主程序*;

;********;

MAIN:

MOV  SP,#60H

MOV  TMOD,#10H                                    ;定时器T1工作在方式1

MOV  TH1,#9EH                                          ;给定时器T1赋初值

MOV TL1,#58H

SETB EA                                                        ;开中断系统总开关

SETB ET1                                                       ;开定时器T1中断开关

SETB TR1                                                       ;启动定时器T1

HERE:

MOV 88H,#15H                                              ;设置中断循环次数

MOV 33H,#3DH                                              ;设置倒计时显示数值

MOV P1,#0F3H                                               ;使交通灯东西绿,南北红

MOV R7,#37H

MM:

LCALL DISP

MOV A,P3                                               ;键盘扫描

CJNE A,#0FFH,READKEY

DJNZ R7,MM

MOV P1,#0E1H                                       ;交通灯东西绿,南北红同时加亮黄灯

MOV 20H,#02H

NN:

MOV A,P3

CJNE A,#0FFH,READKEY

SETB P1.1                                               ;黄灯进行5秒闪烁

SETB P1.4

LCALL DISP

CLR P1.1

CLR P1.4

LCALL DISP                                            ;调显示子程序

DJNZ 20H,NN

SETB P1.1

SETB P1.4

LCALL DISP

MOV P1,#0DEH                                       ;交通灯南北绿,东西红

MOV R7,#37H

PP:

LCALL DISP

MOV A,P3

CJNE A,#0FFH,READKEY

DJNZ R7,PP

MOV P1,#0CCH                                       ;交通灯南北绿,东西红同时加亮黄灯

MOV 20H,#02H

QQ:

MOV A,P3                                               ;扫描P3口

CJNE A,#0FFH,READKEY

SETB P1.1

SETB P1.4

LCALL DISP

CLR P1.1

CLR P1.4

LCALL DISP

DJNZ 20H,QQ

SETB P1.1

SETB P1.4

LCALL DISP

LCALL QW

QW:

SJMP HERE

RET

;****************;

;*1秒延时子程序*;

;****************;

DELAY:MOV R1,#0AH

DELAY0:MOV R2,#0C8H

DELAY1:MOV R3,#0F8H

NOP

DELAY2:DJNZ R3,      DELAY2

DJNZ R2,DELAY1

DJNZ R1,DELAY0

RET

;***************;

;键盘扫描子程序;

;***************;

READKEY:

MOV A,  #0FFH

MOV P3, A

MOV A,  P3

JNB ACC.0,K1                                         ;判断K1键是否按下

JNB ACC.1,K2                                        ;判断K2键是否按下

JNB ACC.3,K3                                        ;判断K3键是否按下

RET

K1:

MOV P0, #0FFH                                       ;关断倒计时显示装置

MOV P2, #0FFH

LCALL XX

LCALL YY

SJMP READKEY

K2:

MOV P0, #0FFH                                       ;关断倒计时显示装置

MOV P2, #0FFH

LCALL XX

LCALL YY1

SJMP READKEY

K3:

MOV P0, #0FFH                                       ;关断倒计时显示装置

MOV P2, #0FFH

LCALL XX

LCALL YY2

SJMP READKEY

XX:

MOV 20H,#03H

LCALL BB

RET

;******************;

;*黄灯进行5秒闪烁*;

;******************;

BB:

SETB P1.1

SETB P1.4

LCALL DELAY

CLR P1.1

CLR P1.4

LCALL DELAY

DJNZ 20H,BB

RET

YY:

MOV P1, #0F6H                                       ;四个路后均变成红灯

MOV A,  #0FFH

MOV P3, A

MOV A,P3

JNB ACC.0,YY                                        ;判断K1键是否仍然按下

LCALL QW

YY1:

MOV P1, #0F3H                                       ;东西方向亮绿灯,南北方向亮红灯

MOV A,  #0FFH

MOV P3, A

MOV A,  P3

JNB ACC.1,YY1                                       ;判断K2键是否仍然按下

LCALL QW

YY2:

MOV P1, #0DEH                                      ;南北方向亮绿灯,东西方向亮红灯

MOV A,  #0FFH

MOV P3, A

MOV A,  P3

JNB ACC.3,YY2                                       ;判断K3键是否仍然按下

LCALL QW

RET

;****************;

;*中断处理程序*;

;****************;

ORG 0200H                                             ;中断程序入口地址

Liu:

DEC 88H

MOV A,88H

CJNE A, #01H,BN                                    ;判断循环次数是否为1

MOV 88H,#15H                                       ;重新给循环次数赋值

LCALL DISP

BN:

MOV TH1,#9EH                                       ;重新给定时器T1赋初值

MOV TL1,#58H    

RETI

;************;

;*显示子程序*;

;************;

DISP:

DEC 33H

MOV A,33H

CJNE A, #01H,DIR1

MOV 33H,#3DH                                       ;重新给倒计时数赋初值

DIR1:

MOV B,#0AH

DIV AB                                                   ;提取出倒计时数值的十位数和个位数

MOV DPTR,#TAB                                    ;字形表的入口地址

MOVC A,       @A+DPTR                          ;查表获取十位数的字型码

MOV 30H,A

MOV A,B

MOVC A,       @A+DPTR                          ;查表获取个位数的字型码

MOV 31H,A

MOV A,30H

MOV P0,A                                               ;将十位数字型码送到P0口

MOV A,31H

MOV P2, A                                               ;将个位数字型码送到P2口

LCALL DELAY

RET

TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H;字形表

END

9.元器件

相关推荐