交通灯实训报告wordWord文档下载推荐.docx
《交通灯实训报告wordWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《交通灯实训报告wordWord文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
交通灯正常运行流程图9
6.3程序模块化设计9
6.3.1主程序MAIN9
6.3.2中断服务程序CLOCK9
6.3.3码表状态刷新判断子程序MBXZ10
6.3.4整秒到判断子程序ZMPD10
6.3.5BCD码转换子程序HBCD10
6.3.6交通灯状态判断子程序JTDZT10
6.3.7动态扫描子程序SSEE10
6.3.8拆字子程序PTDS010
6.3.9外中断模拟紧急车辆通行子程序JJCL10
七、实验心得10
八、参考文献12
九、附录12
1.硬件电路原理图和连接图12
硬件电路12
电路连接图13
2.硬件调试13
3.程序清单14
3.元器件清单表21
摘要
本设计是关于单片机控制的交通灯系统的设计。
在设计之前要用到的有关知识是:
80C51单片机中断系统;
80C51单片机定时器/计数器;
数码管显示技术等等。
本设计主要内容有交通灯模拟系统设计,主要功能,各功能模块的介绍,电路设计,硬件部分设计(PROTUSE画图设计),软件部分设计(程序设计),硬件调试,实验成品焊接,验收。
设计方法以及课程设计的心得体会等等。
该设计中用光二极管来模拟信号灯,紧急车辆的优先通过请求信号由外部中断技术来控制。
要求使AT89c51定时/计数器0作为定时器,要求对通行时间进行倒计时,从P0口输出,在LED上显示并进行递减,以此来实现交通灯的指示功能。
根据交通灯系统所需要实现的功能要求,先画出实验程序框图和主程序流程图,然后根据流程图写出其子程序。
将程序烧至单片机实验箱的芯片中,通过程序控制交通灯的亮灭。
最后根据电路图及相关元件焊接出成品。
关键字:
单片机交通灯系统
一、引言
单片机是电子、计算机及机电专业的一门重要必修课程。
要求掌握单片机的基本组成和工作原理、汇编程序的一般编写方法、常用接口电路的软硬件设计方法,具备基本的单片机系统应用与开发能力。
步进电机又称为脉冲电动机或阶跃电动机,它是基于最基本的电磁感应作用,将电脉冲信号转变为角位移或线位移的开环控制元件。
二、设计目的及意义
1、通过课程设计,使学生深入理解单片机系统的工作原理,接口电路的设计及方法,培养学生综合运用所学理论知识分析和解决实际问题的能力。
2、提高学生全局考虑问题,综合应用专业知识的能力,锻炼学生的独立工作能力,也是对前期理论与实践教学效果的检验。
3、掌握用单片机进行实际产品开发的基本过程,加强模块化设计思想的培养,养成良好的设计和编程习惯,增加对本专业的兴趣,为学生今后在电子、测控、通信、机电等领域从事单片机技术工作打下良好基础。
本设计是《单片机原理与应用》课程综合训练,通过设计一个典型的交通灯控制系统,掌握单片机定时器/计数器及中断系统的使用方法,掌握单片机数码管动态扫描的设计方法。
可以通过理论学习,资料查阅,软,硬件设计,系统调试,元件焊接等环节,巩固和提高所学的知识和应用水平。
学会提出问题,观察和分析问题,得到最终的科学方法。
培养严谨的学习学风,务实的学习态度,团体的合作度等。
为今后的毕业设计,及从事单片机控制系统的设计与维护奠定坚实的基础。
本设计的意义在于通过具体的控制系统的设计,掌握单片机控制系统设计的一般方法和处理问题的思路,特别是一些常用的技术手段。
使我们能在实践教学环节中,积累设计经验,开拓思维空间,全面提高个人的综合能力。
三、设计任务
使用单片机进行交通信号灯的模拟控制。
以红、绿、黄色两组6个发光二极管表示交通信号灯。
执行程序,初始化2个路口红灯全亮,2秒后切换为东西路口红灯亮,南北绿灯亮,持续60秒,红绿灯切换过渡时红灯依旧亮,绿灯亮转变为黄灯闪烁5次,过程时间为5秒,然后切换为南北路口红灯亮,东西路口绿灯亮,持续时间60秒,过渡过程切换方式同上,5秒后,再次切换为东西路口红灯亮,南北绿灯亮。
如此周而复始。
两个路口都有LED数码管组成的倒计时秒钟显示器。
当有急救车到达时,东西南北两个方向的交通信号红灯全亮,以便让急救车通过。
急救车通过后,交通灯恢复中断前的状态。
设计一个基本交通灯管理系统。
路口在T0定时器控制下顺序切换。
带紧急车辆通行(即外中断控制)、状态时间倒计时显示、红绿灯切换过渡过程(即黄灯闪烁)功能的综合程序;
计数器分配:
R6-软件计数器(内循环计数器);
R5-软件计数器(外循环计数器);
R5-黄灯闪烁次数计数器。
【任务目标】
掌握单片机I/O口的硬件接口技术;
掌握单片机中断、定时器/计数器、LED数码管的综合应用系统的设计。
【工作任务】
如图1,使用单片机进行交通信号灯的模拟控制。
执行程序,初始态为四个路口的红灯全亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后东西路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,再切换到东西路口方向,之后重复以上过程。
两个路口都有LED数码管组成的倒计时秒钟显示器
四、设计思路
五、硬件设计
本电路单片机采用AT89C51,单片机扩展一片8255作为六位LED数码管的接口,由于数码管较多,采用动态扫描方式工作。
其中PB口作为段控口,PA口的PA5~PA0作为位控口,用两只拨码开关SW1和SW2控制其接通或断开。
单片机P1口外接6只发光二极管模拟交通灯运行情况,采用灌电流方式。
以按键K1模拟急救车情况,当有紧急情况,即K1按下时,向单片机的
发出中断请求信号,单片机响应中断,4个路口全部红灯亮,好让紧急车辆通行。
5.1AT89C51的引脚说明:
单片机选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB的FLASHROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。
南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。
本次实训用到的各接口功能如下:
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写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)这是由于上拉的缘故。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
XTAL1:
振荡器反相放大器的内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
5.274LS240的引脚说明:
74ls240是八单线驱动器。
(反码,三态输出)
这种八缓冲器和线驱动器是为提高三态输出存储地址驱动器,时钟驱动器和总线定向接收器和发射器的性能可和集成度而特意设计的。
设计者可按需要将原码,反码输出。
对称/G(有效低电平输出控制)
5.374LS07的引脚说明:
74LS07是OC输出的六反相缓冲/驱动器。
74ls07是集电极开路输出的,可直接驱动30V、40mA以下的负载。
若驱动能力不够,可在Vcc与输出端之间接一适当电阻,后面再接npn三极管放大。
LED数码管是单片机系统中使用最广泛的显示设备,通常由8个发光二极管组成。
图2-22为一位LED数码管的外形和引脚图。
其中,七只发光二极管分别对应a~g笔段构成阿拉伯数字的“8”,还有一个发光二极管用来显示小数点。
因此这种LED数码管常称为七段数码管或八段数码管。
LED数码管按电路中的连接方式可以分为共阴极和共阳极两大类,如图2-22的(b)和(c)所示。
共阳极是将各段发光二极管的阳极极连在一起,作为公共端com,公共端com接高电平+5V,某笔段的阴极为低电平时,该段发光;
共阴极是将各段发光二极管的阴极连在一起,作为公共端com,将此公共端com接地,某笔段的阳极为高电平时,该段发光。
LED数码管根据其材料的不同,正向压降一般为1.5`2V,额定电流为10mA,最大电流为40mA。
静态显示时取10mA为宜,动态扫描显示,可适当加大脉冲电流,但一般不超过40mA。
5.5复位部分电路设计:
复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
该设计采用加电直接复位,复位电容采用22uF,电阻1000欧,为了节省元件,没有采用上电加按键模式。
加电瞬间,RES管脚为高电平。
通过电阻回路放电,使电压逐渐降为零,从而实现了复位功能。
5.6时钟部分电路设计:
时钟电路用于产生MCS-51单片机工作时所必须的时钟控制信号。
其内部电路在时钟信号控制下,严格地按时序执行指令进行工作。
在执行指令时,CPU首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定操作。
本设计采用12MHz晶振和两个30Pf瓷片电容,他们构成一个稳定的自激振荡器。
该电容的大小影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
为单片机提供标准时钟。
其中两个瓷片电容起微调作用。
ATMEL公司生产的AT89C51单片机它是硬件电路的核心部分,在由多片单片机组成的系统中,为了各单片机之间的时钟信号同步,应当引入唯一的公用外部脉冲信号作为各单片机的振荡脉冲,外部脉冲信号一般不低于33MHz的方波。
晶振电路图
六、软件设计
在进行应用系统的总体设计时,软件设计与硬件设计应统一考虑,相结合进行。
当系统的电路设计定型以后,软件的任务也就明确了。
一般来说,软件的功能可分为两大类。
一类是执行软件,它能完成各种实质性的功能,如测量计算、显示、打印、输出控制等;
另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织协调角色。
我们设计时,应从以下几个方面考虑:
1)根据软件功能的要求,将系统软件分为若干个相对独立的部分。
设计出合理的软件总体结构,使其清晰、简捷、流程合理。
2)各功能程序实行模块化、子程序化。
3)在编写应用软件之前,应绘制出程序流程图。
4)要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断源等。
本设计采用了模块化设计,主要由主程序模块、功能实现模块两大部分模块组成。
6、2主程序模块设计:
硬件实现实物连接,软件与硬件连接相对应,通过编写程序,使硬件实现期望的功能。
说的形象些,软件相当于其内在本质功能,而硬件是将该功能表现出来,让人们可见罢了。
控制灯程序流程图如下:
交通灯正常运行流程图如下:
6.3程序模块化设计:
6.3.1主程序MAIN:
功能:
完成系统初始化,循环调用数码管扫描子程序,拆字子程序,等待定时中断。
6.3.2中断服务程序CLOCK:
根据交通灯状态变化表,规定的定时时间,调交通灯状态判断子程,调码表
刷新判断子程序。
6.3.3码表状态刷新判断子程序MBXZ
根据交通灯状态变化,刷新码表。
6.3.4整秒到判断子程序ZMPD
根据R6软件计数器的值判断。
因为T0硬件定时器是定时50ms,R6单元每计
数20次,即为1s。
根据R6单元能否被20整除,即可判断整秒到否。
到整秒,则TIME1
计数单元减1,实现倒计时计数。
6.3.5BCD码转换子程序HBCD
功能:
单字节十六进制整数转换为单字节BCD码整数
6.3.6交通灯状态判断子程序JTDZT
根据交通灯状态变化表,规定的定时时间,依次切换P1口输出状态,从而
实现不同颜色的交通灯亮灭控制。
6.3.7动态扫描子程序SSEE
显示缓冲区设置在7CH~79H,对应从左到右的4个数码管。
数码管段控口采用74LS240反相驱动器,位控口采用7407(或75451)同相驱动器,
数码管为共阴极。
动态扫描子程序运行一次,对4位数码管从左到右共扫描3遍
共阴数码管代码表0~9:
3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
段控口:
P0.0~P0.7
位控口:
P2.0~P2.3
6.3.8拆字子程序PTDS0
将TIME2单元的BCD码秒数值拆分为高四位和低四位,分送XS0(XS2)和
XS1(XS3)显示缓冲区
6.3.9外中断模拟紧急车辆通行子程序JJCL
四个路口全部红灯,定时器暂停。
当紧急车辆通行完毕,即外中断撤除后,四个路口恢复原来的状态。
七、实验心得
为期两周的单片机交通灯系统课程设计已经结束,在这两周中我的体会颇多。
从开始的设计电路图,开出元件清单。
这个过程中,我们掌握了交通灯的电路图的设计理念以及方法,单片机芯片80C51各个管脚的作用,以及上电复位电路,时钟控制电路的作用及绘制方法,总体来说收获是非常的大的。
根据流程图,电路图编写程序,是我们遇到的最大困来之一。
程序大多我们采用的是老师上课给我们讲得那个交通灯设计中的程序,通过我们一组成员的配合,在实训开始的第二天我们就画好了图,但是程序中的问题比较大,在设计程序过程中我们必须要除去有关8255的代码。
修改之后,在keil中编译还是出现了很多的错误,但是经过我们的努力,错误改正了,但是调试程序的时候总是出错。
最后在老师的帮助下才解决了这个问题。
通过这次课程设计,我认识到只要细心地去读程序,认真的去理解,真正将程序领悟透彻后,很多问题都可以迎刃而解,然而我们也对proteus以及keil软件的运用更加熟练,深刻体会到做课程设计是为了让我们对平时的理论知识与实际操作箱结合,在理论和实验教学基础上进一步巩固已学到的理论知识并加以应用及提高,学会掌握实际操作方法、提高分析和解决问题的能力。
在编写软件过程中,我们更加熟练掌握了汇编语言各种指令的使用方法,掌握了keil的使用。
在软件调试过程中,我们又进一步复习了keil和proteus联合使用的方法。
在调试数码管倒计时显示为了让两位同时进行需进行循环显示使显示稳定下来。
在做实物的过程中,让我们懂得了认真、耐心的重要性。
在做板子时,需要合理分布,尽量减少布线密集带来的焊接不便。
在焊接时应该避免虚焊连焊的情况。
在整个课程设计中我们充分的发挥了团队合作的精神,在一起相互讨论中共同学习。
不仅对学过的知识进行了巩固,加深了理解,提高了应用的能力,而且提高了我们的发现、分析、解决问题的能力。
经历了从最初的设计到最后在试验箱上实现,提高了我们对专业的认识及兴趣,对于我们工科来说,对以后就业有及其重大的影响。
实训中,我着重电路板焊接部分,当然同样也遇到很多问题,让我知道了,好的工具才能做出好的成绩,好的布线才能做出漂亮的电路板,我焊接的电路板多次出现错误,通过我多次查阅资料,多次检查电路,最后在长达三天的努力后我们团队终于修改出来符合要求的实物。
最后,在此感谢谢辉老师在这学期对我们这个团队这个班级的帮助和关心,使我们班这个大团队,我们组这个小团队,在课程设计的过程中不只是学习到了知识,更有认真做事的态度和踏实做人品质。
这些在外面是学不到的,让我们出身社会后有很强的动手能力。
八、参考文献
[1]《单片机原理及应用》谢辉化学工业出版社
[2]《单片机原理及接口技术》李朝青北京航空航天大学出版社
[3]《单片机原理及应用》张洪润,马平安,张亚凡科学出版社
[4]《单片机课程设计实例教程》杨居义清华大学出版社
[5]《单片机原理及应用习题与实验指导书》王义军中国电力出版社
[6]《单片机课程设计实例教程》杨居义清华大学出版社
[7]《单片机原理及应用习题与实验指导书》王义军中国电力出版社
[8]《单片机基础》北京航空航天大学出版社
九、附录
1.硬件电路原理图和连接图
硬件电路:
电路连接图:
2.硬件调试
接硬件图接线,为了确保东西南北红黄绿灯能够对应显示,实验时,对P1口的接线做了调整。
即,P1.0接L1,P1.1接L2,P1.2接L3,P1.3接L4,P1.4接L5,P1.5接L6。
本交通灯系统由单片机系统、LED显示、交通灯演示系统、焊接电路板组成。
最后,系统要求实现如下的交通灯的功能:
(1)接通电源后,将显示模块的程序编译后烧进单片机电路板里,如若看到红灯全亮两秒后,跳转为一红一绿,码表计时60秒;
(2)在绿灯转为红灯时,要求黄灯先亮,才能变换运行车道;
(3)黄灯亮时,要求每秒闪亮一次,闪烁5次;
(4)黄灯闪烁后跳转为红灯,另一方向红灯则跳为绿灯;
(5)计时60秒,绿灯再次跳转为黄灯,闪烁,红灯跳转为红灯,车辆放行;
(6)在交通灯运行正常的情况下,将P3.2口所接的控制开关,拨为低电平,交通灯全部跳转为红灯亮,可供紧急车辆通行;
(7)照此循环下去没有问题就证明该显示模块的测试成功。
3.程序清单
;
主要子程序名称:
MAIN:
主程序
SSEE:
六位数码管动态扫描子程序
PTD0:
拆字子程序
CLOCK:
T0中断服务子程序
MBXS:
码表刷新判断子程序
JTDZT:
交通灯状态判断子程序
JJCL:
紧急车辆通行子程序
ZMPD:
整秒到判断子程序
HBCD:
单字节十六进制整数转换为单字节BCD码整
**************************************
内存单元及状态标志定义
ZT0EQU0F6H;
状态0,四个路口红灯亮
ZT1EQU0DEH;
东西红南北绿
ZT2_1EQU0EEH;
东西红南北黄
ZT2_2EQU0FEH;
东西红
ZT3EQU0F3H;
东西绿南北红
ZT4_1EQU0F5H;
东西黄南北红
ZT4_2EQU0F7H;
南北红
STATEEQU40H;
状态标志单元
MARKBIT00H;
黄灯闪烁标志位
XS0EQU79H;
显示缓冲单元0,对应最右边数码管
XS1EQU7AH
XS2EQU7BH
XS3EQU7CH
XS4EQU7DH
XS5EQU7EH;
显示缓冲单元5,对应最左边数码管
TIME1EQU40H;
秒单元(十六进制)
TIME2EQU41H;
秒单元(十进制BCD码)
ORG0
LJMPMAIN
ORG0003H;
外中断0(紧急车辆)处理子程序入口
LJMPJJCL
ORG000BH;
定时器T0中断入口
LJMPCLOCK
标号:
MAIN。
主程序。
ORG0030H
MOVSP,#60H;
调整堆栈指针
MOVPSW,#00H;
设置工作寄存器为0区
MOVP2,#0FFH;
高位地址线为0FFH
LCALLCSH;
调初始化子程序
LOOP:
LCALLSSEE;
调动态扫描子程序
LCALLPTDS0;
调拆字子程序
SJMPLOOP
系统初始化子程序
CSH:
MOVXS5,#10H;
显示缓冲区全部送“灭”代码序号
MOVXS4,#10H
MOVXS3,#10H
MOVXS2,#10H
MOVXS1,#10H
MOVXS0,#10H
MOVTIME1,#02H;
状态0持续为2s
MOVTIME2,#02H
MOVA,#81H;
8255初始化,PA口和PB口为输出口
MOVDPTR,#0FF23H
MOVX@DPTR,A
MOVTMOD,#01H;
定时器T0,方式1
MOVTL0,#0B0H;
定时50ms
MOVTH0,#3CH
CLRIT0;
设置外中断0为电平方式工作
SETBPX0;
设置外中断0为高级中断
ORLIE,#83H;
开放外中断0和T0中断
MOVSTATE,#00H;
进入状态0
MOVP1,#ZT0;
MOVR6,#00H
MOVR5,#00H;
软件计数器初始化
SETBTR0;
启动T0
RET
标号CLOCK,T0中断服务程序。
根据交