资源描述
目 录第1章 设计目的及要求- 1 -1.1 设计目的- 1 -1.2 设计要求- 1 -1.2.1 设计任务- 1 -1.2.2 设计要求- 2 -第2章 设计原理和方案- 3 -2.1 设计思路- 3 -2.2 设计原理- 3 -2.3 设计方案- 4 -2.4 工作状态设计- 5 -第3章 硬件设计- 7 -3.1 总体设计- 7 -3.2 单元电路设计- 8 -第4章 软件调试- 11 -4.1 总体设计- 11 -4.2 源程序- 14 -第5章 系统调试- 14 -5.1 硬件调试- 14 -5.1.1 电源调试- 14 -5.1.2 Emulator调试- 15 -5.2 软件调试- 17 -5.2.1 软件设置- 17 -5.2.2程序运行- 19 -5.3 系统联调- 21 -第6章 结论分析及体会- 22 -参考文献- 24 -附 录- 25 -第1章 设计目的及要求1.1 设计目的(1)练习自主独立的设计,实现理论和实践的统一,提高自我动手能力。 (2)通过交通灯的设计,进一步加深、巩固学生所学专业课程DSP控制器及其应用的基本理论知识,理论联系实际,进一步培养学生综合分析问题和解决问题的能力。(3)熟悉使用TMS320F2812控制交通灯的方法。(4)利用DSP开发环境CCS C2000对源程序文件进行编译、链接、装载调试,以完成基本的DSP项目文件设计。(5)通过此次课程设计,学习DSPf2812芯片的I/O端口控制方法,熟悉字模的简单构建和使用,熟悉Emulator方式下的程序调试规程,并能最终熟悉掌握在DSP软硬件环境下的程序开发流程,达到学以致用的目。1.2 设计要求1.2.1 设计任务设计一个十字路口交通灯(带一个倒计时数码管),每个方向有三色(红、黄、绿);实现交通灯双向车道红绿灯切换功能、交通灯全亮功能、数码管全亮功能;保证每次切换倒计时20秒,且绿灯变红灯前2秒黄灯闪烁1次,并在此时熄灭绿灯。完成紧急状态的情况的手动设置。1.2.2 设计要求 利用ICETEK-EDU 实验箱提供的设备,设计模拟实际生活中十字路口交通灯控制的程序。要求如下: 交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:绿灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。 计时显示:88 点阵显示两位计数,为倒计时,每秒改变计数显示。 正常交通控制信号顺序:正常交通灯信号自动变换: 南北方向绿灯,东西红灯(20 秒)。 南北方向绿灯闪烁。 南北方向黄灯。 南北方向红灯,东西方向黄灯 东西方向绿灯(20 秒)。 东西方向绿灯闪烁。 东西方向黄灯。 返回循环控制。 紧急情况处理:模仿紧急情况(重要车队通过、急救车通过等)发生时,交通警察手动控制 当任意方向通行剩余时间多于10 秒,将时间改成10 秒。 正常变换到四面红灯(20 秒)。 直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。第2章 设计原理和方案2.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地址:0x5008h2.2 设计原理 根据设计要求,由于控制是由不同的各种状态按顺序发生的,我可以采用状态机制控制方法来解决此问题。这种方法是:首先列举所有可能发生的状态;然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制。对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成。时钟计数:采用250ms 一次中断进行累加计数。如表2.1所示。表2.1信号灯状态图 状 态编号信号灯状态状态定义时间计数显示1南北灯绿,东西灯红statusNSGreenEWRed20s20-02南北绿灯闪,东西红灯statusNSFlashEWRed6s03南北黄灯,东西红灯statusNSYellowEWRed4s204南北红灯,东西黄灯statusNSRedEWYellow4s205南北红灯,东西绿灯statusNSRedEWGreen20s20-16南北红灯,东西绿灯闪statusNSRedEWFlash6s07南北红灯,东西黄灯statusNSRedEWYellow4s208南北黄灯,东西红灯statusNSYellowEWRed4s20*南北红灯,东西红灯statusNSRedEWRed20s20-1 其中,正常顺序每112 秒(计数值448)为一个循环,状态“*”为非顺序状态。这样,只要根据计数值就可确定当前状态,根据状态再分情况处理。对于计数显示,当处于状态1、5、*中时需要进行倒计时,需要计算在此状态中的计数值增量,根据增量判断是否更新计数显示。2.3 设计方案中断方案方案一:软件中断优点: 用一条指令进入中断处理子程序,并且,中断类型码由指令提供。 不执行中断响应总线周期,也不从数据总线读取中断类型码。 不受中断允许标志IF的影响。 执行过程中可响应外部硬件中断。适应范围:软件中断:比较典型的是定时器中断、串口中断方案二:硬件中断特点: 硬件中断时通过中断请求线输入信号来请求处理机 具有随机性。适用范围:外部中断(用于按键、键盘中断、打印机中断、定时器中)比较:硬件中断时通过中断请求线输入信号来请求处理机;软件中断是处理机内部识别并进行处理的中断过程。硬件中断一般是由中断控制器提供中断码类型,处理机自动转向中断处理程序;软件中断完全有处理机内部形成中断处理程序的入口地址并转向中断处理程序的入口地址,并转向中断处理程序,不需要外部提供信息。选择:对于突发情况,采用在正常顺序的控制中插入特殊控制序列的方式完成,通过按键进入到中断服务子程序,即硬件中断。2.4 工作状态设计状态一:南北绿灯、东西红灯,延时20秒,20秒后南北绿灯闪3次,东西红灯延时6秒;如图2.1所示图2.1 状态一状态二:南北黄灯、东西红灯,持续6秒;图2.2 状态二 状态三:东西绿灯、南北红灯,延时20秒,20秒后东西绿灯闪3次,南北红灯持续6秒;图2.3 状态三状态四:东西黄灯、南北红灯,持续6秒;图2.4 状态四状态五:紧急状态下东西南北均亮红灯;图2.5 状态五第3章 硬件设计3.1 总体设计 根据设计要求,由于控制是由不同的各种状态按顺序发生的, 我可以采用状态机制控制方法来解决此问题。这种方法是: 首先列举所有可能发生的状态; 然后将这些状态编号, 按顺序产生这些状态;状态延续的时间用程序控制,对于突发情况, 可采用在正常顺序的控制中插入特殊控制序列的方式完成。 突发事件设置, 在实际交通过程中会出现突发状况, 比如说有救护车或者110 紧急车要通过, 此时就可以通过小键盘进行突发状况模拟。通过按键进入到中断服务子程序, 相当于原来先要通过的车辆在突发状况来了以后就要先让紧急车辆通过。图3.1 ICETEK-VC5416-A原理图3.2 单元电路设计件位置和拨码开关设置1 POWER: 这个接口用于接入为整个板子供电的电源,电源电压为+5V,标准配置的电源电流为1A,如果不使用随板提供的电源,请注意电源的正负极性和电流的大小。因为板上设计了电源管理芯片,所以可以使用一路电源供电。下面是这个接口的插孔示意图:图3.2 电源插孔示意图2 DAOUT1 和DACOUT2: 接头分别是ICETEK-VC5416-A 评估板的DA 通道1 和道2的输出接口,接口输出0 到 +5V 的电压。3AIN1 和AIN4:模拟输入(ANOLOG INPUT)通道1 和通道4,采集速率最大为500KHz,输入模拟电压为0 到+5V。4标准RS-232 接口:ICETEK-VC5416-A 上的串口是通过一个串口专用器件TL16C550 和串口的驱动器件共同实现的。串口的物理设计是一个标准的9 针插头,具体定义见下图3.5 DB9:9 针D 型连串口的物理设计是一个标准的9 针插头,具体定义见下图DB9:9 针D 型连接器,异步串口连接器,符合RS-232 规范,输出电平为正负12V。下面是9 针连器的管脚定义。图3.3 异步串口连接器示意图表3.1 DB9 管脚定义表管管脚号管脚定义说明1NC无连接2TxD数据输出引脚,与对方输入脚连接3RxD数据输入引脚,与对方输出脚连接4NC无连接5GND无连接6NC无连接7NC无连接8NC无连接9NC无连接5POW_LED(D1,D2):电源指示灯,如果评估板工作正常,此灯常亮。其中指示灯D1为5V 指示,若外接电源工作正常,此灯常亮。指示灯D2 为+3.3V 指示,若评估板供电芯片工作正常,此灯常亮。USER_LED(D3-D10): 用户指示灯,在板上有8 个可编程的指示灯,分别为D3-D10,这8个指示灯的开关可以由VC5416 编程控制。6 EXT_RST(J10):外接复位信号。J10:如果需要外接控制DSP 的复位信号,可以在此处连接,当两个信号连通时DSP 处于复位状态,当两个信号分开时,DSP 正常工作。7DSP_SW:5416 芯片的配置开关。共有四位,如下表:表3.3表3.3芯片DIP 配置开关说明信号名信号功能信号定义MP/MC处理器方式选择断开状态,即OFF,为高电平,选择MP模式:连接状态,即ON,为低电平,选择MC模式CLKMD15416硬件备频选择断开状态,即OFF,为高电平;连接状态,即ON,为低电平,CLKMD2CLKMD38. HPI_SW(J1,J2):HPI 接口方式选择。这两个接口用于控制5416 的HPI16 和HPIENA信号的状态。列表如下(表3.4):表3.4 HPI 接口方式选择跳线名状态含义J1:HPI161,2,3断开HPI16悬空1,2短接HPI16高电平2,3短接HPI16低电平J2:HPIENA1,2,3断开HPIENA悬空1,2短接HPIENA高电平2,3短接HPIENA低电平9 RESET(S1): 手动复位开关。作用是reset键是做为冷启动的,就是重新启动试验箱,内存数据重新自检。第4章 软件调试4.1 总体设计开始运行程序之后:南北方向绿灯,东西红灯(20 秒)。南北方向绿灯闪烁。南北方向黄灯。南北方向红灯,东西方向黄灯。东西方向绿灯(20 秒)。东西方向绿灯闪烁。东西方向黄灯。返回循环控制。-紧急情况处理:模仿紧急情况(重要车队通过、急救车通过等)发生时,交通警察手动控制当任意方向通行剩余时间多于10 秒,将时间改成10 秒。正常变换到四面红灯(20 秒)。直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。图4.1 二极管列阵图 图4.2 中断服务图图4.3 程序流程图4.2 源程序见附录第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)双击桌面上仿真器初始化图标:如果出现下面图5.6提示窗口,表示初始化成功,按一下空格键进入下一步操作。图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.1设置:图5.2 仿真设置图接着在下面出现的窗口中选择“否(N)”。此时CCS 已经被设置成Simulator 方式(软件仿真TMS320VC5416 器件的方式),如果一直使用这一方式就不需要重新进行以上设置操作了。2 设置CCS 通过ICETEK-5100USB 仿真器连接ICETEK-VC5416-A 硬件环境进行软件调试和开发。(1)单击桌面上图标:进入CCS 设置窗口(2)在出现的窗口中按标号顺序进行如下设置:图5.3 CSS2设置图(3)接着在下面的窗口中按标号顺序进行如下图5.3选择:图5.4 CSS2设置图在出现的窗口按标号顺序进行如下图5.4设置:图5.5 CSS2设置图(5) 在出现的窗口按标号顺序进行如下图5.5设置:图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.cmd 文件,到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 附带的小键盘上按下除“9”键外的按键,观察信号是否满足要求。第6章 结论分析及体会本次交通灯设计实现了正常交通控制信号顺序,完成了如2.4节所示的五种状态的相互转换。此次课程设计,通过在实验室学习,我进一步熟悉了CCS软件,巩固了以前所学过的知识。通过对书本上的理论知识与实际的操作相结合,对所学的理论知识也有了更深层次的理解。本次设计中主要用到了DSP的硬件中断、定时器以及I/O访问等方面的相关的知识。对于这几方面知识我并不陌生,在2011年的电子设计大赛中,这些内容都曾涉及,再加上前两个周的单片机课程设计也曾应用到相关的知识。因此在本次的功能实现方面遇到的问题并不是太多。不过毕竟DSP的相关知识有别于61单片机,因此对编程的理解上还是出现了一些问题,通过对课本以及相关资料的查询,这些问题也及时的得到了解决。通过对问题的发现与解决,使我更加了解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.附 录源程序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=20-nTimeCount/nWork1;if ( bHold )if ( nWork210 )nTimeCount=nWork1*10;nWork2=10;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;SetLEDArray(nWork2);break;case statusNSRedEWGreen:nWork1=(nStatusNSRedEWGreen-nStatusNSRedEWYellow)/20;if ( nWork10 )nWork2=20-(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/20;if ( nWork10 )nWork2=20-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(20);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;/ 清除键盘缓冲区- 31 -
展开阅读全文