还剩37页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
十字路__通灯的设计十字路__通灯的设计摘要DSP数字__处理DigitalSignalPro__ssing,简称DSP是一门涉及许多学科而又广泛应用于许多领域的新兴学科20世纪60年代以来,随着计算机和信息技术的飞速发展,数字__处理技术应运而生并得到迅速的发展数字__处理是一种通过使用数学技巧执行转换或提取信息,来处理现实__的方法,这些__由数字序列表示在过去的__多年时间里,数字__处理已经在通信等领域得到极为广泛的应用本次设计是基于DSP原理设计交通灯控制系统软硬件系统,利用发光二级管亮灭模拟交通__,数码管显示倒计时时间,利用TMS320VC5402DSP片上定时器定时产生时钟计数,设计模拟实际生活中十字路__通灯关键词DSP;TMS320LF407;交通灯控制;发光二极管;目录1绪论………………………………………………………………………………………12课程设计内容及要求……………………………………………………………………
22.1课题设计内容………………………………………………………………………
22.2课题设计要求………………………………………………………………………23课程设计方案及原理…………..……………………………….………………………..
33.1课程设计总体方案…………………………………………………………………
33.
1.1设计思路…………………………………………………………………...
33.
1.2设计流程图………………………………………………………………...
33.2课程设计原理………………………………………………………………………
53.
2.1系统工作原理…………………………………………………………...…
53.
2.2系统工作状态………………………………………………………...……64设计步骤及过程…………………………………………………………………….…....
84.1硬件的选择…………………………………………………………………………
84.
1.1主控制器的选择……………………………………………………….…..
84.
1.2电压转换芯片的选择…………………………………………………...…
94.
1.3锁存器的选择…………………………………………………………...…
94.
1.4译码器的选择……………………………………………………………..
104.
1.5数码显示输出模块……………………………………………….……….
114.
1.6指示灯输出模块…………………………………………………………..
124.2软件的使用………………………………………………………………………..
134.
2.1CCS文件名介绍…………………………………………………………..
134.
2.2汇编源程序.A__…..…………………………………………………….
144.
2.3COFF目标文件…………………………………………………………...145心得体会………………………………………………………………………….…..…16____………………………………………………………………………………….…17附录…………………………………………………………………………………………181绪论十字路__通灯在我们的日常生活中随处可见,它为繁忙的道路交通及人们的安全提供了较好的保障然而,我们只知道交通灯在红、黄、绿三色之间交替更换来控制人车流量,去对其内部的工作原理及软硬件的设计了解很少,因此要通过此次简单道路交通灯控制系统软硬件设计来进一步研究交通灯的内部结构最重要的是将学习到的DSP系统的组成与原理应用到交通灯的设计当中通过《DSP技术及应用》课程设计,使学生能将学到的DSP系统的组成与原理用到具体的实际系统中,加深对DSP系统的理解,是将该门课程与实际问题相连接的关键步骤通过课程设计,能够提高学生分析问题,解决问题,从而运用所学知识解决实际问题的能力,并培养基本的,良好的系统软硬件设计等能力2课程设计内容及要求
2.1课题设计内容DSP课程设计是对《数字__处理》、《DSP原理及应用》等课程的较全面练习和训练,是实践教学中的一个重要环节通过本次课程设计,综合运用数字__处理、DSP技术课程以及其他有关先修课程的理论和生产实际知识去分析和解决具体问题,并使所学知识得到进一步巩固、深化和发展初步培养学生对工程设计的__工作能力,掌握电子系统设计的一般方法通过课程设计,基本技能的训练,如查阅设计资料和手册、程序的设计、调试等,提高学生分析问题、解决问题的能力本题目为急救车与十字路__通灯的设计,目的是熟练掌握DSP定时器的控制、中断系统的应用以及程序的编写调试
2.2课程设计要求
1、南北、东西各三个灯(红、黄、绿);
2、南北、东西两向各有倒计时功能(各两位数码管显示);
(1)南北绿灯、东西红灯,延时20秒
(2)南北绿灯闪3次、东西红灯(6秒)
(3)南北黄灯、东西红灯(4秒)
(4)南北红灯、东西绿灯(20秒)
(5)南北红灯、东西绿灯闪3次(6秒)
(6)南北红灯、东西黄灯延时3秒(4秒)
(7)回到
(1)
3、功能键
(1)启动开关
(2)急救灯的启动开关
4、启动开关按下时,交通灯开始运行,再按一下表示停止
5、按要求编写课程设计报告书,正确、完整的阐述设计和实验结果3课程设计总体方案及原理
3.1课程设计总体方案
3.
1.1设计思路根据DSP的硬件中断、定时器、I/O访问的原理用定时器定时,用I/O口控制红绿黄灯的开关,用硬件外部中断模拟急救车的到达有急救车到达时,两向为全红,以便让急救车通过急救车通过后,交通灯恢复硬件中断前的状态触发开关红色按纽为中断申请,表示有急救车通过在实验箱上交通灯模块由高8位数据线控制南北红灯D
9、D11为高,南北黄灯D
9、D
11、D
13、D15为高,南北绿灯D
13、D15为高,东西红灯D
8、D10为高,东西黄灯由D
8、D
10、D
12、D14为高,东西绿灯D
12、D14为高交通灯模块的I/O地址0x5008h
3.
1.2设计流程图开始结束保护现场全部红灯延时10秒恢复现场图
3.1中断程序服务图�初始化DSP开始全部红灯延时1秒�南北绿灯、东西红灯,延时20秒南北红灯,东西绿灯闪3次�南北红灯,东西黄灯延时3秒南北红灯、东西绿灯��南北黄灯,东西红灯�南北绿灯闪3次,东西红灯亮南北绿灯闪3次,东西红灯亮����图
3.2设计总流程图�DSP初始化开始查表往端口(C000H)送段码(显示数据)和位码送八次没有位码向左移一位输出段码数据 输出位选通信号返回延时是指向下一个显示数据关所有显示图
3.3数码管显示流程图
3.2课程设计原理
3.
2.1系统工作原理本设计硬件由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成__灯受芯片中输出高低电平的控制当锁存器I/O口输出为高电平时,他所驱动的__灯即发光二极管就会亮起来定时模块采用硬件定时和软件定时相结合的方法,用DSP定时/计数器定时100ms,再用软件计时实现所需的定时发光二极管模块由DSP控制发光二极管来实现数码管显示模块由实验平台上的LED显示模块实现紧急中断模块是由单脉冲发生单元和DSP中断控制器组成本次设计中东西南北路口的红灯均亮1秒,__灯开始工作,东西红灯亮20秒,在东西红灯亮的同时,南北绿灯亮20秒到20秒时,东西绿灯闪亮,绿灯闪亮的周期为2秒亮1秒,灭1秒绿灯闪亮3次后灭,东西黄灯亮并维持4秒到4秒时,东西黄灯灭,东西红灯亮,同时南北红灯灭,南北绿灯亮东西红灯亮维持20秒,南北绿灯亮维持20秒,到20秒时,南北绿灯闪亮3次后灭,南北黄灯亮,并维持4秒到4秒时,南北黄灯灭,南北红灯亮,同时东西红灯灭,东西绿灯亮紧接着开始第二周期的动作,以后周而复始的循环
3.
2.2系统工作状态状态一南北绿灯、东西红灯,延时20秒,20秒后南北绿灯闪3次,东西红灯延时6秒;如图所示图
3.4状态一状态二南北黄灯、东西红灯,持续6秒;图
3.5状态二状态三东西绿灯、南北红灯,延时20秒,20秒后东西绿灯闪3次,南北红灯持续6秒;图
3.6状态三状态四东西黄灯、南北红灯,持续6秒;图
3.7状态四状态五紧急状态下东西南北均亮红灯;图
3.8状态五4设计步骤及过程
4.1硬件的选择
4.
1.1主控制器的选择采用TI公司DSP芯片TMS320VC5402C5402采用改进的Harvanl处理结构,指令流水线操作计算和处理速度很高,系统单指令周期可达到10ns在片内提供16k的RAM用作程序和数据存储,其最大可扩展寻址空间为1M字节C5402提供的McBSP串口和DAM数据传送方式极大地方便它在通信领域的应用和__如下图所示..\\..\\download\\
5402.pdf图
4.1TMS320VC
54024.
1.2电压转换芯片的选择由于TMS320VC5402的工作电压为
3.3V,而外部存储器的工作电压为5V,用74LVC4245A完成
3.3V到5V的电平转换其功能是完成对芯片内部的Flash的编程工作,当程序在PC机上调试通过后,通过此接口就可以把程序完整地下载到Flash中去图
4.274LVC4245A
4.
1.3锁存器的选择本次设计通过主控制器产生时钟计数,并将锁存__提供给锁存器,所以选择TTL带公共时钟复位的74LS273锁存器是带有清除端的8D触发器,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存CPU的ALE__必须经过反相器反相之后才能与74LS273的控制端CLK端相连1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器
1.1脚是复位CLR低电平有效当1脚是低电平时输出脚2Q
0、5Q
1、6Q
2、9Q
3、12Q
4、15Q
5、16Q
6、19Q7全部输出0即全部复位;
2.当1脚为高电平时11CLK脚是锁存控制端并且是上升沿触发锁存当11脚有一个上升沿立即锁存输入脚
3、
4、
7、
8、
13、
14、
17、18的电平状态并且立即呈现在在输出脚2Q
0、5Q
1、6Q
2、9Q
3、12Q
4、15Q
5、16Q
6、19Q7上.图
4.374LS
2734.
1.4译码器的选择选择常用的74LS138译码器,译码产生8种输出结果,进而控制数码管的显示74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式,其工作原理如下 当一个选通端(E3)为高电平,另两个选通端(E1和/E2)为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出利用E
1、E2和E3可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器图
4.474LS
1384.
1.5数码显示输出模块数码管显示采用了四位一体的数码管其显示由DSP的高八位数据线控制位码显示,低八位数据线控制段码显示其数据经过了74HC273锁存,图中锁存__是LEDALE,清零__是LEDCS,这两__经过CPLD逻辑组合而来,逻辑功能描述如下LEDALE=iosornota15ornota14ora2ora1ora0;--DSP采用I/O方式访问数码管,所以DSP的控制线IS(此为IOS)和地址线组合来锁存送往数码管的数据,其地址C000h,LEDCS=rst;--DSP的复位RS(此写成RST)来对锁存器清零图
4.5数码显示输出模块本实验也是采用CPLD(EPM7128)给DSP扩展了一个I/O口,来完成DSP对I/O口的访问本实验是由DSP通过IO方式对数码管进行操作,即向数码管送数据,高8位数据线D8~D15为数码管的段码,低8位数据线D0~D7为数码管的位码,此I/O端口地址是C000h,该实验中要求熟练运用DSP的各种指令,能使显示数据出现左移或右移等硬件原理图和I/O端口地址译码请参考
1.
1.7输入输出模块中的数码显示输出模块图
4.6数码显示硬件图
4.
1.6指示灯输出模块图
4.7指示灯输出模块DSP的低八位数据线送往锁存器,然后由指示灯来显示图中的LEDCS1是锁存器74HC273的清零__,LEDCS2是锁存器的锁存__,这两__经过CPLD逻辑组合而来,逻辑功能描述如下LEDCS1=rst;--DSP的复位RS(此写成RST)来对锁存器清零LEDCS2=iosornota15ornota14ora2ornota1ora0;--DSP采用I/O方式访问指示灯,所以DSP的控制线IS(此写IOS)和地址线组合来锁存送往指示灯的数据,其地址C002h其硬件图如下图
4.8指示灯输出模块硬件图
4.2软件的使用本次设计主要使用的是CCS软件,CCS是一种针对TMS320系列DSP的集成__环境在Windows操作系统下,采用图形接口界面,提供有环境配置、源文件编辑、程序调试、跟踪和分析等工具CCS有两种工作模式,即软件仿真器模式可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试硬件在线编程模式可以实时运行在DSP芯片上与硬件__板相结合在线编程和调试应用程序
4.
2.1CCS文件名介绍在使用CCS前,应该先了解以下软件的文件名约定(在编写程序时最好在某盘根目录下建立一文件夹,将所有的用户文件放置该文件夹中,建议用字母来作为所有文件的文件名,而不要用汉字或数字)project.pjtCCS定义的工程文件program.cC程序文件program.a__汇编语言程序文件filename.lib库文件project.cmd连接命令文件program.o__编译后的目标文件program.out可在目标DSP上执行的文件,可在CCS监控下调试/执行project.wks工作空间文件,可以记录你的工作环境设置programcfg.h54头文件programcfg.s54汇编原文件program.cdbCCS的设置数据库文件,是使用DSP/BIOSAPI必须的,其他没有使用DSP/BIOSAPI的程序也可以使用,当新建一个设置数据库时,会产生下面的文件
4.
2.2汇编源程序.a__格式C5X的程序以段(Section)为基本单元构成,一个程序文件由若干段构成,每段又由若干语句(Statement)构成C5X的程序分为初始化(Initialized)段和未初始化(Uninitialized)段两大类初始化段可以是程序代码,也可以是程序中用到的常量、数据表等我们可以从程序下载的角度来理解,初始化就是需要程序空间写数据(代码或数据)的段,如同初始化程序空间一样而未初始化段为变量,在下载时,这些变量是没有值的,所以无需向程序空间写,只需留出一些空间以便在运行时存放变量的值,因此这段空间在程序未运行前是没有初始化的段的名称和属性可以由用户自定义,如果用户不定义,汇编器将按默认的段来处理C5X汇编器默认的段有3个“.text”、“.data”、“.bss”其中,“.text”为程序代码段,而“.data”为数据段,“.bss”为变量段,所以“.text”和“.data”是初始化段,而“.bss”是未初始化段,用户自定义用“.sect”和“.usect”两个汇编指示符来完成其中“.sect”用于定义初始化段,“.usect”用于定义未初始化段,语法如下symbol.set“section-name”symbol.set“section-name”length
4.
2.3COFF目标文件TMS320C5X的汇编器和连接器都会生成公共目标文件格式COFF,CommonO__ectFileFor__t的目标文件在本章中,将汇编器生成的文件称为COFF的目标文件,将连接器生成的文件称为COFF执行文件目前,COFF目标文件格式已被广泛使用,因为它支持模块化(段)编程,能够提供有效灵活的管理代码段和目标系统(TargetSystem)存储空间的方法5心得体会这次数字__处理课程设计历时两个星期,前面几天就是在寝室学习和熟悉CCS软件,学到了很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识过程中也遇到了很多问题,不过及时的问老师解决问题,使我更加了解了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.附录MEMORY{PAGE0:VECS:origin=0xff80length=0x80PROG:origin=0x1000length=0x2000PAGE1:DATA:origin=0x2000length=0x1000STACK:origin=0x3000length=0x1000}SECTIONS{.vectors:{}VECSPAGE
0.text:{}PROGPAGE
0.data:{}DATAPAGE
1.stack:{}STACKPAGE1}*************************************************FileName:ex
8.a__**Description:急救车与交通灯实验**CopyrightCSanZhiElectronicAuthorZpin*************************************************.titleex
8.global_c_int
00.mmregsLED_ADDR.set5008hSTATUS
0.set00hSTATUS
1.set01hSTATUS
2.set02hSTATUS
3.set03hSTATUS
4.set04hSTA2_PRE_
0.set05hSTA2_PRE_
1.set06hSTA4_PRE_
0.set07hSTA4_PRE_
1.set08hCURRENT_STA.set60h.data;东西、南北红红绿红黄红红绿红黄空红绿红红空红绿;.word0f00h5a00h5f00h0a500h0af00h0a00h5a00h0500h0a500h.word0f000h0a500h0f500h5a00h0fa00h0a000h0a500h5000h05a00h;.word0C300h9600h0D700h6900h0EB00h08200h9600h04100h06900hDELAY.__crosec_tenth;延时sec_tenth/10秒STMsec_tenth-1AR5loop1STM#09hAR6loop0STM#49999AR7BANZ$*AR7-BANZloop0*AR6-BANZloop1*AR5-.endm.sect.vectorsrst:B_c_int00NOPNOP.spa__15*4*16int0:bbus_comeNOPNOPint1:nopnopnopnopint2:;bbus_comenopnopnopnop.spa__13*4*
16.text_c_int00LD#0hDPSTM#3000hSPS__XINTMS__XSXMSTM#07FFFhSWWSR;IO总线外部等待时间14个周期STM#01h2BhSTM#0hCLKMD;20MHz工作tstBITFCLKMD#1hBCtstTCSTM#1087hCLKMDRPT#0FFhNOPST#0FFFFhIFRORM#0001hIMRR__XINTMLD#40hDPLDSTATUS0TPORTWSTATUS0LED_ADDR;全部红灯DELAY#10;延时1秒circleLDSTATUS1T;nop;nop;nop;nopPORTWSTATUS1LED_ADDR;南北红灯、东西绿灯;nop;nop;nop;nopDELAY#200;延时20秒STM#2hBRC;nop;nop;nop;nopRPTBflash1;nop;nop;nop;nopLDSTA2_PRE_0T;nop;nop;nop;nopPORTWSTA2_PRE_0LED_ADDR;nop;nop;nop;nopDELAY#3LDSTA2_PRE_1T;nop;nop;nop;nopPORTWSTA2_PRE_1LED_ADDR;nop;nop;nop;nopDELAY#3flash1NOP;南北绿灯闪3次、东西红灯LDSTATUS2TPORTWSTATUS2LED_ADDR;南北黄灯、东西红灯DELAY#30;延时3秒LDSTATUS3TPORTWSTATUS3LED_ADDR;南北红灯、东西绿灯DELAY#200;延时20秒STM#2hBRCRPTBflash2LDSTA4_PRE_0TPORTWSTA4_PRE_0LED_ADDRDELAY#3LDSTA4_PRE_1TPORTWSTA4_PRE_1LED_ADDRDELAY#3;南北红灯、东西绿灯闪3次flash2NOPLDSTATUS4TPORTWSTATUS4LED_ADDR;南北红灯、东西黄灯DELAY#30;延时3秒Bcirclebus_comePSHMAR5PSHMAR6PSHMAR7PORTWSTATUS0LED_ADDR;急救车来,全部红灯DELAY#100;延时10秒STTCURRENT_STAPORTWCURRENT_STALED_ADDR;恢复现场POPMAR7POPMAR6POPMAR5RETEDSP原理及C程序__交通灯综合控制实验及程序代码
一、实验目的◇熟悉使用I__TECK-F2812-A评估板控制I__TECK-CTR上交通灯的方法◇掌握TMS320F2812DSP定时器的使用和编程◇掌握TMS320F2812DSP外中断的使用和编程
二、实验要求
1、交通灯控制要求◇交通灯分红黄绿三色,东、南、西、北各一组◇计时显示8*8点阵显示两位计数◇正常交通控制__顺序1南北绿灯东西红灯20s2南北绿灯闪烁3南北黄灯4南北红灯,东西黄灯5东西绿灯20s6东西绿灯闪烁7东西黄灯8返回1循环控制◇紧急情况处理1当任意方向通行剩余时间多于10s将时间给为10s2正常变换到四面红灯20s3直接返回正常__顺序的下一个通行__跳过闪烁绿灯、黄灯状态
2、交通灯模拟利用I__TECK-CTR上的一组发光二极管共12只,分为东西南北四组、红黄绿三色的亮灭实现交通__的模拟;
3、计时显示利用I__TEK-CTR上的发光二极管显示阵列模拟显示
4、计时利用TMS320F2812DSP片上定时器,定时产生时钟计数,再利用此计数对应具体时间
5、紧急情况利用I__TECK-CTR上键盘产生外中断,中断正常__顺序,模拟突__况
6、程序设计由于控制是由不同的各种状态按顺序发生的,可采用状态机控制方法来实现、◇首先列举所有可能发生的状态◇然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制◇对于突__况,可采用在正常顺序的控制中插入特殊控制序列的方式完成
三、实验步骤1.实验准备
(1)连接实验设备
(2)连接实验箱附带的键盘的PS2插头到I__TEK-CTR的“键盘接口”P8
(3)将I__TEK-CTR板的供电电源开关拨动到“开”的位置2.设置CodeComposerStudio
3.3在硬件仿真Emulator方式下运行3.启动CodeComposerStudio
3.3,选择菜单Debug→Connect;Debug→ResetCPU4.打开工程文件,工程目录为C:\I__TEK\F2812AES60\F2812AES60\DSP281x_examples\lab0601-TrafficLight5.编译并下载程序6.运行程序观察结果观察交通灯__是否正常工作7.突发__控制在I__TEK-CTR附带的小键盘上按下除“Enter”键外的按键,观察__是否满足要求8.结束程序运行退出在I__TEK-CTR附带的小键盘上按下“Enter”键9.退出CCS
四、实验程序#includeDSP281x_Devi__.h//DSP281xHeaderfileIncludeFile#includeDSP281x_Examples.h//DSP281xExamplesIncludeFileUint16var1=0;Uint16var2=0;Uint16var3=0;Uint16test_count=0;Uint16Test_flag=0;Uint16Test_var=0;Uint16Test_status
[32];#definenStatusNSGreenEWRed160//用数字来区分每一个状态南北绿灯,东西红灯#definenStatusNSFlashEWRed184//南北绿灯闪烁,东西红灯#definenStatusNSYellowEWRed200//南北黄灯,东西红灯#definenStatusNSRedEWYellow216//南北红灯,东西黄灯#definenStatusNSRedEWGreen376//南北红灯,东西绿灯#definenStatusNSRedEWFlash400//南北红灯,东西绿灯闪烁#definenStatusNSRedEWYellow1416//南北红灯,东西黄灯#definenStatusNSYellowEWRed1432//南北黄灯,东西红灯#definenTotalTime448//正常顺序一个循环#definenStatusHold160//突__况#definestatusNSGreenEWRed0//一共7个状态#definestatusNSFlashEWRed1#definestatusNSYellowEWRed2#definestatusNSRedEWYellow3#definestatusNSRedEWGreen4#definestatusNSRedEWFlash5#definestatusHold6inta=0;unsignedintuWorknTimeCountnTimeMS;//计数时使用的变量unsignedintuLightStatusEWuLightStatusSN;//东西、南北红黄绿二极管的亮灭情况unsignedintbHold;//用来表明是否处于突__况unsignedcharledbuf
[8]ledx
[8];//二极管点阵显示用到unsignedcharled
[40]={0x7E0x810x810x7E0x000x020xFF0x000xE20x910x910x8E0x420x__0x__0x760x380x240x220xFF0x4F0x__0x__0x710x7E0x__0x__0x720x010xF10x090x070x760x__0x__0x760x4E0x910x910x7E};void__invoid{intnWork1nWork2nWork3nWork4k;intnNowStatusnOldStatusnOldTimeCountnS__eTimeCountnS__eStatus;unsignedintnScanCode;nTimeCount=0;bHold=0;//给各变量赋初值uLightStatusEW=uLightStatusSN=0;nNowStatus=0;nOldStatus=1;nOldTimeCount=0;//InitSysCtrl;//初始化cpuInitPll0x0;//SYSCLKOUT=30MHz/2=15MHzDINT;//关中断InitPieCtrl;//初始化pie寄存器CTRGR=0;//初始化I__TEK-CTR具体说明见实验箱硬件编程CTRGR=0x80;CTRGR=0;CTRLR=0;//关闭东西方向的交通灯CTRLR=0x40;//关闭南北方向的交通灯CTRLR=0x0c1;//开启发光二极管显示阵列fork=0;k8;k++{ledbuf[k]=0x0ff;//显示为空白值为“1”时灭;值为“0”时点亮ledx[k]=k4;//生成显示列控制字}k=CTRLCDCR;//清除键盘缓冲区StartCpuTimer0;//启动定时器0//根据计时器计数切换状态//根据状态设置计数和交通灯状态while1{ifbHoldnNowStatus==statusHold//突__况{ifnTimeCount=nStatusHold{nNowStatus=nS__eStatus;nTimeCount=nS__eTimeCount;bHold=0;}}//根据计数值来确定状态elseifnTimeCountnStatusNSGreenEWRednNowStatus=statusNSGreenEWRed;elseifnTimeCountnStatusNSFlashEWRednNowStatus=statusNSFlashEWRed;elseifnTimeCountnStatusNSYellowEWRednNowStatus=statusNSYellowEWRed;elseifnTimeCountnStatusNSRedEWYellownNowStatus=statusNSRedEWYellow;elseifnTimeCountnStatusNSRedEWGreennNowStatus=statusNSRedEWGreen;elseifnTimeCountnStatusNSRedEWFlashnNowStatus=statusNSRedEWFlash;elseifnTimeCountnStatusNSRedEWYellow1nNowStatus=statusNSRedEWYellow;elseifnTimeCountnStatusNSYellowEWRed1nNowStatus=statusNSYellowEWRed;ifnNowStatus==nOldStatus//若状态还未跳变{switchnNowStatus{casestatusNSFlashEWRed:nWork1=nTimeCount-nStatusNSGreenEWRed;nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed;nWork3=nWork2/3;nWork4=nWork3/2;ifnWork1=0nWork20nWork30nWork40//if和条件语句用来uLightStatusSN=nWork1%nWork3=nWork40x49:0x40;//实现绿灯的闪烁break;casestatusNSRedEWFlash:nWork1=nTimeCount-nStatusNSRedEWGreen;nWork2=nStatusNSRedEWYellow1-nStatusNSRedEWFlash;nWork3=nWork2/3;nWork4=nWork3/2;ifnWork1=0nWork20nWork30nWork40//分析同前uLightStatusEW=nWork1%nWork3=nWork40x09:0x00;break;casestatusNSGreenEWRed:nWork1=nStatusNSGreenEWRed/20;//=8ifnWork10{nWork2=20-nTimeCount/nWork1;//nWork1最大20,最小0ifbHold//出现突发状态{ifnWork210//若多于10s,则将时间改为10s{nTimeCount=nWork1*10;nWork2=10;}}ifnOldTimeCount!=nWork2{nOldTimeCount=nWork2;SetLEDArray1nWork2;}}break;casestatusNSRedEWGreen:nWork1=nStatusNSRedEWGreen-nStatusNSRedEWYellow/20;ifnWork10{nWork2=20-nTimeCount-nStatusNSRedEWYellow/nWork1;ifbHold{ifnWork210{nTimeCount=nStatusNSRedEWYellow+nWork1*10;nWork2=10;}}ifnOldTimeCount!=nWork2{nOldTimeCount=nWork2;SetLEDArray1nWork2;}}break;casestatusHold:nWork1=nStatusHold/20;ifnWork10{nWork2=20-nTimeCount/nWork1;ifnOldTimeCount!=nWork2{nOldTimeCount=nWork2;SetLEDArray1nWork2;}}break;}}else{ifbHold{nS__eStatus=nNowStatus;nS__eTimeCount=nTimeCount;nNowStatus=statusHold;nTimeCount=0;ifnS__eStatus==statusNSFlashEWRed||nS__eStatus==statusNSYellowEWRed{//若突__况,其状态为闪烁或黄灯,则直接将下一状态保存nS__eStatus=statusNSRedEWGreen;nS__eTimeCount=nStatusNSRedEWYellow;}elseifnS__eStatus==statusNSRedEWFlash||nS__eStatus==statusNSRedEWYellow{nS__eStatus=statusNSGreenEWRed;nS__eTimeCount=0;}}nOldStatus=nNowStatus;switchnNowStatus{casestatusNSGreenEWRed:uLightStatusEW=0x24;uLightStatusSN=0x49;//东西红灯,南北绿灯SetLEDArray120;break;casestatusNSFlashEWRed:uLightStatusEW=0x24;uLightStatusSN=0x49;//东西红灯,南北绿灯SetLEDArray10;break;casestatusNSYellowEWRed:uLightStatusEW=0x24;uLightStatusSN=0x52;//东西红灯,南北黄灯SetLEDArray120;break;casestatusNSRedEWYellow:uLightStatusEW=0x12;uLightStatusSN=0x64;SetLEDArray120;break;casestatusNSRedEWGreen:uLightStatusEW=0x09;uLightStatusSN=0x64;SetLEDArray120;break;casestatusNSRedEWFlash:uLightStatusEW=0x09;uLightStatusSN=0x64;SetLEDArray10;break;casestatusHold:uLightStatusEW=0x24;uLightStatusSN=0x64;SetLEDArray120;break;}}CTRLR=uLightStatusEW;CTRLR=uLightStatusSN;//设置交通灯状态RefreshLEDArray1;//刷新发光二极管显示nScanCode=CTRKEY;//读键盘扫描码nScanCode=0x0ff;ifnScanCode==SCANCODE_Enterbreak;//若按ENTER,则退出程序}EndI__TEKCTR;exit0;}interruptvoidcpu_timer0_isrvoid{//CpuTimer
0.InterruptCount++;//Acknowledgethisinterrupttore__ivemoreinterruptsfromgroup1PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;CpuTimer0Regs.TCR.bit.TIF=1;CpuTimer0Regs.TCR.bit.TRB=1;nTimeMS++;ifnTimeMS=5//来5次中断,才改变一次计数值{nTimeMS=0;nTimeCount++;nTimeCount%=nTotalTime;}}interruptvoidXINT2_isrvoid{//StopCpuTimer0;PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;bHold=1;//StartCpuTimer0;}voidDelayunsignedintnDelay{intiijjkk=0;forii=0;iinDelay;ii++{forjj=0;jj64;jj++{kk++;}}}//设置发光二极管显示内容voidSetLEDArray1intnNumber{intikkkkkk;kkk=nNumber;k=kkk/10*4;kk=kkk%10*4;fori=0;i4;i++{ledbuf[7-i]=~led[k+i];ledbuf[3-i]=~led[kk+i];}}//将缓存中点阵送发光二极管显示voidRefreshLEDArray1{inti;fori=0;i8;i++{CTRGR=ledx[i];CTRLA=ledbuf[i];}}voidEndI__TEKCTR{intk;CTRLR=0;//关闭东西方向的交通灯CTRLR=0x40;//关闭南北方向的交通灯CTRLR=0x0c0;//关闭发光二极管显示阵列k=CTRLCDCR;//清除键盘缓冲区}
五、实验结果◇程序可以完成交通灯功能,顺序循环工作;◇在中断__到来后,进入特殊过程当前计时如果大于10改成10;否则不变,等待状态切换;切换后进入四面进行状态,计数20s后返回断点后的通行有两方向是绿灯状态;开始保护现场全部红灯延时10秒恢复现场结束。