基于.DSP的交通灯控制的设计说明书

上传人:痛*** 文档编号:114899178 上传时间:2022-06-30 格式:DOC 页数:32 大小:117KB
返回 下载 相关 举报
基于.DSP的交通灯控制的设计说明书_第1页
第1页 / 共32页
基于.DSP的交通灯控制的设计说明书_第2页
第2页 / 共32页
基于.DSP的交通灯控制的设计说明书_第3页
第3页 / 共32页
点击查看更多>>
资源描述
.wd. XXXXXX电子信息工程学院课程设计报告交通灯综合控制 设 计 人:XXX专 业:电子信息工程班 级:电子班学 号:指导教师:二零一X年X月 目 录1 设计目的及要求.4 1.1设计目的.4 1.2设计要求.4 1.2.1 交通灯控制.4 1.2.2 计时.5 1.2.3 紧急情况.51.2.4 程序设计.52 设计原理及方案.7 2.1 课程设计总体方案.7 2.1.1 设计思路 .72.2课程设计原理.7 2.2.1系统工作原理.72.2.2 系统工作状态 .8 3 硬件设计.103.1 硬件总体设计.103.2交通灯显示模块.11 3.3 计数显示模块.12 3.4 开关模块.134 软件设计.14 4.1 程序流程.14 4.2 交通灯模拟显示.15 4.3 定时器及中断设计.15 4.4 外中断设计.165 系统调试.18 5.1 硬件调试.18 5.1.1 电源调试.185.1.2 Emulator调试.18 5.2软件调试.215.2.1软件设计.215.2.2程序运行.23 5.3系统下载.246 结论分析及体会.257参考文献.261 设计目的及要求1.1 设计目的(1) 熟悉使用ICETEKF2812-AE评估板控制ICETEK-CTR上交通灯的方法。练习自主独立的设计.实现理论和实践的统一.提高自我动手能力。(2) 掌握TMS320F2812DSP定时器的使用和编程。(3) 掌握TMS320F2812DSP外中断的使用和编程。(4)学习复杂控制程序设计思路。(5)利用DSP开发环境CCSC2000对源程序文件进展编译、链接、装载调试.以完成 基本的DSP工程文件设计。(6)通过此次课程设计.学习DSPF2812芯片的I/O端口控制方法.熟悉字模的简单构建和使用.熟悉掌握在DSP软硬件环境下的程序开发流程.到达学以致用的目的。1.2 设计要求 1.2.1 交通灯控制要求:利用ICETEK-EDU实验箱提供的设备.设计模拟实际生活中十字路口交通灯控制的程序。要求如下:交通灯分红黄绿三色.东、南、西、北各一组.用灯光信号实现对交通的控制:绿灯信号表示通行.黄灯表示警告.红灯制止通行.灯光闪烁表示信号即将改变。计时显示:88点阵显示两位计数.为倒计时.每秒改变计数显示。正常交通控制信号顺序:正常交通灯信号自动变换(1) 南北方向绿灯.东西红灯(20秒)。(2) 南北方向绿灯闪烁3次,东西红灯(6秒)。(3) 南北方向黄灯,东西红灯(4秒)。(4) 南北方向红灯.东西方向绿灯20秒。(5) 南北方向红灯.东西方向绿灯闪3次(6秒)。(6) 南北方向红灯.东西方向黄灯4秒。(7)返回(1)循环控制紧急情况处理:模仿紧急情况(重要车队通过、急救车通过等)发生时.交通警察手动控制(1) 当任意方向通行剩余时间多于10秒.将时间改成10秒。(2) 正常变换到四面红灯(20秒)。(3) 直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。1.2.2 计时要求:使用TMS320VC5416DSP 片上定时器.定时产生时钟计数.再利用此计数对应具体时间。1.2.3 紧急情况要求:利用ICETEK-CTR 上键盘产生外中断.中断正常信号顺序.模拟突发情况。1.2.4 程序设计要求根据设计要求.由于控制是由不同的各种状态按顺序发生的.我们可以采用状态机制控制方法来解决此问题。这种方法是:首先列举所有可能发生的状态;然后将这些状态编号.按顺序产生这些状态;状态延续的时间用程序控制。对于突发情况.可采用在正常顺序的控制中插入特殊控制序列的方式完成。时钟计数:采用250ms 一次中断进展累加计数。表格 1状态编号信号灯状态状态定义保持时间(计数值.起始时间.完毕时间)计数显示1南北绿灯.东西红灯statusNSGreenEWRed20秒(160.0.159)20-02南北绿灯闪烁.东西红灯statusNSFlashEWRed6秒(24.160.183)03南北黄灯.东西红灯statusNSYellowEWRed4秒(16.184.199)204南北红灯.东西黄灯statusNSRedEWYellow4秒(16.200.215)205南北红灯.东西绿灯statusNSRedEWGreen20秒(160.216.375)20-16南北红灯.东西绿灯闪烁statusNSRedEWFlash6秒(24.376.399)07南北红灯.东西黄灯statusNSRedEWYellow4秒(16.400.415)208南北黄灯.东西红灯statusNSYellowEWRed4秒(16.416.431)20*南北红灯.东西红灯StatusHold20秒(160.0.159)20-1其中.正常顺序每112 秒(计数值448)为一个循环.状态“*为非顺序状态。这样.只要根据计数值就可确定当前状态.根据状态再分情况处理。对于计数显示.当处于状态1、5、*中时需要进展倒计时.需要计算在此状态中的计数值增量.根据增量判断是否更新计数显示。2 设计原理及方案 2.1设计总体方案 2.1.1 设计思路根据DSP的硬件中断、定时器、I/O访问的原理。用定时器定时.用I/O口控制红绿黄灯的开关.用硬件外部中断模拟急救车的到达。有急救车到达时.两向为全红.以便让急救车通过。急救车通过后.交通灯恢复硬件中断前的状态。触发开关(红色按纽)为中断申请.表示有急救车通过。在实验箱上交通灯模块由高8位数据线控制:南北红灯D9、D11为高.南北黄灯D9、D11、D13、D15为高.南北绿灯D13、D15为高.东西红灯D8、D10为高.东西黄灯由D8、D10、D12、D14为高.东西绿灯D12、D14为高。交通灯模块的I/O地址:0x5008h图 01设计总流程图2.2 课程设计原理 2.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秒时.南北黄灯灭.南北红灯亮.同时东西红灯灭.东西绿灯亮。紧接着开场第二周期的动作.以后周而复始的循环。 2.2.2 系统工作状态 系统工作状态状态一:南北绿灯、东西红灯.延时20秒.20秒后南北绿灯闪3次.东西红灯延时6秒;如以以下图图2.1 状态一状态二:南北黄灯、东西红灯.持续6秒;图2.2 状态二状态三:东西绿灯、南北红灯.延时20秒.20秒后东西绿灯闪3次.南北红灯持续6秒;图2.3状态三状态四:东西黄灯、南北红灯.持续6秒;图2.4状态四状态五:紧急状态下东西南北均亮红灯;图2.5 状态五3 硬件设计3.1硬件总体设计 1根据设计要求.由于控制是由不同的各种状态按顺序发生的,我可以采用状态机制控制方法来解决此问题。这种方法是:首先列举所有可能发生的状态;然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制.对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成。 2突发事件设置,在实际交通过程中会出现突发状况,比方说有救护车或者110紧急车要通过,此时就可以通过小键盘进展突发状况模拟。通过按键进入到中断服务子程序,相当于原来先要通过的车辆在突发状况来了以后就要先让紧急车辆通过。原理框图如图3.1所示。图3.1ICETEK-F2812-AE原理框图3.2交通灯显示模块 利用ICETEK-CTR上的一组发光二极管(共12只.分为东西南北四组、红黄绿三色)的亮灭实现交通信号的模拟。TMS320F2812DSP有最多56个专门的通用输入输出管脚。这些通用输入输出管脚通过专用存放器可以由软件控制.比方指定输入、输出以及输出值等。通过ICETEK-F2812-AE评估板的插座.扩展板通用输出/控制模块ICETEK-CTR将板上的一个指示灯和DSP的一个通用输入/输出管脚直接相连。这个管脚为PWM12.可以设置成通用输入/输出管脚使用。扩展原理如图3.2所示。 图3.2发光二极管设计原理3.3计数显示模块计数显示采用放光二极管显示阵列显示。TMS320F2812DSP的存储器扩展接口EMIF用来与大多数外围设备进展连接.典型应用如连接片外扩展存储器等。这一接口提供地址线、数据线和一组控制线.ICETEK-F2812-A评估板已将这些扩展线引到了板上的扩展插座上.供扩展使用。发光二极管显示阵列由扩展端口控制.EMIF接口的两个存放器提供具体控制。原理图如图3.3所示。 图3.3计数显示原理3.4开关模块开关模块采用外部外部存储器扩展接口EMIF上的PS2接口键盘.通过扫描码判断输入键值。TMS320F2812DSP的扩展存储器接口EMIF用来与大多数外围设备进展连接.典型应用如连接片外扩展存储器等。这一接口提供地址线、数据线和一组控制线.ICETEK-F2812-A评估板已将这些扩展线引到了板上的扩展插座上。键盘的扫描码由DSP的扩展地址0x108001给出.当有键盘输入时.读此端口得到扫描码.当无键被按下时读此端口的结果为0。开关设计原理如图3.4所示。 图3.4开关设计原理4 软件设计 4.1程序流程该设计实现的功能是南北方向绿灯.东西红10秒.南北方向绿灯闪烁3次,东西红灯4秒.南北方向黄灯,东西红灯2秒.南北方向红灯.东西方向绿灯10秒.南北方向红灯.东西方向绿灯闪3次4秒.南北方向红灯.东西方向黄灯2秒。在紧急情况下.当任意方向通行剩余时间多于10秒.将时间改成10秒.正常变换到四面红灯20秒.然后直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。程序流程图如图4.1所示。开场初始化: CPU频率、ICETEK-CTR、定时器、中断控制存放器、工作变量根据定时器计数确定当前状态根据当前状态设置指示灯状态根据当前状态设置发光二极管显示阵列状态读取键盘输入完毕?是否完毕定时器中断服务程序入口计数工作变量值在原根基上加1退出定时器中断服务程序键盘中断服务程序入口设置突发事件标志退出键盘中断服务程序 图4.1 程序流程图4.2交通灯模拟显示 显示/控制模块上的发光二极管是由连接在2812DSP扩展地址接口上的存放器EWR和SNR控制的。这两个存放器均为6位存放器.其位定义见表4.1表4.2。两个存放器的地址均映射到2812DSP的扩展空间.CTRLR地址为0x108007.DSP通过对该地址的写操作来修改两个存放器上各位的状态.当存放器某位取1值时.相应指示灯被点亮.取0值那么熄灭。当写入CTRLR的数据(8位有效值)的高两位为00时.数据的低6位将写入EWR存放器;当高两位的值为01时.写入SNR存放器bit5bit4bit3bit2bit1bit0东-红 东-黄 东-绿 西-红 西-黄 西-绿表4.1 存放器EWRbit5bit4bit3bit2bit1bit0南-红 南-黄 南-绿 北-红 北-黄 北-绿表4.2 存放器SNR4.3定时器及中断设计TMS320F2812A内部有三个32位通用定时器TIMER0/1/2.定时 器1和2被保存给实时操作系统DSPBIOS用.只有定时器0可以提供给用户使用。定时器采用中断方式.中断过程如下:a承受中断请求。必须由软件中断从程序代码或硬件中断从一个引脚或一个基于芯片的设备提出请求去暂停当前主程序的执行。b响应中断。必须能够响应中断请求。如果中断是可屏蔽的.那么必须满足一定的条件.按照一定的顺序去执行。而对于非可屏蔽中断和软件中断.会立即作出响应。c准备执行中断服务程序并保存存放器的值。d执行中断服务子程序。调用相应得中断服务程序ISR.进入预先规定的向量地址.并且执行已写好的ISR。定时器及中断的流程如图4.2。开场初始化DSP时钟初始化中断向量等待中断产生初始化定时器改变指示灯状态中断服务开场中断服务完毕 图4.2 定时器及中断流程图4.4外中断设计 紧急情况时.利用ICETEK-CTR上键盘产生外中断.中断正常信号顺序.模拟突发情况。显示/控制模块ICETEK-CTR通过接口P8连接小键盘.接收小键盘传送的扫描码.并在每个扫描码完毕后保存.同时向DSP的XINT2发送中断信号;当DSP读键盘时将扫描码送到数据总线上。小键盘上每次按下一个键将产生2个扫描码、2次中断。外中断的程序流程图如图4.3所示。开场初始化:DSP时钟、ICETEK-CTR初始化中断控制存放器等待中断产生改变指示灯状态中断服务开场中断服务完毕 图4.3 外中断程序流程图5系统调试5.1硬件调试 5.1.1电源调试 1连接电源:翻开实验箱.取出三相电源连接线(如右图).将电源线的一端插入实验箱外部左侧箱壁上的电源插孔中。确认实验箱面板上电源总开关(位于实验箱底板左上角)处于“关的位置.连接电源线的另一端至220V 交流供电插座上.保证稳固连接。 2使用电源连接线(如右图.插头是带孔的)连接各模块电源:确认实验箱总电源断开。连接ICETEK-CTR 板上边插座到实验箱底板上+12V电源 插座;ICETEK-CTR 板下边插座到实验箱底板上+5V 电源插座;如使用PP(并口)型仿真器.那么连接仿真器上插座到实验箱底板上+5V电源插座;连接DSP 评估板模块电源插座到实验箱底板上+5V 电源插座。注意各插头要插到底.防止虚接或接触不良。 3连接DSP 评估板信号线:当需要连接信号源输出到A/D 输入插座时.使用信号连接线(如右图)分别连接相应插座。 4接通电源:检查实验箱上220V 电源插座(箱体左侧)中保险管是否完好.在连接电源线以后.检查各模块供电连线是否正确连接.翻开实验箱上的电源总开关(位于实验箱底板左上角).使开关位于“开的位置.电源开关右侧的指示灯亮。 5.1.2 Emulator调试 1启动Simulator 方式 双击桌面上图标: 2启动Emulator 方式 (1)首先将实验箱电源关闭。连接实验箱的外接电源线。 (2)检查ICETEK-5100USB 仿真器的黑色JTAG 插头是否正确接到ICETEK-VC5416-A 板的J3 插头上。注:仿真器的插头中有个孔参加了封针与J3 插头上的缺针位置应重合.保证不会插错。 (3)检查是否已经用电源连接线连接了ICETEK-VC5416-A 板的POW1 插座和实验箱底板上+5V 电源插座。 (4)检查其他连线是否符合实验要求。检查实验箱上三个拨动开关位置是否符合实验要求。 (5)翻开实验箱上电源开关(位于实验箱底板左上角).注意开关 边上红色指示灯点亮。ICETEK-VC5416-A 板上指示灯D1 和D2 点 亮。如果翻开了ICETEK-CTR 的电源开关.ICETEK-CTR 板上指示 灯L1、L2 和L3 点亮。如果翻开了信号源电源开关.相应开关边的指示灯点亮。(6) 用实验箱附带的USB 信号线连接ICETEK-5100USB 仿真器和PC 机后面的USB 插座.注意ICETEK-5100USB 仿真器上指示灯Power 和Run 灯点亮。(7) (7)双击桌面上仿真器初始化图标:如果出现下面图5.1提示窗口.表示初始化成功.按一下空格键进入下一步操作。图5.1 初始化图 如果窗口中没有出现“按任意键继续.请关闭窗口.关闭实验箱电源.再将USB 电缆从仿真器上拔出.返回第(2)步重试。 如果窗口中出现“The adapter returned an error.并提示“按任意键继续表示初始瑞泰创新ICETEK-VC5416-A-USB-EDU 教学实验系统软件实验指导III7化失败.请关闭窗口重试两三次.如果仍然不能初始化那么关闭实验箱电源.再将USB 电缆从仿真器上拔出.返回第(2)步重试。双击桌面上图标:启动CCS2.21。如果进入CCS 提示错误.先选“Abort.然后用“初始化ICETEK-5100USB2.0 仿真器初始化仿真器.如提示出错.可多做几次。如仍然出错.拔掉仿真器上USB 接头(白色方形).按一下ICETEK-VC5416-A 板上S1 复位按钮.连接USB 接头再做“初始化ICETEK-5100 USB2.0 仿真器。如果遇到反复不能连接或复位仿真器、进入CCS 报错.请翻开Windows 的“任务管理器.在“进程卡片上的“映像名称栏中查找是否有“cc_app.exe.将它完毕再试。5.2软件调试5.2.1软件设计 CCS 可以工作在纯软件仿真环境中.就是由软件在PC 机内存中构造一个虚拟的DSP 环境.可以调试、运行程序。但一般软件无法构造DSP 中的外设.所以软件仿真通常用于调试纯软件的算法和进展效率分析等。在使用软件仿真方式工作时.无需连接板卡和仿真器等硬件。(1) 单击桌面上图标:进入CCS 设置窗口。(2) 在出现的窗口中按标号顺序进展如以以下图5.2设置:图5.2 仿真设置图接着在下面出现的窗口中选择“否(N)。此时CCS 已经被设置成Simulator 方式(软件仿真TMS320VC5416 器件的方式).如果一直使用这一方式就不需要重新进展以上设置操作了。2 设置CCS 通过ICETEK-5100USB 仿真器连接ICETEK-VC5416-A 硬件环境进展软件调试和开发。(1)单击桌面上图标:进入CCS 设置窗口(2)在出现的窗口中按标号顺序进展如以以下图5.3设置:图5.3 CSS2设置图(3)接着在下面的窗口中按标号顺序进展如以以下图5.4选择:图5.4 CSS2设置图在出现的窗口按标号顺序进展如以以下图5.5设置:图5.5 CSS2设置图(5) 在出现的窗口按标号顺序进展如以以下图5.6设置:图5.6 CSS2设置图以上设置完成后.CCS 已经被设置成Emulator 的方式(用仿真器连接硬件板卡的方式).并且指定通过ICETEK-5100USB 仿真器连接ICETEK-VC5416-A 评估板。如果您需要一直使用这一方式就不需要重新进展以上设置操作了。5.2.2程序运行选择菜单“Project的“New项。如图5.7所示。图5.7 CSS2设置图如以以下图.按编号顺序操作建设Trafficlight.pjt 工程文件:展开主窗口左侧工程管理窗口中“Projects下新建设的“Trafficlight.pjt.其中各项均为空。(2) 在工程文件中添加程序文件:选择菜单“Project的“Add Files to Project项;在“Add Files to Project对话框中选择文件目录为C:ICETEK-VC5416-EDULabLab0601-UseCCS.改变文件类型为“C SourceFiles(*.c;*.ccc).选择显示出来的文件“Trafficlight.c;重复上述各步骤.添加Trafficlight d 文件,到volume 工程中;添加 C:tiC5400cgtoolslibrts.lib。(3) 编译连接工程:选择菜单“Project的“Rebuild All项.或单击工具条中的按钮;注意编译过程中CCS 主窗口下部的“Build提示窗中显示编译信息.最后将给出错误和警告的统计数。5.3系统下载(1) 下载程序:执行FileLoad Program ,在随后翻开的对话框中选择刚刚建设的C:ICETEK-VC5416-EDULabLab0601-UseCCSDebugTrafficlight.out 文件。(2) 设置软件调试断点:在工程浏览窗口中.双击Trafficlight.c 激活这个文件.移动光标到main()行上.单击鼠标右键选择Toggle Breakpoint 或按F9 设置断点(另外.双击此行左边的灰色控制条也可以设置或删除断点标记)。(3) 利用断点调试程序:选择DebugRun 或按F5 运行程序.程序会自动停在main()函数上。(4)在ICETEK-CTR 附带的小键盘上按下按键.观察信号是否满足要求。6 设计心得与体会此次课程设计.通过学习.我进一步熟悉了CCS软件.稳固了以前所学过的知识。通过对书本上的理论知识与实际的操作相结合.对所学的理论知识也有了更深层次的理解。本次设计中主要用到了DSP的硬件中断、定时器以及I/O访问等方面的相关的知识。对于这几方面知识我并不陌生.在以前的的课程设计中.这些内容都曾涉及.再加上曾经DSP课程的学习。因此在本次的功能实现方面遇到的问题并不是太多。不过毕竟DSP的相关知识有别于单片机.因此对编程的理解上还是出现了一些问题.通过对课本以及相关资料的查询.这些问题也及时的得到了解决。通过对问题的发现与解决.使我更加了解DSP的原理及其编程的相关本卷须知.加深了对课本理论知识的理解。7 参考文献1 刘和平等DSP原理及电机控制应用基于TMS320LF2407x系列M北京航空航天大学出版社.20062 宁改娣等. DSP控制器原理及应用M北京:科学出版社.2002.3 仿真系统使用说明书.北京瑞泰创新。4 清源科技.TMS320C54xDSP应用程序设计教程M.机械工业出版社,2004.1.5 清源科技.TMS320C54x硬件开发教程M.机械工业出版社,2003.1.附录一控制源程序#include scancode.h#define SPSA0 *(unsigned int *)0x38#define SPSD0 *(unsigned int *)0x39#define REGISTERCLKMD (*(unsigned int *)0x58)#defineTIM*(int *)0x24#definePRD *(int *)0x25#defineTCR*(int *)0x26#defineIMR*(int *)0x0#defineIFR*(int *)0x1#definePMST*(int *)0x1d#define nStatusNSGreenEWRed 160#define nStatusNSFlashEWRed 184#define nStatusNSYellowEWRed 200#define nStatusNSRedEWYellow 216#define nStatusNSRedEWGreen 376#define nStatusNSRedEWFlash 400#define nStatusNSRedEWYellow1 416#define nStatusNSYellowEWRed1 432#define nTotalTime 448#define nStatusHold 160#define statusNSGreenEWRed 0#define statusNSFlashEWRed 1#define statusNSYellowEWRed 2#define statusNSRedEWYellow 3#define statusNSRedEWGreen 4#define statusNSRedEWFlash 5#define statusHold 6ioport unsigned int port3004;/ CTR扩展存放器定义ioport unsigned int port8000;ioport unsigned int port8001;ioport unsigned int port8002;ioport unsigned int port8003;ioport unsigned int port8004;ioport unsigned int port8005;ioport unsigned int port8007;#define CTRGR port8000#define CTRLCDCMDR port8001#define CTRKEY port8001#define CTRCLKEY port8002#define CTRLCDCR port8002#define CTRLCDLCR port8003#define CTRLCDRCR port8004#define CTRLA port8005#define CTRLR port8007void InitDSP();void InitTimer();void InitICETEKCTR();void interrupt time(void);void interrupt xint2(void);/ XINT2中断服务程序void SetLEDArray(int nNumber);/ 修改显示内容void RefreshLEDArray();/ 刷新显示void EndICETEKCTR();unsigned int uWork,nTimeCount;unsigned int uLightStatusEW,uLightStatusSN;unsigned int bHold;unsigned char ledbuf8,ledx8;unsigned char led40=0x7E,0x81,0x81,0x7E,0x00,0x02,0xFF,0x00,0xE2,0x91,0x91,0x8E,0x42,0x89,0x89,0x76,0x38,0x24,0x22,0xFF,0x4F,0x89,0x89,0x71,0x7E,0x89,0x89,0x72,0x01,0xF1,0x09,0x07,0x76,0x89,0x89,0x76,0x4E,0x91,0x91,0x7E;main()int nWork1,nWork2,nWork3,nWork4;int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus;unsigned int nScanCode;nTimeCount=0; bHold=0;uLightStatusEW=uLightStatusSN=0;nNowStatus=0; nOldStatus=1; nOldTimeCount=0;InitDSP();/ 初始化DSP.设置运行速度InitICETEKCTR();/ 初始化显示/控制模块InitTimer();/ 设置定时器中断/ 根据计时器计数切换状态/ 根据状态设置计数和交通灯状态while ( 1 )if ( bHold & nNowStatus=statusHold )if ( nTimeCount=nStatusHold )nNowStatus=nSaveStatus;nTimeCount=nSaveTimeCount;bHold=0;else if ( nTimeCountnStatusNSGreenEWRed )nNowStatus=statusNSGreenEWRed;else if ( nTimeCountnStatusNSFlashEWRed )nNowStatus=statusNSFlashEWRed;else if ( nTimeCountnStatusNSYellowEWRed )nNowStatus=statusNSYellowEWRed;else if ( nTimeCountnStatusNSRedEWYellow )nNowStatus=statusNSRedEWYellow;else if ( nTimeCountnStatusNSRedEWGreen )nNowStatus=statusNSRedEWGreen;else if ( nTimeCountnStatusNSRedEWFlash )nNowStatus=statusNSRedEWFlash;else if ( nTimeCountnStatusNSRedEWYellow1 )nNowStatus=statusNSRedEWYellow;else if ( nTimeCount=0 & nWork20 & nWork30 & nWork40 )uLightStatusSN=( (nWork1%nWork3)=0 & nWork20 & nWork30 & nWork40 )uLightStatusEW=( (nWork1%nWork3)0 )nWork2=30-nTimeCount/nWork1;if ( bHold )if ( nWork210 )nTimeCount=nWork1*10;nWork2=10;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;SetLEDArray(nWork2);break;case statusNSRedEWGreen:nWork1=(nStatusNSRedEWGreen-nStatusNSRedEWYellow)/30;if ( nWork10 )nWork2=30-(nTimeCount-nStatusNSRedEWYellow)/nWork1;if ( bHold )if ( nWork210 )nTimeCount=nStatusNSRedEWYellow+nWork1*10;nWork2=10;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;SetLEDArray(nWork2);break;case statusHold:nWork1=nStatusHold/30;if ( nWork10 )nWork2=30-nTimeCount/nWork1;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;SetLEDArray(nWork2);break;elseif ( bHold )nSaveStatus=nNowStatus;nSaveTimeCount=nTimeCount;nNowStatus=statusHold;nTimeCount=0;if ( nSaveStatus=statusNSFlashEWRed | nSaveStatus=statusNSYellowEWRed )nSaveStatus=statusNSRedEWGreen;nSaveTimeCount=nStatusNSRedEWYellow;else if ( nSaveStatus=statusNSRedEWFlash | nSaveStatus=statusNSRedEWYellow )nSaveStatus=statusNSGreenEWRed;nSaveTimeCount=0;nOldStatus=nNowStatus;switch ( nNowStatus )case statusNSGreenEWRed:uLightStatusEW=0x24; uLightStatusSN=0x49;SetLEDArray(18);break;case statusNSFlashEWRed:uLightStatusEW=0x24; uLightStatusSN=0x49;SetLEDArray(0);break;case statusNSYellowEWRed:uLightStatusEW=0x24; uLightStatusSN=0x52;SetLEDArray(20);break;case statusNSRedEWYellow:uLightStatusEW=0x12; uLightStatusSN=0x64;SetLEDArray(20);break;case statusNSRedEWGreen:uLightStatusEW=0x09; uLightStatusSN=0x64;SetLEDArray(20);break;case statusNSRedEWFlash:uLightStatusEW=0x09; uLightStatusSN=0x64;SetLEDArray(0);break;case statusHold:uLightStatusEW=0x24; uLightStatusSN=0x64;SetLEDArray(20);break;CTRLR=uLightStatusEW; CTRLR=uLightStatusSN;/ 设置交通灯状态RefreshLEDArray();/ 刷新发光二极管显示nScanCode=port8001;/ 读键盘扫描码nScanCode&=0x0ff;if ( nScanCode=SCANCODE_Enter )break;EndICETEKCTR();exit(0);/ 定时器中断服务程序.进展时钟计数void interrupt time(void)nTimeCount+;nTimeCount%=nTotalTime;/ 设置发光二极管显示内容void SetLEDArray(int nNumber)int i,k,kk,kkk;kkk=nNumber; k=kkk/10*4; kk=kkk%10*4;for ( i=0;i4;i+ )ledbuf7-i=ledk+i;ledbuf3-i=ledkk+i;/ 将缓存中点阵送发光二极管显示void RefreshLEDArray()int i;for ( i=0;i8;i+ )CTRGR=ledxi;CTRLA=ledbufi;/ 初始化DSP.设置运行速度=8MHzvoid InitDSP()REGISTERCLKMD=0;/ 速度设置=8MHz/ 设置定时器参数、允许中断void InitTimer()unsigned int k;asm(ssbxINTM);/ 关中断.进展关键设置时不许打搅/ 设置通用定时器k=PMST;/ 设置PMST存放器PMST =k&0xff;/ 中断向量表起始地址=80HIMR = 0x0c;/ 使能TINTTCR = 0x41f;/ 预分频系数为16TIM = 0;/ 时钟计数器清0PRD = 0x0f423;/ 周期存放器为0ffHTCR = 0x42f;/ 复位、启动IFR = 0x0c;/ 清中断标志位port3004=0;/ 使能XINT2asm(rsbxINTM);/ 开中断/ 初始化ICETEK-CTR板上设备void InitICETEKCTR()int k;CTRGR=0;/ 初始化ICETEK-CTRCTRGR=0x80;CTRGR=0;CTRLR=0;/ 关闭东西方向的交通灯CTRLR=0x40;/ 关闭南北方向的交通灯CTRLR=0x0c1;/ 开启发光二极管显示阵列for ( k=0;k8;k+ )ledbufk=0x0ff;/ 显示为空白ledxk=(k4);/ 生成显示列控制字k=CTRCLKEY;/ 去除键盘缓冲区void interrupt xint2(void)/ XINT2中断服务程序bHold=1;void EndICETEKCTR()int k;CTRLR=0;/ 关闭东西方向的交通灯CTRLR=0x40;/ 关闭南北方向的交通灯CTRLR=0x0c0;/ 关闭发光二极管显示阵列k=CTRCLKEY;/ 去除键盘缓冲区附录二实物图
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!