1、第 1 页物理与电气工程学院课程设计报告基于单片机的无线交通灯设计作 者专 业 电子信息工程 年 级 2009 级 指导教师 李艾华 成 绩 日 期 2012.3.14 第 2 页基于单片机的无线交通灯设计姓名(安阳师范学院 物电学院, 河南 安阳 455002)摘要:在日常生活中,交通信号灯的使用,使交通得以有效的管理,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。无线交通灯系统由89C51单片机、LED显示、数码管显示、无线控制模块组成。系统除具有基本交通灯功能外,还具有时间控制、LED信息显示、即时中断功能,使交通实现有效、及时控制。关键词:单片机 LED 数码管 无线模块
2、1 引言:当今社会,红绿交通灯几乎出现在每个交通路口,已经成为疏导交通车辆最常见和最有效的手段。但这个技术在19世纪就已经出现了。1858年,在英国伦敦主要街头安装了以燃煤气为光源的红、蓝两色的机械手势信号灯,用以指挥马车通行。这是世界上最早的信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的会议大厦前的广场上,安装了世界上最早的煤气红绿灯。他由红绿两色、以旋转方式玻璃提灯组成,红色表示“停止” ,绿色表示“注意” 。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消!电气启动的红绿灯出现在美国,这种红绿灯由红黄绿三色圆形的投光器组成,1914年始装于纽约市5号大街的一座高塔上。红
3、灯亮表示“停止” ,绿灯亮表示“通行” 。信号灯的出现,使得交通得以有效的管理,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。1968年,联合国道路交通和道路标志信号协定对各种信号灯的含义作了规定。绿灯是通行信号灯,面对绿灯的车辆可以直行,左转弯和右转弯,除非亮一种标志禁止某种转向。左右转弯车辆必须让合法的正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号灯,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已经十分接近停车线而不能安全停车的可以进入交叉路口!2 方案论证: 2.1 方案一由于 AT89C51 中自带有定时
4、器 T0、T1,所以交通灯中的数码管计时显示部分可采用定时器中断方式。这样可以不用编程查询实现 1s 的计时;但由于交通灯的状态比较多,如果定时采用中断方式,编程不太容易实现、比较麻烦。2.2 方案二 第 3 页交通灯中的数码管计时显示部分可采用定时器查询方式,虽然用查询方式需要不断查询定时时间到否、有点浪费资源,但这样有利于编程,使得编程比较容易,且程序结构、功能一目了然。从以上两种方案,很容易看出,采用方案二,软件设计比较容易、简单,故采用了方案二。3 结果与讨论3.1 AT89C51 介绍 3.1.1 单片机主控电路的主要元件是 AT89C51,其外型及管脚排列如图 1 所示:图 1 A
5、T89C51 管脚排列图AT89C51 是一个低电压,高性能 CMOS 8 位单片机,片内含 4k bytes 的可反复擦写的只读程序存储器(PEROM)和 128 bytes 的随机存取数据存储器(RAM) ,器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器和 Flash 存储单元,内置功能强大的微型计算机的 AT89C51 提供了高性价比的解决方案。 AT89C51 是一个低功耗高性能单片机,40 个引脚,32 个外部双向输入/输出(I/O)端口,同时内含 2 个外中断口,2 个 16 位可编程定时计数器,2 个全双工
6、串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和 Flash 存储器结合在一起,特别是可反复擦写的 Flash 存储器可有效地降低开发成本3.1.2 管脚说明: 第 4 页VCC:供电电压。 GND:接地。 P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门流。当 P1 口的管脚第一次写 1 时,被定义为高阻输入。P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口作为原码输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉高。 P1 口:P1 口是一
7、个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接收输出 4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH 编程和校验时,P1 口作为第八位地址接收。 P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,输出 4 个 TTL 门电流,当 P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时,
8、P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。 P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL 门电流。当 P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。 P3 口也可作为 AT89c51 的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口)
9、P3.2 /INT0(外部中断 0) P3.3 /INT1(外部中断 1) P3.4 T0(记时器 0 外部输入) P3.5 T1(记时器 1 外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3 口同时为闪烁编程和编程校验接收一些控制信号。 RESET:复位输入。当振荡器复位器件时,要保持 RESET 脚两个机器周期的高电平时间。ALE/PROG*:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此
10、它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在SFR8EH 地址上置 0。此时, ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态 ALE 禁止,置位无效。 PSEN*:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次第 5 页PSEN*有效。但在访问外部数据存储器时,这两次有效的 PSEN*信号将不出现。 EA*/VPP:当 EA*保持低电平时,则在此期间外部程序存储器(0000H-FFFFH) ,不管是否有内部程
11、序存储器。注意加密方式 1 时,EA*将内部锁定为 RESET;当 EA*端保持高电平时,此间内部程序存储器。在 FLASH 编程期间,此引脚也用于施加 12V 编程电源(VPP) 。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出3.2 74LS164 芯片简介 3.2.1 74LS164 芯片用于扩展并行输出口。AT89C51 外接 164 串入并出移位寄存器 8 位并行口实现串入并出。8 位并行口的每位分别接到数码管的不同显示端。74LS164 芯片的管脚排列及功能如图 2 所示:图 2 74LS164 芯片管脚排列及功能图3.2.2 74LS
12、164 管脚说明:管脚 1、2 相连共同接单片机送数据的引脚,8 管脚接单片机送时钟的引脚,9、14 管脚接高电平,7 管脚接地,其他管脚依次接数码管管脚。3.3 共阴极数码管显示3.3.1 共阴极数码管的管脚平排列和内部结构如图 3 所示:第 6 页图 3 共阴极数码管的管脚平排列和内部结构图为了数码管的安全,这里用一个 200 欧姆的电阻与其串联来降压。3.4 交通灯功能述说东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人的安全通行。红灯禁止通行,绿灯允许通行,黄灯亮提示行人注意红绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。东西、
13、南北两干道灯的状态及时间如表 1 所示:27s 3s 27s 3s东西干道 红灯亮 红灯亮 绿灯亮 黄灯亮南北干道 绿灯亮 黄灯亮 红灯亮 红灯亮表 1 东西、南北两干道灯的状态及时间的表格上表说明东西路口红灯亮,南北路口绿灯亮,同时开始 27s 倒计时,27s 倒计时结束后开始 3s 倒计时,南北路口黄灯亮,完成一次这样的循环要 30s。30s 结束后,南北路口红灯亮,东西路口绿灯亮,并重新开始 30s 倒计时,依次循环。3.5 交通灯设计思路和设计框图第 7 页3.5.1 设计思路:利用单片机实现无线交通灯的控制,该任务分以下几个方面:a、实现红、黄、绿灯的循环控制。要实现此功能需要表示三
14、种不同颜色的 LED 灯分别接在 P1 个管脚,用软件实现。b、用数码管显示倒计时。利用静态显示、串入并出,单片机的 P2.0 送数据、P2.1送时钟,74LS164 实现串入并出。c、无线控制交通灯。单片机的外部中断 0 接无线模块,实现对交通灯的实时控制。3.5.2 设计框图:无线交通灯的总体设计框图如图 4 所示:图 4 无线交通灯的总体设计框图3.6 时钟计时实现的方案计算计数初值:时钟计时的最小单位是秒,但使用单片机定时器进行定时,即使按方式 1 工作,其最长定时时间也只能达到 131ms。鉴于此,把定时器的定时时间定为 50ms,这样,计数溢出 20 次即得到时钟计时的最小单位秒;
15、因此用软件方法实现。该程序使用定时器 T0 来实现定时功能,以工作模式 1 进行 50ms 定时,由于该单片机使用的晶振频率为 12MHz,为得到 50 ms 定时,设计数初值为 X,则16 362(2)0XSHzX=3CB0H采用查询方式进行溢出次数的累计,计满 20 次即得到秒计时。4 结论该无线交通灯系统不仅具有结构简单、体积小、价格低廉等特点,而且可以实现无线、适时控制、实用性强、适用范围广,因此特别适用于交通拥挤的路口。单片机最小系统倒计时显示无线控制模块交通灯循环显示第 8 页通过这次课程设计,不但巩固了已学的理论知识,还加强了我的动手、思考和解决问题的能力。同时,通过网上搜索等多
16、方面的查询资料,我学会了许多课本上学不到的东西,也更加深刻地体会了理论联系实际的重要性,受益匪浅。首先我查资料明白了设计的大体思路,每一步该实现怎么样的功能,怎么实现该功能。接下来是找资料了解各芯片的功能和引脚分布,并通过芯片实现其功能。设计之初的主要任务是设计电路原理图、编写程序、仿真。设计电路原理图和编写程序都进行的比较顺利,只是到了仿真就出现问题了。自己感觉电路图的设计没有错误,但是仿真就是没有现象,最后通过我们之间独立画原理图,发现是网络标号上出现了问题,经过修正,灯和数码管出现希望的现象,但是中断却不能自动返回,只能再按一下按钮才能返回,而且返回后不是继续原来的状态,我们就意识到是中
17、断程序保护现场和中断返回部分编写出错了。经过检查发现,程序中保护现场的时候没有很好的保护好灯的状态,而且没有编写什么情况下中断返回。经过修改,终于完成了仿真。仿真过后,接下来就是转 PCB 图,这可是一个比较繁琐的过程。首先要布局,使线尽可能不交叉、还要美观。布好局后就是布线,布线要经过多次反复修改才能达到路径最短、线型美观的效果。在这次转 PCB 图中,布局还是比较容易的,只是由于对元器件实际大小不是特别了解,造成在实际安插元件时,端子与单片机挨得太近,单片机不能完全插进,只能把端子削去一部分使单片机完全插进。只是布线比较麻烦,前后修改了五、六次才达到比较好的效果,但是还是有好多跳线。画好
18、PCB 图后,就是转板、腐蚀、打孔、焊接,这些环节进行的都还比较顺利。只是由于焊接经验不太多,焊得不是那么美观,但电路还是都连通了。最麻烦的就是调试了,这次我们前后经历了两次全部过程,第一次调试:接通电源后灯是按照希望的现象亮灭的,但数码管却是乱码,我们就开始测数码管是不是哪里没接好。通过测量怀疑是引脚排列错误,通过上网查资料发现的确是引脚弄错了,这次引脚整错,是因为我们参考的资料上数码管的引脚是错的,而且我们也没有查找其他资料,因此,以后对于自己不太了解的东西要多查一些资料。由于是引脚弄错了,因此要重新修改原理图、PCB 图,一切流程要重新再走一遍。第二次调试:接通电源后,发现灯是按照希望的
19、现象亮灭的,但数码管却不亮、没有现象,我们就断定还是数码管部分出现问题,继续测量数码管部分电路。结果发现 74LS164 芯片的 CLK 引脚不仅与单片机的引脚是通的,而且与地也是导通的,我们就开始检查地线和 CLK 线,发现由于焊 CLK 引脚时焊锡甩到地线上了一点,才导致两者导通。于是我们就把两者断开。再次接通电源,我们成功了!通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,同时在设计的过程中发现
20、了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。同时也学到了很多课内学不到的东西,比如独立思考解决问题,多查不同的资料以得到最正确的信息、出现差错的随机应变,受益非浅。第 9 页致 谢 在课程设计接近尾声之时,我们要衷心地感谢我们的指导老师!另外,还要特别感谢能给我们这次在一起合作的机会,我们之间配合得很好、很默契,并且相互学到了很多东西,使得这一次的课程设计取得了圆满成功。在此我们表示最真挚的感谢!参考文献1张毅刚,彭喜元,彭宇.单片机原理及应用(第二版).北京:高等教育出版社,2010.5.2周润景,张丽娜,丁莉.基于PROTEUS的电路及单片机设计与仿真(第二版).北
21、京:北京航天航空大学出版社,2009.12.3王卫兵. Protel 99 SE 基础教程.北京:北京邮电大学出版社,2008.4何立民.单片机应用技术大全M.北京:北京航空航天大学出版社, 1994.第 10 页附图1电路原理图第 11 页附图2Proteus仿真图附图3PCB 图第 12 页附图4实物图第 13 页源程序附页DIN BIT P2.0CLK BIT P2.1ORG 0000HLJMP STARTORG 0003HLJMP INT00ORG 0030HSTART:MOV SP,#60H ;设置堆栈指针MOV TMOD,#01H ;置定时器 T0 方式 1MOV TH0,#3CH
22、 ;置 T0 定时初值 50msMOV TL0,#0B0HCLR TF0 ;清 TF0SETB TR0 ;启动 T0SETB EX0 ;开外部中断 0SETB PX0 ;设置外部中断 0 为高优先级SETB IT0 ;设置外部中断 0 为跳沿触发SETB EA ;开总中断CLR AMOV P1,ALOOP:MOV R2,#20 ;设置定时查询次数MOV R3,#27 ;绿灯亮 27sMOV 30H,#30 ;东西路口计时显示初值 30sMOV 40H,#27 ;南北路口计时显示初值 27sLCALL DISPLAY ;调数码管显示LCALL STATE1 ;调状态 1WAIT1: ;状态 1
23、持续 27sJNB TF0,WAIT1 ;查询 50ms 到否CLR TF0 ;清 TF0MOV TH0,#3CH ;T0 重装初值MOV TL0,#0B0HDJNZ R2,WAIT1 ;1s 到否?未到继续查询MOV R2,#20 ;重装定时查询次数DEC 30H ;东西路口计时显示时间减 1sDEC 40H ;南北路口计时显示时间减 1sLCALL DISPLAY ;调数码管显示DJNZ R3,WAIT1 ;状态 1 持续 27s 否?未到继续状态 1MOV R2,#20 ;重装定时查询次数MOV R3,#3 ;黄灯亮 3s第 14 页MOV 30H,#3 ;东西路口计时显示初值 3sMO
24、V 40H,#3 ;南北路口计时显示初值 3sLCALL DISPLAY ;调数码管显示LCALL STATE2 ;调状态 2WAIT2: ;状态 2 持续 3sJNB TF0,WAIT2 ;查询 50ms 到否CLR TF0MOV TH0,#3CH ;T0 重装初值MOV TL0,#0B0HDJNZ R2,WAIT2 ;1s 到否?未到继续查询MOV R2,#20 ;重装定时查询次数DEC 30H ;东西路口计时显示时间减 1sDEC 40H ;南北路口计时显示时间减 1sLCALL DISPLAY ;调数码管显示DJNZ R3,WAIT2 ;状态 2 持续 3s 否?未到继续状态 2MOV
25、 R2,#20 ;重装定时查询次数MOV R3,#27 ;绿灯亮 27sMOV 30H,#27 ;东西路口计时显示初值 27sMOV 40H,#30 ;南北路口计时显示初值 30sLCALL DISPLAY ;调数码管显示LCALL STATE3 ;调状态 3WAIT3: ;状态 3 持续 27sJNB TF0,WAIT3 ;查询 50ms 到否CLR TF0MOV TH0,#3CH ;T0 重装初值MOV TL0,#0B0HDJNZ R2,WAIT3 ;1s 到否?未到继续查询MOV R2,#20 ;重装定时查询次数DEC 30H ;东西路口计时显示时间减 1sDEC 40H ;南北路口计时
26、显示时间减 1sLCALL DISPLAY ;调数码管显示DJNZ R3,WAIT3 ;状态 3 持续 27s 否?未到继续状态 3MOV R2,#20 ;重装定时查询次数MOV R3,#3 ;黄灯亮 3sMOV 30H,#3 ;东西路口计时显示初值 3sMOV 40H,#3 ;南北路口计时显示初值 3sLCALL DISPLAY ;调数码管显示LCALL STATE4 ;调状态 4WAIT4: ;状态 4 持续 3sJNB TF0,WAIT4 ;查询 50ms 到否CLR TF0MOV TH0,#3CH ;T0 重装初值MOV TL0,#0B0HDJNZ R2,WAIT4 ;1s 到否?未到
27、继续查询第 15 页MOV R2,#20 ;重装定时查询次数DEC 30H ;东西路口计时显示时间减 1sDEC 40H ;南北路口计时显示时间减 1sLCALL DISPLAY ;调数码管显示DJNZ R3,WAIT4 ;状态 4 持续 3s 否?未到继续状态 4LJMP LOOPSTATE1: ;状态 1SETB P1.0 ;东西路口红灯亮SETB P1.5 ;南北路口绿灯亮CLR P1.1CLR P1.2CLR P1.3CLR P1.4RETSTATE2: ;状态 2SETB P1.0 ;东西路口红灯亮SETB P1.4 ;南北路口黄灯亮CLR P1.1CLR P1.2CLR P1.3C
28、LR P1.5RETSTATE3: ;状态 3SETB P1.2 ;东西路口绿灯亮SETB P1.3 ;南北路口红灯亮CLR P1.0CLR P1.1CLR P1.4CLR P1.5RETSTATE4: ;状态 4SETB P1.1 ;东西路口黄灯亮SETB P1.3 ;南北路口红灯亮CLR P1.0CLR P1.2CLR P1.4CLR P1.5RETDISPLAY:LCALL ChaifenLCALL ChabiaoLCALL ChuansongRETChaifen: ;拆分第 16 页MOV A,30H ;东西路口计时存储单元MOV B,#10DIV ABMOV 53H,A ;东西路口时
29、间高位存储到 53HMOV A,B MOV 52H,A ;东西路口时间低位存储到 52HMOV A,40H ;南北路口计时存储单元MOV B,#10DIV ABMOV 51H,A ;南北路口时间高位存储到 51HMOV A,B MOV 50H,A ;南北路口时间低位存储到 50HRETChabiao: ;查表MOV R0,#50H MOV R1,#54HMOV R7,#4DP10:MOV DPTR,#TABMOV A,R0MOVC A,A+DPTRMOV R1,AINC R0INC R1DJNZ R7,DP10 RETChuansong: ;传送MOV R0,#54HMOV R6,#4DP12
30、:MOV R7,#8MOV A,R0DP13:RLC AMOV DIN,CCLR CLKSETB CLKDJNZ R7,DP13INC R0DJNZ R6,DP12RETTAB:DB 3FH,06H,5BH,4FH,66H,6DHDB 7DH,07H,7FH,6FH,77H,7CH第 17 页DB 39H,5EH,79H,71H,40H,00HINT00: ;中断,所有路口红灯亮 5sPUSH 30H ;数码管显示时间进栈保护PUSH 40HMOV 58H,R2 ;计时时间进栈保护MOV 59H,R3MOV 39H,P1 ;保护所有路口灯的情况MOV 30H,#5 ;东西路口计时显示初值 5s
31、MOV 40H,#5 ;南北路口计时显示初值 5sMOV R2,#20 ;重装定时查询次数MOV R3,#5 ;所有红灯亮 5sLCALL DISPLAY ;调数码管显示SETB P1.0 ;所有路口红灯亮SETB P1.3CLR P1.1CLR P1.2CLR P1.4CLR P1.5WAIT5:JNB TF0,WAIT5 ;查询 50ms 到否CLR TF0 ;清 TF0MOV TH0,#3CH ;T0 重装初值MOV TL0,#0B0HDJNZ R2,WAIT5 ;1s 到否?未到继续查询MOV R2,#20 ;重装定时查询次数DEC 30H ;东西路口计时显示时间减 1sDEC 40H ;南北路口计时显示时间减 1sLCALL DISPLAY ;调数码管显示DJNZ R3,WAIT5 ;所有红灯亮持续 5s 否?未到继续所有红灯亮状态 MOV P1,39H ;恢复中断前所有路口灯的情况MOV R3,59H ;恢复计时时间MOV R2,58HPOP 40H ;恢复数码管显示时间 POP 30HRETI END