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