2022年DSP交通灯综合控制程序代码 .pdf

上传人:C****o 文档编号:24114679 上传时间:2022-07-03 格式:PDF 页数:9 大小:195.91KB
返回 下载 相关 举报
2022年DSP交通灯综合控制程序代码 .pdf_第1页
第1页 / 共9页
2022年DSP交通灯综合控制程序代码 .pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《2022年DSP交通灯综合控制程序代码 .pdf》由会员分享,可在线阅读,更多相关《2022年DSP交通灯综合控制程序代码 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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 页,共 9 页 - - - - - - - - - . . 由于控制是由不同的各种状态按顺序发生的,可采用状态机控制方法来实现、 首先列举所有可能发生的状态 然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成三、实验步骤1实验准备(1)连接实验设备:(2)连接实验箱附带的键盘的PS2插头到 ICETEK-CTR 的“键盘接口” P8。(3)将 ICETEK-CTR 板的供电电源开关拨动到“开”的位置。2设置 C

4、ode Composer Studio3.3在硬件仿真 (Emulator) 方式下运行。3启动 Code Composer Studio 3.3 ,选择菜单 Debug Connect ; Debug Reset CPU。4打开工程文件,工程目录为:C:ICETEKF2812AES60F2812AES60DSP281x_exampleslab0601-TrafficLight。5编译并下载程序。6运行程序观察结果。观察交通灯信号是否正常工作。7突发事件控制在 ICETEK-CTR 附带的小键盘上按下除“Enter ”键外的按键,观察信号是否满足要求。8结束程序运行退出。在 ICETEK-CT

5、R 附带的小键盘上按下“ Enter ”键。9退出 CCS 。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 9 页 - - - - - - - - - . . 四、实验程序#include DSP281x_Device.h / DSP281x Headerfile Include File #include DSP281x_Examples.h / DSP281x Examples Include File Uint16 var1 = 0; Uint1

6、6 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 /南北红灯,东西黄灯

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

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

9、 char ledbuf8,ledx8; /二极管点阵显示用到unsigned char led40= 0 x7E,0 x81,0 x81,0 x7E,0 x00,0 x02,0 xFF,0 x00, 0 xE2,0 x91,0 x91,0 x8E,0 x42,0 x89,0 x89,0 x76, 0 x38,0 x24,0 x22,0 xFF,0 x4F,0 x89,0 x89,0 x71, 0 x7E,0 x89,0 x89,0 x72,0 x01,0 xF1,0 x09,0 x07, 0 x76,0 x89,0 x89,0 x76,0 x4E,0 x91,0 x91,0 x7E ; vo

10、id main(void) 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 9 页 - - - - - - - - - . . int nWork1,nWork2,nWork3,nWork4,k; int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus; unsigned int nScanCode; nTimeCount=0; bHold=0; /给各变量赋初值 uLight

11、StatusEW=uLightStatusSN=0; nNowStatus=0; nOldStatus=1; nOldTimeCount=0; /InitSysCtrl();/初始化 cpu InitPll(0 x0); /SYSCLKOUT=30 MHz /2=15MHz DINT;/关中断 InitPieCtrl();/初始化 pie 寄存器 CTRGR=0; / 初始化 ICETEK-CTR 具体说明见实验箱硬件编程CTRGR=0 x80; CTRGR=0; CTRLR=0; / 关闭东西方向的交通灯CTRLR=0 x40; / 关闭南北方向的交通灯CTRLR=0 x0c1; / 开启发

12、光二极管显示阵列for ( k=0;k8;k+ ) ledbufk=0 x0ff; / 显示为空白值为“ 1”时灭;值为“0”时点亮ledxk=(k=nStatusHold ) nNowStatus=nSaveStatus; nTimeCount=nSaveTimeCount; bHold=0; /根据计数值来确定状态else if ( nTimeCountnStatusNSGreenEWRed ) nNowStatus=statusNSGreenEWRed; else if ( nTimeCountnStatusNSFlashEWRed ) nNowStatus=statusNSFlashE

13、WRed; else if ( nTimeCountnStatusNSYellowEWRed ) nNowStatus=statusNSYellowEWRed; else if ( nTimeCountnStatusNSRedEWYellow ) nNowStatus=statusNSRedEWYellow; else if ( nTimeCountnStatusNSRedEWGreen ) nNowStatus=statusNSRedEWGreen; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - -

14、- - - - - - - - 第 4 页,共 9 页 - - - - - - - - - . . else if ( nTimeCountnStatusNSRedEWFlash ) nNowStatus=statusNSRedEWFlash; else if ( nTimeCountnStatusNSRedEWYellow1 ) nNowStatus=statusNSRedEWYellow; else if ( nTimeCount=0 & nWork20 & nWork30 & nWork40 ) /if和条件语句用来 uLightStatusSN=( (nWork1%nWork3)=0

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

16、NSRedEWGreen: nWork1=(nStatusNSRedEWGreen-nStatusNSRedEWYellow)/20; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 9 页 - - - - - - - - - . . if ( nWork10 ) nWork2=20-(nTimeCount-nStatusNSRedEWYellow)/nWork1; if ( bHold ) if ( nWork210 ) nTimeCount=nSta

17、tusNSRedEWYellow+nWork1*10; nWork2=10; if ( nOldTimeCount!=nWork2 ) nOldTimeCount=nWork2; SetLEDArray1(nWork2); break; case statusHold: nWork1=nStatusHold/20; if ( nWork10 ) nWork2=20-nTimeCount/nWork1; if ( nOldTimeCount!=nWork2 ) nOldTimeCount=nWork2; SetLEDArray1(nWork2); break; else if ( bHold )

18、 nSaveStatus=nNowStatus; nSaveTimeCount=nTimeCount; nNowStatus=statusHold; nTimeCount=0; if ( nSaveStatus=statusNSFlashEWRed | nSaveStatus=statusNSYellowEWRed ) /若突发情况,其状态为闪烁或黄灯,则直接将下一状态保存nSaveStatus=statusNSRedEWGreen; nSaveTimeCount=nStatusNSRedEWYellow; else if ( nSaveStatus=statusNSRedEWFlash |

19、名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 9 页 - - - - - - - - - . . nSaveStatus=statusNSRedEWYellow ) nSaveStatus=statusNSGreenEWRed; nSaveTimeCount=0; nOldStatus=nNowStatus; switch ( nNowStatus ) case statusNSGreenEWRed: uLightStatusEW=0 x24; uLi

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

21、EW=0 x12; uLightStatusSN=0 x64; SetLEDArray1(20); break; case statusNSRedEWGreen: uLightStatusEW=0 x09; uLightStatusSN=0 x64; SetLEDArray1(20); break; case statusNSRedEWFlash: uLightStatusEW=0 x09; uLightStatusSN=0 x64; SetLEDArray1(0); break; case statusHold: uLightStatusEW=0 x24; uLightStatusSN=0

22、x64; SetLEDArray1(20); break; CTRLR=uLightStatusEW; CTRLR=uLightStatusSN; / 设置交通灯状态RefreshLEDArray1(); / 刷新发光二极管显示nScanCode=CTRKEY; / 读键盘扫描码nScanCode&=0 x0ff; if ( nScanCode=SCANCODE_Enter ) break; /若按 ENTER ,则退出程序 EndICETEKCTR(); 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - -

23、- - - - - - - - - 第 7 页,共 9 页 - - - - - - - - - . . 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; nTim

24、eMS+; if ( nTimeMS=5 ) /来 5 次中断,才改变一次计数值 nTimeMS=0; nTimeCount+; nTimeCount%=nTotalTime; interrupt void XINT2_isr(void) /StopCpuTimer0(); PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; bHold=1; /StartCpuTimer0(); void Delay(unsigned int nDelay) int ii,jj,kk=0; for ( ii=0;iinDelay;ii+ ) for ( jj=0;jj64;jj+

25、) kk+; / 设置发光二极管显示内容void SetLEDArray1(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; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 9 页 - - - - - - - - - . . / 将缓存中点阵送发光二极管显示voi

26、d RefreshLEDArray1() int i; for ( i=0;i8;i+ ) CTRGR=ledxi; CTRLA=ledbufi; void EndICETEKCTR() int k; CTRLR=0; / 关闭东西方向的交通灯CTRLR=0 x40; / 关闭南北方向的交通灯CTRLR=0 x0c0; / 关闭发光二极管显示阵列k=CTRLCDCR; / 清除键盘缓冲区 五、实验结果 程序可以完成交通灯功能,顺序循环工作; 在中断信号到来后,进入特殊过程:当前计时如果大于10 改成 10;否则不变,等待状态切换;切换后进入四面进行状态, 计数 20s 后返回断点后的通行 (有两方向是绿灯 )状态;名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 9 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁