资源描述
信息与电气工程学院课程设计报告题目: 交通灯控制 专业: 电子信息工程 班级: 电子一班 姓名: 学号: 任务书题 目交通灯控制时间安排2011.12.192011.12.30目 的:通过课程设计,使学生综合运用DSP技术课程和其他有关先修课程的理论生产实际知识去分析和解决具体问题的能力得到进一步巩固、深化和发展。通过课程设计初步培养学生对工程设计的独立工作能力,学习设计的一般方法。通过课程设计树立正确的 设计思想,提高学生分析问题、解决问题的能力。通过课程设计训练学生的设计基本技能,如计算、绘图、查阅设计资料和手册,熟悉标准与规范等。要 求:1.按时参加课程设计指导,定期汇报课程设计进展情况。 2.广泛收集相关技术资料。 3.独立思考,刻苦钻研,严禁抄袭。 4.按时完成课程设计任务,认真正确的书写课程设计报告。 5.培养实事求是、严谨的工作态度和认真的工作作风。总体方案实现:根据DSP芯片TMS320LF2407的定时器中断、I/O口的访问原理,用定时器定时,用I/O口控制红绿灯的亮灭。在实验箱上交通灯模块由发光二极管和一个锁存器74HC573组成。数据由2407模块的低八位输入,锁存器的控制信号由2407模块输出,但经由CPLD模块译码后再控制锁存器。通过程序控制交通灯的运行,定时时间不是采用软件延时,而是采用定时器定时的方式。指导教师评语:摘要DSP数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。随着社会经济的发展, 城市交通问题越来越引起人们的关注。人、车、路三者关系的协调, 已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统, 它是现代城市交通监控指挥系统中最重要的组成部分。如何采用合适的控制方法, 最大限度利用好耗费巨资修建的城市高速道路, 缓解主干道与匝道、城区同周边地区的交通拥堵状况, 越来越成为交通运输管理和城市规划部门亟待解决的主要问题。而DSP是伴随着微电子学、数字信号处理技术和计算机技术等学科的发展而产生的, 是体现这三个学科综合科研成果的器件。由于它特殊的结构设计, 可以把数字信号处理中的一些理论和算法实时实现, 并逐步进入了控制器市场, 因而在计算机应用领域中得到了广泛的使用。本次设计是基于DSP芯片TMS320LF2407原理设计交通灯控制软硬件系统,利用发光二级管亮灭模拟交通信号,数码管显示倒计时时间,利用DSP芯片TMS320LF2407上定时器定时产生时钟计数,利用实验箱上的一组发光二极管(共12只,分为东西南北四组、红绿两色)的亮灭实现交通信号的模拟设计,模拟实际生活中十字路口交通灯。关键词:DSP;TMS320LF2407;交通灯控制;锁存器;发光二极管;目 录1、 实验目的42、 实验要求43、 实验原理44、 实验方案论证51. 软件延时与定时器定时52. 锁存器的选择53. 主控制器的选择65、 使用的软件66、 程序流程图77、 调试过程及结果分析88、 设计心得体会99、 参考文献910、 硬件连接图1011、 元器件清单1012、 程序11一、实验目的1.熟悉使用DSP芯片TMS320LF2407控制交通灯的方法。2.通过课程设计,能够综合运用DSP技术课程和其他有关先修课程的理论生产实际知识去分析和解决具体问题的能力得到进一步巩固、深化和发展。3.通过课程设计树立正确的设计思想,提高学生分析问题、解决问题的能力。 4.掌握TMS320LF2407DSP芯片定时器的使用和编程。二、实验要求1.南北、东西各两个灯(红、绿)。 2.南北、东西两向各有倒计时功能(各两位数码管显示)。(1)南北绿灯、东西红灯,延时30秒(2)南北绿灯闪3次、东西红灯(3)南北红灯、东西绿灯30秒(4)南北红灯、东西绿灯闪3次(5)回到(1)3.按要求编写课程设计报告书,正确、完整的阐述设计和实验结果。4.按时参加课程设计指导,定期汇报课程设计进展情况。5.广泛收集相关技术资料。 6.独立思考,刻苦钻研,严禁抄袭。7.培养实事求是、严谨的工作态度和认真的工作作风。三、实验原理此模块由发光二极管和一个锁存器组成。数据由2407模块的低八位输入,锁存器的控制信号由2407模块输出,但经由CPLD模块译码后再控制锁存器。四、实验方案论证1.软件延时与定时器定时软件延时不准确,有一定的时间误差,而且这个误差是不可避免的,CPU必须一直运行,不利于提高CPU的利用率。采用定时器定时的方法,定时时间相对比较准确、误差小,CPU的资源能够得到最大程度的利用,有利于DSP芯片处理更为复杂事件的发生。因此,采用定时器中断方式定时比使用软件延时要优越很多,定时也比较准确。2.锁存器的选择本次设计通过主控制器产生时钟计数,并将锁存信号提供给锁存器,所以选择TTL带公共时钟复位的74HC573锁存器。是带有清除端的8D触发器,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存。 CPU 的ALE信号必须经过反相器反相之后才能与74LS273的控制端CLK 端相连。1D8D为数据输入端,1Q8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。(1).1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位;(2).当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚19(Q0)、18(Q1)、17(Q2)、16(Q3)、15(Q4)、14(Q5)、13(Q6)、12(Q7)。3. 主控制器的选择采用TI公司DSP芯片TMS320LF2407。2407采用改进的Harvanl处理结构,指令流水线操作。计算和处理速度很高,系统单指令周期可达到10ns。在片内提供16k的RAM用作程序和数据存储,其最大可扩展寻址空间为1M字节。2407提供的McBSP串口和DAM数据传送方式极大地方便它在通信领域的应用和开发。如下图所示:五、使用的软件本次设计主要使用的是CCS软件,CCS是一种针对TMS320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供有环境配置、源文件编辑、程序调试、跟踪和分析等工具。CCS有两种工作模式,即:软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。 硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。在使用CCS前,应该先了解以下软件的文件名约定(在编写程序时最好在某盘根目录下建立一文件夹,将所有的用户文件放置该文件夹中,建议用字母来作为所有文件的文件名,而不要用汉字或数字):l project.pjtCCS定义的工程文件l program.cC 程序文件l program.asm汇编语言程序文件l filename.lib库文件l project.cmd连接命令文件l program.obj编译后的目标文件l program.out可在目标DSP上执行的文件,可在CCS监控下调试/执行l project.wks工作空间文件,可以记录你的工作环境设置。l programcfg.h54头文件l programcfg.s54汇编原文件l program.cdbCCS的设置数据库文件,是使用DSP/BIOS API必须的,其他没有使用DSP/BIOS API的程序也可以使用,当新建一个设置数据库时,会产生下面的文件。六、程序流程图七、调试过程及结果分析本次课程设计是在学校提供的实验箱上面完成的,自己只需要编写软件而不需要焊接硬件电路。本次软件的设计我采用的是C语言写的,由于C语言的可移植性比较好而且易于理解,汇编语言的指令和程序运行相对有些复杂,没有扎实的汇编基础很难实现。对于程序的调试,我采用软硬件相互结合的方法,自己逐句分析程序的意思,然后下载到DSP芯片中观察实验现象,如此重复的调试直到和实验要求相互吻合。实验结果分析:本次实验基本达到了实验预期的要求,交通灯能够正常工作,数码管能够正常显示时间,由于实验箱上面是用发光二极管来模拟交通灯的,黄色无法模拟出来,只有红、绿两色灯,不是很形象,绿色发光二极管的亮度不是很高。八、设计心得体会本次课题设计较难,初期主要是程序不熟悉,仿真运用不懂。通过这次课程设计,我们初步了解了DSP的原理和基本运用,也在程序的调试和仿真中再一次体会到了程序员的艰辛,并且将自己所学的只是融汇是一件不容易的事。以后若是要进行进一步的研究要花更多的时间在程序的研究和系统运用上。还必须多多实践,以提高自己的动手能力。总的来说,这次十字路口交通灯的设计还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!九、参考文献1 邹彦. DSP原理及应用M. 北京:电子工业出版社,2005.1.2 戴明桢.TMS320C54xDSP结构、原理及应用M.北京航空航天大学出版社,2001.8.3 胡圣尧. DSP原理及应用M.东南大学出版社,2008.7.4 清源科技.TMS320C54xDSP应用程序设计教程M.机械工业出版社,2004.1.5 清源科技.TMS320C54x硬件开发教程M.机械工业出版社,2003.1.十、硬件连接图十一、元器件清单序号名称编号参数数量备注1芯片U1TMS320LF240712芯片U2XC957213芯片U374HC57314电阻R1-R8500欧姆85电阻R910K16电阻R104.7K17电容C2 C310pF28电容C110uF19晶振Y130MHz110按键K11四脚开关11发光二极管D1-D88四红色四绿色十二、程序#include #include void display(u8 data);u8 sec=30;/倒计时变量void InitDSP() /DSP时钟中断初始化asm(SETC INTM); /关闭总中断asm(SETC SXM); /允许符号位扩展asm(CLRC OVM); /累加器结果正常溢出asm(CLRC CNF); /B0-块映射为DRAMSCSR1 =0x81FE; /系统时钟CLKOUT=20*2=40M WDCR =0x00E8; /软件禁止看门狗IMR=0X0002; /开放INT2中断IFR=0X0FFFF;WSGR=0X00; /禁止所有的等待状态void timer1_init()EVAIMRA=EVAIMRA|0X0080; /允许定时器1周期中断EVAIFRA=EVAIFRA&0X0080;T1CON=0X160C; / timer1为连续增计数模式,预分频值为64,使用内部时钟T1PER=40000; /T1PR=0X0176T1CNT=0X00;interrupt void my_Timer()int flag,count=0;count+;asm(SETC INTM); / Disable all interruptflag=EVAIFRA&0X0080;if(flag!=0X0080)asm(CLRC INTM);return;if(count=1000)count=0;if(sec=0)sec=30;sec-;T1CNT=0X00;EVAIFRA=EVAIFRA&0X0080;asm(CLRC INTM); /开中断return;void main(void)InitDSP();timer1_init();LED1=0x0; /以下对8个数码管地址清零 LED2=0x0; LED3=0x0; LED4=0x0; LED5=0x0; LED6=0x0; LED7=0x0; LED8=0x0; asm(CLRC INTM); / Enable all interruptT1CON=T1CON|0X0040; while(1)LED1=0x80;/横杠显示 LED4=0x80; LED5=0x80; LED8=0x80; do/南北绿灯,东西红灯 display(sec); /显示函数 /sec-; /delay(40000); traffic=0x66; /选通交通灯,并赋值 while(sec!=0); /判断时间是否到 sec=30; /给变量重新赋值 do/南北红灯,东西绿灯 display(sec); /显示函数 /sec-; /delay(40000); traffic=0x99; /选通交通灯,并赋值 while(sec!=0); /判断时间是否到 sec=30; /给变量重新赋值 /数码管显示函数void display(u8 data) u8 num1,num2; num1=data/10; num2=data%10; switch(num1) case 1:LED2=0x1c;LED6=0x1c;break;/把键值赋给第2、6个数码管 case 2:LED2=0xbb;LED6=0xbb;break;/把键值赋给第2、6数码管 case 3:LED2=0xbe;LED6=0xbe;break;/把键值赋给第2、6数码管 case 4:LED2=0xdc;LED6=0xdc;break;/把键值赋给第2、6数码管 case 5:LED2=0xee;LED6=0xee;break;/把键值赋给第2、6数码管 case 6:LED2=0xef;LED6=0xef;break;/把键值赋给第2、6数码管 case 7:LED2=0x3c;LED6=0x3c;break;/把键值赋给第2、6数码管 case 8:LED2=0xff;LED6=0xff;break;/把键值赋给第2、6数码管 case 9:LED2=0xfe;LED6=0xfe;break;/把键值赋给第2、6数码管 case 0:LED2=0x7F;LED6=0x7F;break;/把键值赋给第2、6数码管 default:break; switch(num2) case 1:LED3=0x1c;LED7=0x1c;break;/把键值赋给第3、7个数码管 case 2:LED3=0xbb;LED7=0xbb;break;/把键值赋给第3、7个数码管 case 3:LED3=0xbe;LED7=0xbe;break;/把键值赋给第3、7个数码管 case 4:LED3=0xdc;LED7=0xdc;break;/把键值赋给第3、7个数码管 case 5:LED3=0xee;LED7=0xee;break;/把键值赋给第3、7个数码管 case 6:LED3=0xef;LED7=0xef;break;/把键值赋给第3、7个数码管 case 7:LED3=0x3c;LED7=0x3c;break;/把键值赋给第3、7个数码管 case 8:LED3=0xff;LED7=0xff;break;/把键值赋给第3、7个数码管 case 9:LED3=0xfe;LED7=0xfe;break;/把键值赋给第3、7个数码管 case 0:LED3=0x7F;LED7=0x7F;break;/把键值赋给第3、7个数码管 default:break; 15
展开阅读全文