基于DSP交通灯控制的设计_第1页
基于DSP交通灯控制的设计_第2页
基于DSP交通灯控制的设计_第3页
基于DSP交通灯控制的设计_第4页
基于DSP交通灯控制的设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、xxxxxx电子信息工程学院课程设计报告交通灯综合控制设计人:xxx专业:电子信息工程班级:电子班学号:指导教师:二零一 x年x月1设计目的及要求41.1设计目的41.2设计要求41.2. 1 交通灯控制41.2.2 计吋51.2.3紧急情况51.2.4程序设计52设计原理及方案72.1课程设计总体方案72. 1. 1 设计思路72.2课程设计原理72.2. 1系统工作原理72.2.2系统工作状态83硬件设计103.1硬件总体设计103.2交通灯敁示模块113.3计数显示模块123.4开关模块134软件设计144.1程序流程144.2交通灯模拟敁示154.3定时器及中断设计154.4 外中断设

2、计165系统调试185.1硬件调试185. 1. 1电源调试185. 1. 2 emulator 调试185. 2软件调试211软件设计215.2.2程序运行235.3系统下载246结论分析及体会257参考文献261设计目的及要求1.1设计目的熟悉使用ichek-f2812-ae评估板控制icetek-ctr上交通灯的方法。练习自主独立的设计,实现理论和实践的统一,提高 自我动手能力。掌握tms320f2812dsp定时器的使用和编程。掌握tms320f2812dsp外中断的使用和编程。学复杂控制程序设计思路。利用dsp开发环境ccs c2000对源程序文件进行编译、链接、 装载调试,以完成基

3、本的dsp项h文件设计。通过此次课程设计,学习dspf2812芯片的i/o端口控制方法, 熟悉字模的简单构建和使用,熟悉掌握在dsp软硬件环境卜*的程 序开发流程,达到学以致用的h的。1.2设计要求4. 1交通灯控制要求:利用icetek-edu实验箱提供的设备,设计模拟实际生活中十字 路u交通灯控制的程序。要求如卜*:交通灯分红黄绿三色,东、南、西、北各_组,用灯光信号实现 对交通的控制:绿灯信号表示通行,黄灯表示普告,红灯禁止通行,灯光闪烁表示信号即将改变。计时显示:8x8点阵显示两 位计数,为倒计时,每秒改变计数显示。正常交通控制信号顺 序:正常交通灯信号自动变换(1)南北方向绿灯,东两

4、红灯(20秒)。南北方向绿灯闪烁3次,东两红灯(6秒)。(3)南北方向黄灯,东西红灯(4秒)。(4)南北方向红灯,东西方向绿灯(20秒)。(5)南北方向红灯,东两方向绿灯闪3次(6秒)。南北方向红灯,东两方向黄灯(4秒)。(7)返回(1)循环控制紧急情况处理:模仿紧急情况(重耍车队通过、急救车通过等)发 生时,交通警察手动控制(1)当任意方向通行剩余吋间多于10秒,将吋间改成10秒。(2)正常变换到四面红灯(20秒)。(3)直接返回正常信号顺序的卜一个通行信号(跳过闪烁绿灯、 黄灯状态)。1.2.2计时要求:使用tms320vc5416dsp片上定吋器,定吋产生吋钟计数,再 利用此计数对应具体

5、时问。1.2.3紧急情况要求:利用icetek-ctr上键盘产生外中断,中断正常信号顺序,模拟 突发情况。1.2.4程序设计要求根据设计要求,由于控制是由不同的各种状态按顺序发生 的,我们可以采用状态机制控制方法来解决此问题。这种方法是:首先列举所有可能发生的状态;然后将这些状 态编号,按顺序产生这些状态;状态延续的时问用程序控制。对 于突发情况,可采用在正常顺序的控制屮插入特殊控制序列的方 式完成。时钟计数:采用250ms 次中断进行累加计数。表格1状态编号态状灯号义定态状数结 (!+间 间时悄馳一束 保fi.计数显示灯西东灯绿匕rsneegrnss.utat dse9)51i,o601x秒

6、20-020-2西东烁闪灯绿北幻南红rewsha1esnsutat dse3)811601a42秒6o3幻西东幻黄匕削ewwotiyenss.utadtes r9)911481a,61xz(秒4204灯黄两东灯北割1yeewedrsnsutaw to s 1±)z51120026ix/(秒4205灯绿西东灯红就erglewdernss.utat n se,61i2> 170 5 6 7 13秒201i20-6灯 绿 曲东烁,闪幻红北atxfwedernss.utat h s s)/993763(24,秒6o7幻黄.曲东幻红北削ixevyedernss-utawtosi)z51a

7、4o4061xzzl秒4208灯红西东,灯黄匕刺ewow11yesnsutad te s r)/34,6114,6秒420氺灯红西东,灯红匕idhosutast9)511,o,601x秒201i20-其中,止常顺序每112秒(计数值448)为一个循环,状态 为非顺序状态。这样,只要根椐计数值就讨确定当前状态,根据状态再分情 况处理。对于计数显示,当处于状态1、5、*中时需要进行倒计时, 需计算在此状态中的计数值增量,根据增量判断是否更新计数2设计原理及方案2.1设计总体方案2.1.1设计思路根据dsp的硬件中断、定时器、i/o访问的原理。用定时器 定时,用1/0 口控制红绿黄灯的幵关,用硬件外

8、部屮断模拟急救 车的到达。宥急救车到达时,两向为全红,以便让急救车通过。 急救车通过后,交通灯恢复硬件中断前的状态。触发开关(红色 按纽)为屮断申请,表示有急救车通过。在实验箱上交通灯模块 由高8位数据线控制:南北红灯d9、d11为高,南北黄灯d9、d11、 d13、d15为高,南北绿灯d13、d15为高,东西红灯d8、d10为 高,东西黄灯由d8、dio、d12、d14为高,东西绿灯d12、d14 为高。交通灯模块的t/0地址:0x5008h2.2课程设计原理2. 2. 1系统工作原理本设计硬件由定时模块、发光二极管模块、数码管显示模块 和紧急中断模块组成。信号灯受芯片中输出高低电平的控制。

9、当 锁存器i/o u输出为高电平吋,他所驱动的信号灯即发光二极管 就会亮起来。定时模块采用硬件定时和软件定时和结合的方法, 用dsp定时/计数器定时100ms,再用软件计时实现所需的定时。 发光二极管模块由dsp控制发光二极管来实现。数码管显示模块 由实验平台上的uw显示模块实现。紧急中断模块是由单脉冲发 生单元和dsp屮断控制器组成。木次设计屮东两南北路u的红灯均亮1秒,信号灯丌始工作,东西红灯亮20秒,在东西红灯亮 的同时,南北绿灯亮20秒。到20秒时,东西绿灯闪亮,绿灯闪 亮的周期为2秒(亮1秒,火1秒)。绿灯闪亮3次后火,东西黄 灯亮并维持4秒。到4秒吋,东丙黄灯灭,东两红灯亮,同吋南

10、 北红灯灭,南北绿灯亮。东两红灯亮维持20秒,南北绿灯亮维 持20秒,到20秒时,南北绿灯闪亮3次后灭,南北黄灯亮,并 维持4秒。到4秒时,南北黄灯灭,南北红灯亮,同时东西红灯 火,东西绿灯亮。紧接着开始第二周期的动作,以后周而复始的 循环。2.2.2系统工作状态 系统工作状态状态一:南北绿灯、东西红灯,延时20秒,20秒盾南北绿 灯闪3次,东西红灯延吋6秒;如图所示 00图2. 1状态一状态二:南北黄灯、东西红灯,持续6秒;阁2. 2状态二状态三:东西绿灯、南北红灯,延时20秒,20秒盾东西绿 灯闪3次,南北红灯持续6秒;00嚳图2. 3状态三状态四:东西黄灯、南北红灯,持续6秒;0 0 阁

11、2. 4状态四状态五:紧急状态卜*东西南北均亮红灯;aii00眷00图2. 5状态五3硬件设计3.1硬件总体设计1根据设计要求,由于控制是由不同的各种状态按顺序发生 的,我可以采用状态机制控制方法来解决此问题。这种方法是:首 先列举所有可能发生的状态;然后将这些状态编号,按顺序产生 这些状态;状态延续的时间用程序控制,对于突发情况,可采用 在正常顺序的控制中插入特殊控制序列的方式完成。2突发事件设置,在实际交通过程中会出现突发状况,比如 说有救护车或者110紧急车要通过,此吋就可以通过小键盘进 行突发状况模拟。通过按键进入到中断服务子程序,和当于原来 先要通过的车辆在突发状况来了以后就要先让紧

12、急车辆通过。原 理框图如图3.1所示。jtaors232ims320f28i2pgfajtagport片上资源:主频:50mhzadram-12sk*!6bitflash128*!6bitcan驱动srani64iei6bit扩展dsp引脚c?ldledcan驱动4个用户可控开关翻0:0>?:图 3. 1 icetek-f2812-ae 原理框图3.2交通灯显示模块利用icetek-ctr上的一组发光二极管(共12只,分为东西 南北四组、红黄绿三色)的亮灭实现交通信号的模拟。 tms320f2812 dsp冇最多56个专门的通用输入输出管脚。这些通 用输入输出管脚通过专用寄存器可以由软件

13、控制,比如指定输 入、输出以及输出值等。通过icetek-f2812-ae评估板的插座, 扩展板(通用输出/控制模块icetek-ctr)将板上的一个指示灯 和dsp的一个通用输入/输出管脚直接相连。这个管脚为pwm12, 口j*以设置成通用输入/输出管脚使用。扩展原理如图3. 2所示。u图3. 2发光二极管设计原理3.3计数显示模块计数敁示采用放光二极管兄示阵列兄示。tms320f2812 dsp 的存储器扩展接口 (em1e)用来与大多数外围设备进行连接,典 型应用如连接片外扩展存储器等。这一接口提供地址线、数据线 和一组控制线,icetek-f2812-a评估板已将这些扩展线引到y板 上

14、的扩展插座上,供扩展使用。发光二极管显示阵列由扩展端口 控制,em1e接口的两个寄存器提供具体控制。原理阁如阁3.3 所示。图3. 3计数显示原理3.4开关模块开关模块采用外部外部存储器扩展接i丨(emif)上的ps2接 口键盘,通过扫描码判断输入键值。tms320f2812 dsp的扩展存 储器接u (emif)用来与大多数外岡设备进行连接,典型应用如 连接片外扩展存储器等。这一接口提供地址线、数据线和一组控 制线,icetek-f2812-a评估板已将这些扩展线引到了板上的扩展 插座上。键盘的扫描码由dsp的扩展地址0x108001给出,当宥 键盘输入时,读此端口得到扫描码,当无键被按下时

15、读此端口的 结果为0。开关设计原理如图3. 4所示。阁3. 4开关设计原理4软件设计4.1程序流程该设计实现的功能是南北方向绿灯,东两红10秒,南北方 向绿灯闪烁3次,东丙红灯4秒,南北方向黄灯,东两红灯2秒, 南北方向红灯,东西方向绿灯10秒,南北方向红灯,东四方向 绿灯闪3次4秒,南北方向红灯,东西方向黄灯(2秒)。在紧 急情况下,当任意方a通行剩余时间多于10秒,将时间改成10 秒,正常变换到四面红灯20秒,然后直接返冋正常信号顺序的 下一个通行信号(跳过闪烁绿灯、黄灯状态)。程序流程图如图4. 1 所示。图4. 1程序流程图4.2交通灯模拟显示敁示/控制模块上的发光二极管是由连接在28

16、12dsp扩展地 址接口上的寄存器ewk和s腿控制的。这两个寄存器均为6位寄 存器,其位定义见表4.1表4.2。两个寄存器的地址均映射到 2812dsp的扩展空间,ctrlr地址为0x108007, dsp通过对该地 址的写操作来修改两个寄存器上各位的状态,当寄存器某位取1值时,和应指示灯被点亮,取0值则熄灭。当写入ctrlr 的数据(8位有效值)的高两位为00时,数据的低6位将写入 ewr寄存器;当高两位的值为01时,写入snr寄存器bit5bit4bit3bit2bitlbito东-红东-黄东-绿西-红西-黄西-绿表4. 1寄存器ewkbit5bit4bit3bit2bitlbito南-红

17、南-黄南-绿北-红北-黄北-绿表4. 2 寄存器snk4. 3定时器及中断设计tms320f2812a内部冇三个32位通用定时器(ttmer0/1/2), 定吋器1和2被保留给实吋操作系统(dspbios)用,只有定吋 器0可以提供给用户使用。定时器采用中断方式,中断过程如下: a.接受中断请求。必须由软件屮断(从程序代码)或硬件屮断 (从一个引脚或一个基于芯片的设备)提出请求去暂停当前主程 序的执行。b.响应中断。必须能够响应中断请求。如果中断是可屏蔽的,则必须满足一定的条件,按照一定的顺序去执行。ifu 对于非可屏蔽中断和软件中断,会立即作出响应。c.准备执行 中断服务程序并保存寄存器的值

18、。d.执行中断服务子程序。调 用相应得屮断服务程序isr,进入预先规定的向量地址,并且执 行已写好的isr。定时器及中断的流程如图4. 2。阁4. 2定吋器及中断流程阁4外中断设计紧急情况时,利用tcetek-ctr上键盘产生外中断,中断正 常信号顺序,模拟突发情况。显示/控制模块icetek-ctr通过接 口 p8连接小键盘,接收小键盘传送的扫描码,并在每个扫描码 结束后保存,同时向dsp的x1nt2发送屮断信号;当dsp读键盘时将扫描码送到数裾总线上。小键盘上每次按卜*一个键将产生2 个扫描码、2次中断。外中断的程序流程图如图4. 3所示。初始化:dsp时钟、icetek-ctr图4. 3

19、外中断程序流程图5系统调试1硬件调试5. 1. 1电源调试连接电源:打开实验箱,取出三相电源连接线(如衣图),将 电源线的一端插入实验箱外部左侧箱壁上的电源插孔屮。确认实 验箱面板上电源总开关(位于实验箱底板左上角)处于“关”的位 置,连接电源线的另一端至220v交流供电插座上,保证稳hm连 接。使用电源连接线(如a图,插头是带孔的)连接各模块电源: 确认实验箱总电源断开。连接icetek-ctr板上边插座到实验箱 底板上+12v电源插座;icetek-ctr板下边插座到实验箱底板上 +5v电源插座;如使用pp (并口)型仿真器,则连接仿真器上插座 到实验箱底板上+5v电源插座;连接dsp评估

20、板模块电源插座到 实验箱底板h+5v电源插座。注意各插头要插到底,防止虚接或 接触不良。连接dsp评估板信号线:当需要连接信号源输岀到a/d输入 插座时,使用信号连接线(如右阁)分别连接相应插座。接通电源:检杳实验筘上220v电源插座(箱体左侧)中保险 管是否完好,在连接电源线以后,检查各模块供电连线是否正确 连接,打开实验箱上的电源总开关(位于实验箱底板左上角),使 开关位于“开”的位置,电源开关右侧的指示灯亮。1. 2 emulator 调试1. 启动simulator方式ccs 2双击桌趾卜.图标:cc5cw)2. 启动emulator方式首先将实验箱电源关闭。连接实验箱的外接电源线。检

21、查icetek-5100lsb仿真器的黑色jtag插头是否正确接 到icetek-vc5416-a板的j3插尖上。注:仿真器的插尖中宥个 孔加入了封针与j3插头上的缺针位置应重合,保证不会插错。检查是否已经用电源连接线连接丫 icetek-vc5416-a板的 pow1插座和实验箱底板上+5v电源插座。检査其他连线是杏符合实验耍求。检査实验箱上三个拨动开 关位置是否符合实验要求。打开实验箱上电源开关(位于实验箱底板左上角),注意开关 边上红色指示灯点亮。icetek-vc5416-a板上指示灯d1和d2点 亮。如果打开了icetek-ctr的电源开关,icetek-ctr板上指示 灯li、l2

22、和l3点亮。如果打丌了信号源电源丌关,相应开关边 的指示灯点亮。用实验箱附带的usb信号线连接tcetek-5100usb仿真器和 pc机后面的usb插座,注意icetek-5100usb仿真器上指示灯 power和run灯点亮。wft (7)双击桌面上仿真器初始化图标:基踢跌如果出现下面图5. 1提示窗口,表示初始化成功,按一下空格键进入下一步操作。贫、初始化icetek-5100 usb2.0仿真器-|n|xc:ticcbinsxdsreset.exebrddaticetek.cfg -p0this utility hasand '-uhj optionsthat provide

23、brief help and a full nanual.this utility will load the emulator adapter %ndpjtag3. this utility has selected a xds510 class product.this utility will operate on port address %0x0#.dll'.this utility will attempt to reset the controller. this utility has successfully reset the controller.c: t icc

24、bin>pause请按任意垮辨续 - unispin, i半:dnra图5. 1初始化图如來窗口中没宥出现“按任意键继续”,请关闭窗1-1,关闭 实验箱电源,再将usb电缆从仿真器上拔出,返回第(2)步重试。 如果窗口中出现 “the adapter returned an error. ”,并提示“按任意键继续”表示初始瑞泰创新icetek-vc5416-a-usb-edu教学实验系统软件实验指导iii一7化失败,请关闭窗口重试两三次,如果仍然不能初始化则关闭实验箱电源,再将usb电缆从仿真器上拔出,返回第(2)步重试。1. 双击桌面上图称:詹ccs 2启动ccs2. 21。 ccso

25、oo)2. 如果进入ccs提示错误,先选“abort”,然后用“初始化 tcetek-5100usb2. 0仿真器”初始化仿真器,如提示出错,可多 做几次。如仍然出错,拔掉仿真器上usb接头(白色方形),按一 下icetek-vc5416-a板上s1复位按钮,连接usb接头再做“初 始化icetek-5100 usb2.0 仿真器”。3. 如果遇到反复不能连接或复位仿真器、进入ccs报错,请打丌 windows的“任务管理器”,在“进程”卡片上的“映像名称” 栏中查找是否冇“cc_app. exe”,将它结束再试。5.2软件调试 5. 2.1软件设计ccs可以工作在纯软件仿真环境屮,就是由软件

26、在pc机内存 中构造一个虚拟的dsp环境,可以调试、运行程序。但一般软件 无法构造dsp中的外设,所以软件仿真通常用于调试纯软件的算 法和进行效率分析等。在使用软件仿真方式工作时,无需连接板卡和仿真器等硬件。setup ccs 2(1) 单击桌面上阁标:cc5aw)进入ccs设置窗口。(2) 在出现的窗口中按标号顺序进行如下图5. 2设置:巾山谄入配h单选抒 此配?¥申山济除 汝宂配s图5. 2仿真设置图接着在十*面出现的窗口中选择“否(n)”。此时ccs已经被设置成simulator方式(软什仿真tms320vc5416 器件的方式),如果一直使用这一方式就不需要重新进行以上设 置

27、操作了。2.设置ccs 通过 1cetek-5100usb 仿真器连接 1cetek-vc5416-a 硬件环境进行软件调试和幵发。(1)单击桌面上图标:cooo)进入ccs设置窗u 在出现的窗口中按标号顺序进行如下图5. 3设置:ilnport conficm* 亀tiocinciavtiltkle confi<urtltontfcxx pf ebui torox3bca 1icrttt usb zaoiator for #cs5x vc5<02 x1js510usb uolator vc5409 xds510usb uolator vcs4to xbss10u5b emultt

28、or攀山綸入配賞*杰淸除原5t配spilttrs p milyknd&|u1zjdttcriptioaone t«s320c5<» cfv coimtcl vie tn icittt-sioo usb bml*ur ml u i/o f«rt 0如(7 show this 4* 厶4, me “j 5<v«<nd qui<s,吻i tl«lpis图5. 3 css2设置图接着在十*而的窗口中按标号顺序进行如十*阁5. 4选择:图5. 4 css2设置图在出现的窗口按标号顺序进行如下图5. 5设置:图5. 5 cs

29、s2设置图(5)在出现的窗u按标号顺序进行如下图5. 6设置:codcc3ss3ezcode composer studio setup2dsystem confit丑,eeb、了) save changes to system configdrabon?卿 | 取涓 |单击此 按钮退出单杰此 按钮选择»new board to the system configuration.ode ( ornposer studio setup2<j2jjj/.单杰此 按钮不启 动ccsstart code composer studoon exit?二钟糊 i图5.6 css2设s图以上

30、设置完成后,ccs已经被设置成emulator的方式(用仿真器 连接硬件板卡的方式),并且指定通过icetek-5100usb仿真器连 接tcetek-vc5416-a评估板。如果您需要一直使用这一方式就不 需要重新进行以上设置操作y。5. 2.2程序运行选择菜单“project”的“new”项。如阁5. 7所示。图5. 7 css2设置图如下图,按编号顺序操作建立trafficlight. pjt工程文件:展7t主窗口左侧工程管理窗口屮“projects”下新建立的 “trafficlight.pjt”,其中各项均为空。(2) 在工程文件中添加程序文件:选择菜单 “project” 的 “a

31、dd files to project”项;在 “add files to project” 对话框中选择文件h录为c:lcetek-vc5416-edulablab0601-useccs,改 变文件类型为“c sourcefiles(*. c;*. ccc)”,选择显示出来的文件 “trafficlight.c” ; 重复上述各步骤,添加trafficlight. emd文件,到volume工程 中;添加 c:tic5400cgtoolslibrts. lib。(3) 编译连接工程:选择菜单“project”的“rebuild all”项, 或单击工具条中的按钮;注意编译过程中ccs主窗口下

32、部的“build”提示窗屮显示编译信息,最后将给出错误和警告的统 计数。5.3系统下载卜载程序:执行fileload program,在随后打开的对话框屮选择刚刚建立的c:icetek-vc5416-edulablab0601-uscccsdcbugtrafficlig ht. out 文件。设置软件调试断点:在项口浏览窗口屮,双击 trafficlight. c激活这个文件,移动光标到main()行上,单击 鼠标右键选择toggle breakpoint或按f9设置断点(另外,双击 此行左边的灰色控制条也可以设置或删除断点标记)。利用断点调试程序:选择debugrim或按f5运行程序,程 序

33、会自动停在main ()函数上。在1cetek-ctr附带的小键盘上按卜按键,观察信号是杏满足 要求。6设计心得与体会此次课程设计,通过学习,我进一步熟悉了 ccs软件,巩固 了以前所学过的知识。通过对书本上的理论知识与实际的操作 相结合,对所学的理论知识也有了更深层次的理解。木次设计中主要用到y dsp的硬件中断、定吋器以及i/o访 问等方面的相关的知识。对于这儿方面知识我并不陌生,在以前 的的课程设计中,这些|aj容都曾涉及,再加上曾经dsp课程的学 习。因此在木次的功能实现方面遇到的问题并不是太多。不过毕 竟dsp的相关知识冇别于单片机,因此对编程的理解上还是出现 了一些问题,通过对课木

34、以及相关资料的查询,这些问题也及时 的得到了解决。通过对问题的发现与解决,使我ui加了解dsp的原理及芄编程的相关注意事项,加深了对课本理论知识的理解。7参考文献 刘和平等.dsp原理及电机控制应用一基于tms320lf2407x 系列m.北京航空航天大学出版社,2006. 宁改娣等.dsp控制器原理及应用m.北京:科学出版社, 2002. 仿真系统使用说明书,北京瑞泰创新有限公司。 淸源科技.tms320c54xdsp应用程序设计教程m.机械工业 出版社,2004. 1. 清源科技.tms320c54x硬件开发教程m.机械工业出版 社,2003. 1.附录一控制源程序#include z,s

35、cancode. h,z#dcfinc spsao * (unsigned int *)0x38 #define spsdo * (unsigned int *)0x39 sdefine registerclkmd (*(unsigned int *)0x58)#definetim#defineprd#dcfinctcr#definetmr#defineifr#definepmst*(int *)0x24 *(int *)0x25氺(int *)0x26 *(int *)0x0 *(int *)0x1 *(int *)oxld#dcfinc nstatusnsgrccnewrcd 160#de

36、fine nstatusnsflashewred 184#define nstatusnsyellowewred 200define nstatusnsredewyellow 216#define nstatusnsredewgreen 376#dcfinc nstatusnsrcdewflash 400#define nstatusnsredewye11ow1 416#define nstatusnsyellowewred1 432#define ntotaltime 448define nstatushold 160#define statusnsgreenewred 0#define s

37、tatusnsflashewred 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 portsool; ioport unsigned int port8002; ioport unsigne

38、d int port8003; ioport unsigned int port8004; ioport unsigned int port8005; ioport unsigned int port8007;define ctrgrport8000#define ctrlcdcmdr portsool#define ctrkeyportsoolsdcfinc ctrclkey port8002 #define ctrlcdcr port8002 sdefine ctrlcdlcr port8003 #define ctrlcdrcr port8004port8005port8007sdefi

39、ne ctrla#define ctrlrvoid initdspo ; void inittimer();void initicetekctro ;void interrupt time (void);void interrupt xint2(void) ; / xtnt2中断服务程序 void setledarray(int nnumber) ;/ 修改显东内容void refreshledarray () ;/ 刷新jd示void endicetekctro ;unsigned int uwork, ntimecount;unsigned int ulightstatusew, ulig

40、htstatussn; unsigned int bhold; unsigned char ledbuf8,ledx8; unsigned char lcd40=0x7e, 0x81, 0x81, 0x7e, 0x00, 0x02, oxff, 0x00,0xe2, 0x91, 0x91, 0x8e, 0x42, 0x89, 0x89, 0x76,0x38, 0x24, 0x22, oxff, 0x4f, 0x89, 0x89, 0x71,0x7e, 0x89, 0x89, 0x72, 0x01, oxfl, 0x09, 0x07,0x76, 0x89, 0x89, 0x76, 0x4e, 0

41、x91, 0x91, 0x7e;main()int nworkl, nwork2, nwork3, nwork4;intnnowstatus, noldstatus, noldtimecount, nsavetimecount, nsav estatus;unsigned int nscancode;nti mecount=0; bh()ld二0;ulightstatusew=ulightstatussn=o;nnowstatus=0; n01dstatus=l; n01dtimecount=0; initdspo;/初始化dsp,设置运行速度initicetekctro; /初始化显示/控制

42、模块 tnittimer() ;/设置定吋器中断/根据计吋器计数切换状态/根据状态设置计数和交通灯状态while ( 1 )if ( bhold && nnowstatus=statushold )if ( ntimecount>=nstatushold )nnowstatus=nsavcstatus; nt i mecount=nsavet i mecount; bholdo;else if(ntimccount<nstatusnsgreenewrednnowstatus=statusnsgreenewred;else if(ntimecount<nstat

43、usnsflashewrednnowstatus=statusnsflashewred;else if ( ntimecount<nstatusnsyellowewrednnowstatus=statusnsycllowewrcd;else if ( ntimecount<nstatusnsredewyel1ow )nnowstatus=statusnsredewyellow;else if(ntimecount<nstatusnsredewgreen )nnowstatus=statusnsredewgreen;else if(ntimccount<nstatusns

44、redewflash )nnowstatus=statusnsredewflash;else if ( ntimecount<nstatusnsredewyellowl )nnowstatus=statusnsredewyellow;else if ( ntimecount<nstatusnsyellowewredl )nnowstatus=statusnsycllowewrcd; if ( nnowstatus=n01dstatus )switch ( nnowstatus )case statusnsflashewrcd:nwork1=ntimecount-nstatusnsg

45、reenewred;nwork2=nstatusnsyellowewred-nstatusnsflashewred; nwork3=nwork2/3; nwork4=nwork3/2;if ( nworkl>=0 && nwork2>0 && nwork3>0 &&nwork4>0 )ulightstatussn=( (nvorkl%nwork3) <=nvork4 ) ? (0x49) : (0 x40);break;case statusnsredewflash:nworkl=ntimecount-nstatus

46、nsredewgreen;nwork2=nstatusnsrcdewycllowl-nstatusnsrcdewflash; nwork3=nwork2/3; nwork4=nwork3/2;if ( nworkl=0 && nwork2>0 && nwork3>0 &&nwork4>0 )uli ghtstatusew=( (nworkl%nwork3)<=nwork4 )? (0x09): (0 xoo);break;case statusnsgreenewred:nworkl=nstatusnsgrccnewrcd/

47、30; if ( nworkl>0 )nwork2=30-ntimecount/nworkl; if ( bhold )if ( nwork2>10 )ntimecount=nwork1*10;nwork2=10;if ( noldtimecount!=nwork2 )n01dtimecount=nwork2; sctledarray(nwork2);break;case statusnsredewgreen:nvorkl=(nstatusnsredewgreen-nstatusnsredewyellow)/30if ( nworkl>0 )nvork2=30- (ntime

48、count-nstatusnsredewyellow) / nwork 1; if ( bhold )if ( nwork2>10 )ntimecount=nstatusnsredewyellow+nworkl*10;nwork2=10;if ( noldtimecount!=nvork2 ) n01dtimecount=nwork2; setledarray(nwork2);break;case statushold:nworkl=nstatushold/30; if ( nworkl>0 )nwork2=30-ntimecount/nwork1; if ( noldtimeco

49、unt!=nwork2 ) n01dtimccount=nwork2; setledarray (nvork2);break; elseif ( bhold )nsavestatus=nnowstatus;nsavetimecount=ntimecount; nnowstatus=statushold; ntimecount=0;if ( nsavcstatus=statusnsflashewrcd | nsavestatus=statusnsyel1owewred )nsavestatus=statusnsredewgreen;nsavetimecount=nstatusnsredewyel

50、low;else if ( nsavestatus=statusnsredewflash | nsavestatus=statusnsredewyellow )nsavestatus=statusnsgreenewred; nsavctimccount=0;n01dstatus=nnowstatus; switch ( nnowstatus )case statusnsgreenewred:ulightstatusew=0x24;ulightstatussn=0x49;setledarray (18); break;case statusnsflashewred: ulightstatusew=0x24;ulightstatussn=0x49;setledarray(0); break;case statusnsyel1owrwred: ulightstatusew=0x24;ulightstatussn=0x52;setledarray(20); break;case statusnsredewye11ow: ulightstatusew=0xl2;ulightstatussn=0x64;setledarray(20); break;case statusnsredewgreen:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论