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

下载本文档

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

文档简介

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

2、为 10s 正常变换到四面红灯 (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,选择菜单Debug Connect ; DebugReset CPU。4打开工程文件,工程目录为:C:ICETEKF2812A

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

5、nt16 var1 = 0;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 2

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

7、NSFlashEWRed 1#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;/用来表明是否处于突发情况unsig

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

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

10、R=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 ) nN

12、owStatus=statusNSRedEWGreen; else if ( nTimeCountnStatusNSRedEWFlash ) nNowStatus=statusNSRedEWFlash;else if ( nTimeCountnStatusNSRedEWYellow1 )else if ( nTimeCount=0 & nWork20 & nWork30 & nWork40 ) /ifuLightStatusSN=( (nWork1%nWork3)=0 & nWork20 & nWork30 & nWork40 ) / 分析同前 uLightStatusEW=( (nWork1

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

14、 ( 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 )nWork2=20-nTimeCount/nWork1;i

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

16、reen;nSaveTimeCount=nStatusNSRedEWYellow;else if ( nSaveStatus=statusNSRedEWFlash | nSaveStatus=statusNSRedEWYellow )nSaveStatus=statusNSGreenEWRed;nSaveTimeCount=0;nOldStatus=nNowStatus;switch ( nNowStatus )case statusNSGreenEWRed:uLightStatusEW=0x24; uLightStatusSN=0x49; / 东西红灯,南北绿灯 SetLEDArray1(2

17、0);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;SetLEDArray1(20);break;

18、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=uLightStatusSN;/

19、设置交通灯状态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 void XIN

温馨提示

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

评论

0/150

提交评论