交通灯课程设计.docx
- 文档编号:27760410
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:26
- 大小:860.01KB
交通灯课程设计.docx
《交通灯课程设计.docx》由会员分享,可在线阅读,更多相关《交通灯课程设计.docx(26页珍藏版)》请在冰豆网上搜索。
交通灯课程设计
信息工程课程设计报告书
课程名称单片机原理与接口技术
课程设计总评成绩
学生姓名、学号
学生专业班级
指导教师姓名
课程设计起止日期2012.12.29—2013.01.18
课程设计基本要求
课程设计是工科学生十分重要的实践教学环节,通过课程设计,培养学生综合运用先修课程的理论知识和专业技能,解决工程领域某一方面实际问题的能力。
课程设计报告是科学论文写作的基础,不仅可以培养和训练学生的逻辑归纳能力、综合分析能力和文字表达能力,也是规范课程设计教学要求、反映课程设计教学水平的重要依据。
为了加强课程设计教学管理,提高课程设计教学质量,特拟定如下基本要求。
1.课程设计教学一般可分为设计项目的选题、项目设计方案论证、项目设计结果分析、答辩等4个环节,每个环节都应有一定的考核要求和考核成绩。
2.课程设计项目的选题要符合本课程设计教学大纲的要求,该项目应能突出学生实践能力、设计能力和创新能力的培养;该项目有一定的实用性,且学生通过努力在规定的时间内是可以完成的。
课程设计项目名称、目的及技术要求记录于课程设计报告书一、二项中,课程设计项目的选题考核成绩占10%左右。
3.项目设计方案论证主要包括可行性设计方案论证、从可行性方案中确定最佳方案,实施最佳方案的软件程序、硬件电路原理图和PCB图。
项目设计方案论证内容记录于课程设计报告书第三项中,项目设计方案论证主要考核设计方案的正确性、可行性和创新性,考核成绩占30%左右。
4.项目设计结果分析主要包括项目设计与制作结果的工艺水平,项目测试性能指标的正确性和完整性,项目测试中出现故障或错误原因的分析和处理方法。
项目设计结果分析记录于课程设计报告书第四项中,考核成绩占25%左右。
5.学生在课程设计过程中应认真阅读与本课程设计项目相关的文献,培养自己的阅读兴趣和习惯,借以启发自己的思维,提高综合分和理解能力。
文献阅读摘要记录于课程设计报告书第五项中,考核成绩占10%左右。
6.答辩是课程设计中十分重要的环节,由课程设计指导教师向答辩学生提出2~3个问题,通过答辩可进一步了解学生对课程设计中理论知识和实际技能掌握的程度,以及对问题的理解、分析和判断能力。
答辩考核成绩占25%左右。
7.学生应在课程设计周内认真参加项目设计的各个环节,按时完成课程设计报告书交给课程设计指导教师评阅。
课程设计指导教师应认真指导学生课程设计全过程,认真评阅学生的每一份课程设计报告,给出课程设计综合评阅意见和每一个环节的评分成绩(百分制),最后将百分制评分成绩转换为五级分制(优秀、良好、中等、及格、不及格)总评成绩。
8.课程设计报告书是实践教学水平评估的重要资料,应按课程、班级集成存档交实验室统一管理。
一、课程设计项目名称
基于51单片机的交通灯的设计
二、项目设计目的及技术要求
(一)设计目的:
了解交通灯管理的基本工作原理,熟练掌握STC89C51的工作原理和应用编程,熟悉STC89C51单片机并行接口的各种工作方式和应用,并了解计数器/定时器的工作方式,掌握多位LED显示问题的解决。
(二)技术要求:
1.完成交通灯的设计和调试。
2.模拟路面交通灯控制车辆通行;
3.撰写课程设计说明书。
4.程序设计说明书的要求:
引言、设计要求、系统结构、原理设计、各个模块的设计与实现、软件设计、调试过程、收获、体会及总结、参考文献、电路图和源程序。
说明书使用A4打印纸计算机打印或手写,用Protel等绘图软件绘制电子线路图纸。
三、项目设计方案论证(可行性方案、最佳方案、软件程序、硬件电路原理图和PCB图)
(一)方案比较,设计与论证
1.总体设计方案
根据十字路口交通灯的要求,可将本系统分为三个模块,第一模块是控制模块,主要负责整个系统的控制和运算,从而使各模块正常工作,第二个模块式显示模块包括LED灯和数码管,第三是电源模块,给各模块提供电源,让各模块工作。
其系统设计结构如图1:
图1系统框图
2.控制模块选择方案
方案一:
由计数器74LS161级联组成,配合译码器和秒脉冲信号发生器等器件组成交通灯系统,整个系统简单,控制简单,调试容易等优点。
方案二:
采用单片机STC89C52作为控制器。
单片机运算能力强,软件编程灵活,自由度大。
在指令系统、硬件结构和片内资源上与标准8052单片机完全兼容,使用时容易掌握;采用STC89C52单片机稳定可靠、应用广泛、通用性强。
方案比较:
采用方案一来实现十字路口交通灯控制系统非常方便,电路结构简单,控制单一,但整个系统性能不是很高,倒计时不是非常精确,如果要求系统能设置不同工作时间不容易,因而对于完成题目较困难,而方案二完全能实现设计要求,容易掌握,利于编程,易控制,I/O接口很多,易于扩展外围电路,价格便宜,故选择方案二。
3.电源模块方案:
为使模块稳定工作,须有可靠电源。
因此考虑了两种电源方案:
方案一:
采用独立的稳压电源。
此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。
方案二:
采用单片机控制模块提供电源,使用电池盒供电。
该方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
综上所述,我选择第二种方案。
4.显示界面方案:
4.1倒计时显示界面方案:
该系统要求完成倒计时功能。
只需显示数字,基于上述原因,我考虑了二种方案:
方案一:
采用全数码管显示。
这种方案只显示有限的符号和数码字符,简单,方便。
方案二:
采用点阵式LED显示。
这种方案虽然功能强大,并可方便的显示各种英文字符,汉字,图形等,但实现复杂,且须完成大量的软件工作。
综上所述,我选择第一种方案,四个路口采用两个二位共阴极数码管。
4.2状态灯显示
该系统要求完成状态灯显示的功能。
求于要求简单,我们把两个路口的红灯、绿灯和黄灯设成直行和左拐两个通行方式所共有,也就是说,一个路口只需三个状态灯,一个共有的绿灯,一个共有的红灯,一个共有的黄灯。
(二)硬件设计
整个电路系统由单片机,显示模块,复位电路,时钟模块等几个模块组成。
1.单片机系统电路
图2单片机系统电路图
单片机系统电路采用如上图所示的AT89C52芯片,40引脚的双列直插封装方式,允许RAM、定时器/计数器、串口、中断继续工作;作为输出口,每位能驱动8个TTL逻辑电平,能进行定时器/计数器、串口、中断等系列实验。
AT89C52的引脚介绍
a)电源引脚:
Vcc、GND
b)时钟引脚:
XTAL1、XTAL2
c)复位引脚:
RST
d)32个可编程口:
P0、P1、P2、P3
在这里,我们将AT89C52芯片的P0口通过外接JP10引脚使用排线将之与锁存器74LS573的输入端D0~D7的外接引脚J12一一对应连接,将P2.0和P2.1赋予PCF8951芯片的SCL、SDA端口,AT89C51芯片的P2.0和P2.1口将通过SCL、SDA端口给PCF8951A/D转换芯片输送信号,把P2.2、P2.3、P2.4对应的外接引脚和译码器74LS138的外接引脚J15中对应选择端A、B、C的引脚对应连接,而AT89C51芯片的控制端、读选通信号端等端口在开发板内部已经连接好,不需要我们再在外部手动连接。
2.显示模块
显示电路(图3)
图3显示电路
在开放板内部,它的连接方式为8位数码管的段控口a,b,c,d,e,f,g,dp分别接100欧姆的电阻后再接到锁存器74LS573的输出端口Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,而锁存器74LS573的输入端口D0,D1,D2,D3,D4,D5,D6,D7分别接外接引脚J12,所以需要我们手动利用排线将引脚J12与单片机的P0口的外接引脚JP10对应相接;而两个4位数码管的位控口1,2,3,4的外接引脚J16分别接译码器74LS138的输出端#Y0~#Y7(#为非)的外接引脚J15。
数码管显示码是由P0口输入的,位选端是通过P2口控制的。
数码管的显示编码已经编好放在单片机的内存里,时间的显示可以通过软件的计算把显示码调出显示。
显示模块是用两个数码管来显示倒计时的。
先将显示码存入数组中,指向最左边一位,然后取出要显示的数据,指向换码表首地址,取出显示码,从P0口输出显示码,P2口输入位选码,显示当前数值,最后修改数组地址,求下一位位选码继续显示。
数码管显示数字的码型由数码管的数据脚a~dp决定,图4为数码管的笔段分布图,由于是共阴极的,所以当a~dp为高电平时相应的笔段会亮,电路中P1.0~P1.7分别接数码管的a.b.c.d.e.f.g.dp,得到0~9这10个数字的码型为:
3FH(0)、06H
(1)、5BH
(2)、4FH(3)、66H(4)、6DH(5)、7DH(6)、07H(7)、7FH(8)、6FH(9)、80H(小数点)。
图4数码管笔段分布图
数码管连接电路如图4所示,P0口输出码型,P2口输出位选。
锁存器74HC573起驱动作用,提供驱动电流供数码管发光。
译码器74HC138将位选地址转换成位选信号,例如当前是第5个数码管显示,那么P2口输出位选地址05H,译码器输入CBA=110,输出位选信号Y7-Y0=11101111,其中Y5=0,第5个数码管选通并显示,其它数码管不显示。
实验时将J6的左边两个引脚针(1和2)用跳冒连接,锁存器11脚接VCC,关闭锁存功能。
在做交通灯的设计中,显示倒计时是采用的两位八段共阴极数码管显示十位秒和个位秒。
显示模块有静态显示与动态显示两种情况,由于静态显示在显示位数多时,其所需I/O口数多,造成资源一定程度上的浪费,所以采用动态显示节约成本。
动态显示由于扫描速度快的原因,人眼看不到灯闪烁,和静态显示相比无明显差异,但却减少了I/O口。
当P0口送第一个数0的码型到锁存器时,P2送位选地址01H,即Y0=0,只有第一个数码管亮,显示0,其他数码管不显示。
当P0口送第二个数1的码型到锁存器时,P2送位选地址02H,即Y1=0,只有第二个数码管亮,显示1,其他数码管不显示。
即每次只有一个数码管点亮,8个数码管是轮流被点亮的,轮流点亮的间隔时间很短(一般用延时程序延时几个毫秒),由于视觉的暂留现象,看到的却好象全都点亮着,这就是动态扫描。
显示模块与译码电路紧密相关。
译码电路如图5:
图574HC138译码器
它的连接方式为选择端口A、B、C分别接单片机的P2.0、P2.1、P2.2口。
不过在开发板内部已经完成,我们只需要在程序中定义一下。
3.时钟模块
单片机通过内部振荡方式和外部振荡方式获得所需时钟信号。
图6时钟电路
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
AT89单片机内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。
在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠。
4.复位电路
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。
复位是由外部的复位电路来实现的。
片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。
复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。
当时钟频率选用6MHz时,C取22μF,Rs约为200Ω,Rk约为1K。
复位操作不会对内部RAM有所影响。
常用的复位电路如下图7所示:
图7复位电路图
5.交通灯显示时序及状态转换的理论分析:
图8所示为红绿灯转换的状态图。
S1状态S2状态
S3状态S4状态
图8红绿灯状态转换图
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间、指示灯燃亮的方案如表1。
状态
S1
S2
S3
S4
时间
19s
~
19s
~
东西道
红灯亮
红灯亮
绿灯亮
黄灯闪烁
南北道
绿灯亮
黄灯闪烁
红灯亮
红灯亮
表1十字路口指示灯燃亮方案
表1说明:
(1)当南北方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人也可通行。
(2)黄灯闪烁,警示车辆和行人红、绿灯的状态即将切换。
(3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人也禁止通行。
东西方向车流大通行时间长。
(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。
共四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期,循环执行如图9所示:
图9
6.系统原理图
(三)软件程序
1软件流程图
YN
Y
N
Y
N
Y
N
Y
图10软件流程图
2.汇编程序
SECOND1EQU50H;东西路口计时寄存器
DBUFEQU20H;显示码缓冲区1
TEMPEQU24H;显示码缓冲区2
LED_G1BITP1.2;东西路口绿灯
LED_Y1BITP1.4;东西路口黄灯
LED_R1BITP1.0;东西路口红灯
LED_G2BITP1.3;南北路口绿灯
LED_Y2BITP1.5;南北路口黄灯
LED_R2BITP1.1;南北路口红灯
ORG0000H
LJMPSTART
ORG1000H
START:
MOVTMOD,#01H;置T0为工作方式1
MOVTH0,#3CH;置T0定时初值50ms
MOVTL0,#0B0H
CLRTF0
SETBTR0;启动T0
ORLP1,#0FFH;关闭不相关的LED
;***************************************************
LOOP:
MOVR2,#20;置1s计数初值,50ms*20=1s
MOVR3,#19;东西红灯亮19s
MOVSECOND1,#19;东西路口计时显示初值19s
LCALLDISPLAY
WAY1:
LCALLS1;调用状态1
JNBTF0,WAY1;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR2,WAY1;判断1s到否?
未到继续状态1
MOVR2,#20;置50ms计数初值
DECSECOND1
LCALLDISPLAY
DJNZR3,WAY1;状态1维持10s
;*******************************************
MOVR2,#5;置50ms计数初值5*4=20
MOVR3,#3;绿灯闪3s
MOVR4,#4;闪烁间隔200ms
MOVSECOND1,#3;东西路口计时显示初值3s
LCALLDISPLAY
WAY2:
LCALLS2;调用状态2
JNBTF0,WAY2;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR4,WAY2;判断200ms到否?
未到继续状态2
CPLLED_Y2;南北黄灯闪烁
MOVR4,#4;闪烁间隔200ms
DJNZR2,WAY2;判1s到否?
未到继续状态2
MOVR2,#5;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAY2;状态2维持3s
;*******************************************
MOVR2,#20;置50ms计数初值
MOVR3,#19;红灯亮19s
MOVSECOND1,#19;东西路口计时显示初值19s
LCALLDISPLAY
WAY3:
LCALLS3;调用状态3
JNBTF0,WAY3;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR2,WAY4;判断1s到否?
未到继续状态4
MOVR2,#20;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAY4;状态3维持10s
;*******************************************
MOVR2,#5;置50ms计数初值
MOVR4,#4
MOVR3,#3;绿灯闪3s
MOVSECOND1,#3;东西路口计时显示初值3s
LCALLDISPLAY
WAY4:
LCALLS4;调用状态4
JNBTF0,WAY4;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR4,WAY5;判断200ms到否?
未到继续状态5
CPLLED_Y1;东西黄灯闪
MOVR4,#4;闪烁200ms
DJNZR2,WAY5;判断1s到否?
未到继续状态5
MOVR2,#5;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAY5;状态4维持3s
LJMPLOOP
S1:
;状态1
CLRLED_R1;东西路口红灯亮
SETBLED_Y1
SETBLED_G1
SETBLED_R2
SETBLED_Y2
CLRLED_G2;南北路口绿灯亮
RET
S2:
;状态2
SETBLED_Y1
SETBLED_G1
SETBLED_R2
SETBLED_G2
CLRLED_R1;东西路口红灯亮
RET
S3:
;状态3
SETBLED_R1
SETBLED_Y1
CLRLED_G1;东西路口绿灯亮
CLRLED_R2;南北路口红灯亮
SETBLED_Y2
SETBLED_G2
RET
S4:
;状态4
SETBLED_G1
SETBLED_R1
CLRLED_R2;南北路口红灯亮
SETBLED_Y2
SETBLED_G2
RET
DISPLAY:
;数码显示
MOVA,SECOND1;东西路口计时寄存器
MOVB,#0AH
DIVAB
MOVDBUF,A
MOVA,B
MOVDBUF+1,A
MOVR0,#DBUF
MOVR1,#TEMP
MOVR7,#2
LOOP1:
MOVDPTR,#TAB
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR7,LOOP1
MOVA,#0;扫描子程序
MOVR0,#TEMP
MOVR6,#2
LOOP2:
MOVP2,A
MOVP0,@R0
INCR0
LCALLDELAY
ADDA,#01H
DJNZR6,LOOP2;循环显示2个数字
MOVR6,#2
MOVR0,#TEMP
RET
DELAY:
MOVR3,#1
D1:
MOVR4,#2
D2:
MOVR5,#248
DJNZR5,$
DJNZR4,D2
DJNZR3,D1
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0,1,2,3,4,5,6,7,8,9
END
四、项目设计结果分析(分析试验过程中获得的数据、波形、现象或问题的正确性和必然性,分析产生不正确结果的原因和处理方法)
此课程设计基于单片机原理的知识,属于软硬件结合的实现方法。
因此设计过程中存在调试的环节,通过调试不断发现软件设计过程中的错误,并根据硬件显示结果不断改善,最终得到正确准确的结果。
1.LED显示的交通灯的变化规律不能达到预期的设计效果,出现了错误的变化规律。
2.显示倒计时的数码管无法正常显示
这两点是最初调试不成功的主要原因。
处理方法:
修改交通灯变化的规律的子程序及位选部分程序。
改正后,就可以正常工作了。
当把编辑的正常程序下载到51单片机开发板上时,单片机开发板上立即显示交通灯的S1状态(即东西方向红灯和南北方向绿灯同时亮19s,数码管显示倒计时),之后显示交通灯的S2状态(即东西方向亮红灯,南北方向黄灯闪烁),然后继续显示交通灯的S3状态(即东西方向绿灯和南北方向红灯同时被点亮19s,数码管显示倒计时),之后继续显示交通灯的S4状态(即东西方向黄灯闪烁,南北方向红灯),再之后循环重新执行交通灯的S1状态。
心得体会:
此次课程设计历时三个星期,在此期间我查阅了课本以外的许多知识,当然也对课本进行了巩固和加深,是我这一学期以来所学知识有了一个系统的连贯、全面的复习,很多以前不太了解的知识得到了进一步的理解和认知。
通过这次课程设计,我深深的了解到汇编语言的正确性不仅仅决定于其语句的正确性,而且与语句排列的逻辑性严密相关。
不正确的语句摆放位置,会严重影响调试结果的正确性。
因此,我在单片机的基本原理、单片机应用系统开发过程、单片机控制过程以及在常用编程设计思路技巧(特指汇编语言)的掌握方面向前迈进了一大步,为我的成长注入强大
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)