DSP交通灯综合控制程序代码_第1页
DSP交通灯综合控制程序代码_第2页
DSP交通灯综合控制程序代码_第3页
DSP交通灯综合控制程序代码_第4页
DSP交通灯综合控制程序代码_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、 DSP原理及C程序开发 交通灯综合控制实验及程序代码 一、实验目的 熟悉使用ICETECK-F2812-A评估板控制ICETECK-CTR上交通灯的方法 掌握TMS320F2812DSP定时器的使用和编程 掌握TMS320F2812DSP外中断的使用和编程二、实验要求1、交通灯控制要求 交通灯分红黄绿三色,东、南、西、北各一组 计时显示:8*8点阵显示两位计数 正常交通控制信号顺序 南北绿灯:东西红灯(20s) 南北绿灯闪烁 南北黄灯 南北红灯,东西黄灯 东西绿灯(20s) 东西绿灯闪烁 东西黄灯 返回1循环控制 紧急情况处理 当任意方向通行剩余时间多于10s,将时间给为10s 正常变换到四

2、面红灯(20s) 直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)2、交通灯模拟利用ICETECK-CTR上的一组发光二极管(共12只,分为东西南北四组、红黄绿三色)的亮灭实现交通信号的模拟;3、计时显示利用ICETEK-CTR上的发光二极管显示阵列模拟显示4、计时利用TMS320F2812DSP片上定时器,定时产生时钟计数,再利用此计数对应具体时间5、紧急情况利用ICETECK-CTR上键盘产生外中断,中断正常信号顺序,模拟突发情况6、程序设计由于控制是由不同的各种状态按顺序发生的,可采用状态机控制方法来实现、 首先列举所有可能发生的状态 然后将这些状态编号,按顺序产生这些状态

3、;状态延续的时间用程序控制 对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成三、实验步骤1实验准备(1)连接实验设备: (2)连接实验箱附带的键盘的PS2插头到ICETEK-CTR的“键盘接口”P8。(3)将ICETEK-CTR板的供电电源开关拨动到“开”的位置。2设置Code Composer Studio3.3在硬件仿真(Emulator)方式下运行。3启动Code Composer Studio 3.3,选择菜单DebugConnect ; DebugReset CPU。 4打开工程文件,工程目录为:C:ICETEKF2812AES60F2812AES60DSP281x_

4、exampleslab0601-TrafficLight。5编译并下载程序。6运行程序观察结果。观察交通灯信号是否正常工作。7突发事件控制在ICETEK-CTR附带的小键盘上按下除“Enter”键外的按键,观察信号是否满足要求。8结束程序运行退出。在ICETEK-CTR附带的小键盘上按下“Enter”键。9退出CCS。 四、实验程序#include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP281x_Examples.h / DSP281x Examples Include FileUint16 var1 = 0

5、;Uint16 var2 = 0;Uint16 var3 = 0;Uint16 test_count = 0;Uint16 Test_flag = 0;Uint16 Test_var = 0;Uint16 Test_status32;#define nStatusNSGreenEWRed 160 /用数字来区分每一个状态 南北绿灯,东西红灯#define nStatusNSFlashEWRed 184 /南北绿灯闪烁,东西红灯#define nStatusNSYellowEWRed 200 /南北黄灯,东西红灯#define nStatusNSRedEWYellow 216 /南北红灯,东西黄

6、灯#define nStatusNSRedEWGreen 376 /南北红灯,东西绿灯#define nStatusNSRedEWFlash 400 /南北红灯,东西绿灯闪烁#define nStatusNSRedEWYellow1 416 /南北红灯,东西黄灯#define nStatusNSYellowEWRed1 432 /南北黄灯,东西红灯#define nTotalTime 448 /正常顺序一个循环#define nStatusHold 160 /突发情况#define statusNSGreenEWRed 0 /一共7个状态#define statusNSFlashEWRed 1

7、#define statusNSYellowEWRed 2#define statusNSRedEWYellow 3#define statusNSRedEWGreen 4#define statusNSRedEWFlash 5#define statusHold 6int a=0;unsigned int uWork,nTimeCount,nTimeMS; /计数时使用的变量unsigned int uLightStatusEW,uLightStatusSN; /东西、南北红黄绿二极管的亮灭情况unsigned int bHold; /用来表明是否处于突发情况unsigned char le

8、dbuf8,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;void main(void) int nWork1,nWork2,nWork3,nWork4,k; int nN

9、owStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus; unsigned int nScanCode; nTimeCount=0; bHold=0; /给各变量赋初值 uLightStatusEW=uLightStatusSN=0; nNowStatus=0; nOldStatus=1; nOldTimeCount=0; /InitSysCtrl();/初始化cpu InitPll(0x0); /SYSCLKOUT=30 MHz /2=15MHz DINT;/关中断 InitPieCtrl();/初始化pie寄存器 CTRGR

10、=0;/ 初始化ICETEK-CTR 具体说明见实验箱硬件编程CTRGR=0x80;CTRGR=0;CTRLR=0;/ 关闭东西方向的交通灯CTRLR=0x40;/ 关闭南北方向的交通灯CTRLR=0x0c1;/ 开启发光二极管显示阵列 for ( k=0;k8;k+ )ledbufk=0x0ff;/ 显示为空白 值为“1”时灭;值为“0”时点亮ledxk=(k=nStatusHold ) nNowStatus=nSaveStatus;nTimeCount=nSaveTimeCount;bHold=0;/根据计数值来确定状态else if ( nTimeCountnStatusNSGreenE

11、WRed )nNowStatus=statusNSGreenEWRed;else if ( nTimeCountnStatusNSFlashEWRed )nNowStatus=statusNSFlashEWRed;else if ( nTimeCountnStatusNSYellowEWRed )nNowStatus=statusNSYellowEWRed;else if ( nTimeCountnStatusNSRedEWYellow )nNowStatus=statusNSRedEWYellow;else if ( nTimeCountnStatusNSRedEWGreen )nNowSt

12、atus=statusNSRedEWGreen;else if ( nTimeCountnStatusNSRedEWFlash )nNowStatus=statusNSRedEWFlash;else if ( nTimeCountnStatusNSRedEWYellow1 )nNowStatus=statusNSRedEWYellow;else if ( nTimeCount=0 & nWork20 & nWork30 & nWork40 ) /if和条件语句用来 uLightStatusSN=( (nWork1%nWork3)=0 & nWork20 & nWork30 & nWork40

13、) /分析同前uLightStatusEW=( (nWork1%nWork3)0 )nWork2=20-nTimeCount/nWork1; /nWork1最大20,最小0if ( bHold ) /出现突发状态if ( nWork210 ) /若多于10s,则将时间改为10snTimeCount=nWork1*10;nWork2=10;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;SetLEDArray1(nWork2);break;case statusNSRedEWGreen:nWork1=(nStatusNSRedEWGreen-nS

14、tatusNSRedEWYellow)/20;if ( nWork10 )nWork2=20-(nTimeCount-nStatusNSRedEWYellow)/nWork1;if ( bHold )if ( nWork210 )nTimeCount=nStatusNSRedEWYellow+nWork1*10;nWork2=10;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;SetLEDArray1(nWork2);break;case statusHold:nWork1=nStatusHold/20;if ( nWork10 )nWork

15、2=20-nTimeCount/nWork1;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;SetLEDArray1(nWork2);break;elseif ( bHold )nSaveStatus=nNowStatus;nSaveTimeCount=nTimeCount;nNowStatus=statusHold;nTimeCount=0;if ( nSaveStatus=statusNSFlashEWRed | nSaveStatus=statusNSYellowEWRed )/若突发情况,其状态为闪烁或黄灯,则直接将下一状态保存nSa

16、veStatus=statusNSRedEWGreen;nSaveTimeCount=nStatusNSRedEWYellow;else if ( nSaveStatus=statusNSRedEWFlash | nSaveStatus=statusNSRedEWYellow )nSaveStatus=statusNSGreenEWRed;nSaveTimeCount=0;nOldStatus=nNowStatus;switch ( nNowStatus )case statusNSGreenEWRed:uLightStatusEW=0x24; uLightStatusSN=0x49; /东西

17、红灯,南北绿灯SetLEDArray1(20);break;case statusNSFlashEWRed:uLightStatusEW=0x24; uLightStatusSN=0x49; /东西红灯,南北绿灯SetLEDArray1(0);break;case statusNSYellowEWRed:uLightStatusEW=0x24; uLightStatusSN=0x52; /东西红灯,南北黄灯SetLEDArray1(20);break;case statusNSRedEWYellow:uLightStatusEW=0x12; uLightStatusSN=0x64;SetLED

18、Array1(20);break;case statusNSRedEWGreen:uLightStatusEW=0x09; uLightStatusSN=0x64;SetLEDArray1(20);break;case statusNSRedEWFlash:uLightStatusEW=0x09; uLightStatusSN=0x64;SetLEDArray1(0);break;case statusHold:uLightStatusEW=0x24; uLightStatusSN=0x64;SetLEDArray1(20);break;CTRLR=uLightStatusEW; CTRLR=

19、uLightStatusSN;/ 设置交通灯状态RefreshLEDArray1();/ 刷新发光二极管显示nScanCode=CTRKEY;/ 读键盘扫描码nScanCode&=0x0ff;if ( nScanCode=SCANCODE_Enter )break; /若按ENTER,则退出程序 EndICETEKCTR();exit(0); interrupt void cpu_timer0_isr(void) /CpuTimer0.InterruptCount+; / Acknowledge this interrupt to receive more interrupts from group 1 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; CpuTimer0Regs.TCR.bit.TIF = 1; CpuTimer0Regs.TCR.bit.TRB = 1; nTimeMS+;if ( nTimeMS=5 ) /来5次中断,才改变一次计数值nTimeMS=0;nTimeCount+;nTimeCount%=nTotalTime;interrupt vo

温馨提示

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

评论

0/150

提交评论