交通灯综合控制报告概要_第1页
交通灯综合控制报告概要_第2页
免费预览已结束,剩余19页可下载查看

下载本文档

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

文档简介

1、京江学院JINGJIANGOLLEGOF J I A N G SHIN I V E R S I T YDSP原理课程设计交通灯综合控制班级:_学号:_姓名:_2016 年 6 月目录1引言 . 42课程设计的目标 . 52.1课程设计的背景 .5.2.2设计要求5.2.3设计思路简介5.2.4交通灯控制要求 .6.2.5交通灯模拟6.2.6计时7.2.7紧急情况7.2.8程序设计7.3DSP 定时器的算法原理. 83.1CPU 定时器的原理 .8.3.2CPU 定时寄存器原理 .8.4系统程序设计 . 94.1流程图9.试验程序 .1.0.5心得体会 . 21引言随看计算机和任忌技术的总坛发展

2、数丫伯甘处理技术得到迅速闾发展 DSP (DigitalSig nal Process ing)是一门涉及许多学科和领域的新兴学科。数字信号处理是一种通过数字信号处理器來处理观实怡号的方法这战怡号由数十序列表示琏过去的一 I 哆仆时间里 数 字信号处理已经在通信等领域得到极为广泛的应用。本次设计是基于DSP 来实现交通灯的控制利用发光二级诗来模拟交逋信号利用数码管显示倒计时时间利用 TMS320VC5416DSP片上定时器定时产生时钟计数来模拟实际生活中十字路口交通灯。关键词:DSPTMS320VC5416 :交通灯;发壯一核青课程设计的目标课程设计的背景DSP 是一种将处理器的计算核心和一定

3、的外部设备集成在一个单片芯片上而构成的类似丁旦汁机的一种处理器芯氏 不同丁一般单片机的是 由丁- DSP 采用了特殊的总线结构和嗥系 刚 K 它在拭彳丁数丫伯号处壬讣算方帀兵仁更高的性色 数了皆号处珅在遽住柱处理淬领域得到极为广泛帕应.用门-字路口交逋灯生我们泊口常牛话屮躺处叮见 它为繁忙曲道路交逋哎人们的安全提哄较好的像障.热両 我忙只蚓道交逸灯在纤、5t绿二色之间交替更换來控制人丫流亘 去;C 其内那的工口京珅.及软硬件阳殳计了解很少 另业要通过此次简单道路交通灯控制系统软硬件设计来进一步研究交通灯的内部结构。最重要的是将学习到的 DSP 系统的组成与原理应用到交通灯的设计当中。通过DSP

4、 技术及应用课程设计,是学生能够将学到的DSP 系统的组成与原理用到具体的实际系统中, 加深对 DSP 系统的理解,是将该门课程与实际问题相连接的关键步骤。 通过课程设计,能够提高学生分析问题,解决问题,从而运用所学知识解决实际问题的能力,并培养基本的、良好的软硬件射进能力。设计要求利用 C 语言在 CCS 环境中编写一个交通灯综合控制程序,并能通过硬件仿真对所编写的程序及其应用性、可行性进行验证。设计思路简介在 TMS320C54X 系统开发环境 CCS( Code Composer Studio)下对交通灯综合控制的实 现原理进行讨论。通过实验仿真,可以在硬件实验箱上看到对交通灯的模拟控制

5、。交通等综合控制的控制原理交通灯控制要求利用 ICETEK-S60 实验箱提供的设备,设计模拟实际生活中十字路口交通灯控制的程 序。要求如下:- 交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:绿 灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。-计时显示:液晶屏幕上8X8 点阵显示 0-9 计数。- 正常交通控制信号顺序:正常交通灯信号自动变换: 南北方向绿灯,东西红灯 (20 秒 )。 南北方向绿灯闪烁。 南北方向黄灯。 南北方向红灯,东西方向黄灯。 东西方向绿灯 (20 秒 ) 。 东西方向绿灯闪烁。 东西方向黄灯。 返回循环控制。- 紧急情况

6、处理:模仿紧急情况 (重要车队通过、急救车通过等 )发生时,交通警察手动 控制 当任意方向通行剩余时间多于 5 秒,将时间改成 5 秒。 正常变换到四面红灯 (20 秒 )。 直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态 ) 。交通灯模拟利用 ICETEK-CTR 上的一组发光二极管 (共 12 只,分为东西南北四组、红黄绿三色 ) 的亮灭实现交通信号的模拟。#define CTRLCDCMDR *(int *)0 x108001#define CTRKEY *(int *)0 x108001#define CTRLCDCR *(int *)0 x108002#define C

7、TRCLKEY *(int *)0 x108002#define CTRLCDLCR *(int *)0 x108003#define CTRLCDRCR *(int *)0 x108004#define CTRLA *(int *)0 x108005#define CTRLR *(int *)0 x108007计时使用 TMS320VC5416DSP 片上定时器,定时产生时钟计数,再利用此计数对应具体时 间。定时器控制及中断编程可参考实验3.3 程序。紧急情况利用 ICETEK-CTR 上键盘产生外中断,中断正常信号顺序,模拟突发情况。 外中断编程控制可参考实验 3.4 程序。程序设计根据设

8、计要求,由于控制是由不同的各种状态按顺序发生的,我们可以采用状态机制 控制方法来解决此问题。这种方法是:首先列举所有可能发生的状态;然后将这些状态编 号,按顺序产生这些状态;状态延续的时间用程序控制。对于突发情况,可采用在正常顺序的 控制中插入特殊控制序列的方式完成。时钟计数:采用 250ms 一次中断进行累加计数。表格 1状态编号信号灯状态状态定义保持时间(计数值,起始 时间,结束时间)计 数 显示1南北绿灯,东西红灯statusNSGreenEWRed20 秒(160,0, 159)20-02南北绿灯闪烁,东西红灯statusNSFIashEWRed6 秒(24,160, 183)03南北

9、黄灯,东西红灯statusNSYellowEWRed4 秒(16,184, 199)204南北红灯,东西黄灯statusNSRedEWYellow4 秒(16,200, 215)205南北红灯,东西绿灯statusNSRedEWGreen20 秒(160,216,375)20-16南北红灯,东西绿灯闪烁statusNSRedEWFlash6 秒(24, 376, 399)07南北红灯,东西黄灯statusNSRedEWYellow4 秒(16, 400, 415)208南北黄灯,东西红灯statusNSYellowEWRed4 秒(16, 416, 431)20*南北红灯,东西红灯Status

10、Hold20 秒(160, 0, 159)20-1其中,正常顺序每 112 秒(计数值 448)为一个循环,状态“ *”为非顺序状态。 这样,只要根据计数值就可确定当前状态,根据状态再分情况处理。对于计数显示,当处于状态 1、5、*中时需要进行倒计时,需 要 计 算 在 此 状 态 中 的 计 数值增量,根据增量判断是否更新计数显示。DSP定时器的算法原理CPU 定时器的原理本次设计主要用的是 F2812 器件上的 3 个 32 位 CPU 定时器(TIMER0/1/2 )。其中 定时器 1和定时器 2 预留给实时操作系统使用(如 DSP-BIOS ),只有定时器 0 用户可以在 应用程序中使

11、用。定时器功能框图如下:CPU 定时寄存器原理定时器在工作过程中, 首先把周期寄存器(PRDH:PRD )的值装入 32 位计数寄存器。 计数寄存器根据 SYSCLKOUT 时钟递减计数。当计数寄存器等于 0 时,定时器中断输出产 生一个中断脉冲。定时器计数寄存器(TIMERxTIM 和 TIMERxTIMH )定时器控制寄存器(TIMERxTCR):使能中断,定时功能;定时器周期寄存器(TIMERxPRD ):符合条件则周期性重新装载并保存周期值定时器预定标寄存器(TIMERxTPR 和 TIMERxTPRH ):控制多久减 1。系统程序设计流程图图 0-1 实验程序流程图图 0-2 设计总

12、流程图设计总流程图试验程序#in elude sea ncode.h#defi ne SPSA0 *(u nsig ned int *)0 x38#defi ne SPSD0 *(u nsig ned int *)0 x39#defi ne REGISTERCLKMD (*(u nsig ned int *)0 x58)#define TIM*(int *)0 x24#define PRD*(int *)0 x25#define TCR*(int *)0 x26#define IMR*(int *)0 x0/IM R 中断屏蔽寄存器#define IFR*(int *)0 x1/IFR 中断标

13、志寄存器#define PMST*(int *)0 x1d/PMST 处理器模式状态寄存器(地址 1dh)#define nStatusNSGreenEWRed 160 / 状态 1 计数结束时间#define nStatusNSFlashEWRed 184#define nStatusNSYellowEWRed 200#define nStatusNSRedEWYellow 216#define nStatusNSRedEWGreen 376#define nStatusNSRedEWFlash 400#define nStatusNSRedEWYellow1 416#define nSta

14、tusNSYellowEWRed1 432#define nTotalTime 448#define nStatusHold 160#define statusNSGreenEWRed 0#define statusNSFlashEWRed 1#define statusNSYellowEWRed 2#define statusNSRedEWYellow 3#define statusNSRedEWGreen 4#define statusNSRedEWFlash 5#define statusHold 6#define LCDDELAY 1#define LCDCMDTURNON 0 x3f

15、#define LCDCMDTURNOFF 0 x3e#define LCDCMDSTARTLINE 0 xc0#define LCDCMDPAGE 0 xb8#define LCDCMDVERADDRESS 0 x40ioport unsigned int port3004;/ CTR 扩展寄存器定义ioport unsigned int port8000;ioport unsigned int port8001; /8001 :读键盘扫描值,写液晶控制寄存器地址ioport unsigned int port8002; /8002 :液晶控制寄存器地址ioport unsigned int

16、 port8003; /8003,8004:液晶显示数据寄存器地址ioport unsigned int port8004; /ioport unsigned int port8005; /8005 :发光二极管显示阵列控制寄存器地址ioport unsigned int port8007; /8007 :发光二极管显示阵列控制寄存器地址 #define CTRGRport8000#define CTRLCDCMDR port8001#define CTRKEYport8001#define CTRCLKEYport8002#define CTRLCDCRport8002#define CTR

17、LCDLCRport8003#define CTRLCDRCRport8004#define CTRLAport8005#define CTRLRport8007void InitDSP(); /void 表示此函数为空类型,执行此函数后不产生函数值 void InitTimer();void InitICETEKCTR();void interrupt time(void);void interrupt xint2(void); / XINT2 中断服务程序void SetLEDArray(int nNumber);/ 修改显示内容void RefreshLEDArray(); / 刷新显示

18、void EndICETEKCTR();void TurnOnLCD();void LCDCLS();void Delay(unsigned int nDelay);unsigned int uWork,nTimeCount;unsigned int uLightStatusEW,uLightStatusSN;unsigned int bHold;unsigned 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 x4

19、2,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;unsigned char ledkey108=0 x00,0 x00,0 x7C,0 x82,0 x82,0 x82,0 x7C,0 x00, /00 x00,0 x00,0 x00,0 x84,0 xFE,0 x80,0 x00,0 x00, /10 x00,0 x

20、00,0 x84,0 xC2,0 xA2,0 x92,0 x8C,0 x00, /20 x00,0 x00,0 x44,0 x92,0 x92,0 x92,0 x6C,0 x00,0 x00,0 x00,0 x30,0 x28,0 x24,0 xFE,0 x20,0 x00,0 x00,0 x00,0 x4E,0 x92,0 x92,0 x92,0 x62,0 x00,0 x00,0 x00,0 x7C,0 x92,0 x92,0 x92,0 x64,0 x00,0 x00,0 x00,0 x02,0 xC2,0 x32,0 x0A,0 x06,0 x00,0 x00,0 x00,0 x6C,

21、0 x92,0 x92,0 x92,0 x6C,0 x00,0 x00,0 x00,0 x4C,0 x92,0 x92,0 x92,0 x7C,0 x00;main()int nWork1,nWork2,nWork3,nWork4,tKey;int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus; unsigned intnScanCode;nTimeCount=0; bHold=0; uLightStatusEW=uLightStatusSN=0;nNowStatus=0; nOldStatus=1; nOldTi

22、meCount=0;InitDSP();/初始化 DSP,设置运行速度InitICETEKCTR(); / 初始化显示 /控制模块 InitTimer();/ 设置定时器中断/ 根据计时器计数切换状态/ 根据状态设置计数和交通灯状态while ( 1 )if ( bHold & nNowStatus=statusHold )if ( nTimeCount=nStatusHold )nNowStatus=nSaveStatus; nTimeCount=nSaveTimeCount; bHold=0;if ( nNowStatus=nOldStatus )switch ( nNowStat

23、us )case statusNSFlashEWRed:nWork1=nTimeCount-nStatusNSGreenEWRed;nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed;nWork3=nWork2/3;nWork4=nWork3/2;if ( nWork1=0 & nWork20 & nWork30 & nWork40 )uLightStatusSN=( (nWork1%nWork3)=nWork4 )?(0 x49):(0 x40);/满足条件, 取 0 x49 地elseif(nNowStatus=statu

24、sNSGreenEWRed;elseif(nNowStatus=statusNSFlashEWRed;elseif(nNowStatus=statusNSYellowEWRed;elseif(nNowStatus=statusNSRedEWYellow;elseif(nNowStatus=statusNSRedEWGreen;elseif(nNowStatus=statusNSRedEWFlash;elseif(nNowStatus=statusNSRedEWYellow;elseif(nNowStatus=statusNSYellowEWRed;nTimeCountnStatusNSGree

25、nEWRednTimeCountnStatusNSFlashEWRednTimeCountnStatusNSYellowEWRednTimeCountnStatusNSRedEWYellownTimeCountnStatusNSRedEWGreennTimeCountnStatusNSRedEWFlashnTimeCountnStatusNSRedEWYellow1nTimeCount=0 & nWork20 & nWork30 & nWork40 )uLightStatusEW=( (nWork1%nWork3)0 )nWork2=20-nTimeCount/nWor

26、k1;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 ( nWork

27、210 )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 ( bHo

28、ld )nSaveStatus=nNowStatus;nSaveTimeCount=nTimeCount;nNowStatus=statusHold;nTimeCount=0;if ( nSaveStatus=statusNSFlashEWRed |nSaveStatus=statusNSYellowEWRed )nSaveStatus=statusNSRedEWGreen;nSaveTimeCount=nStatusNSRedEWYellow;else if ( nSaveStatus=statusNSRedEWFlash |nSaveStatus=statusNSRedEWYellow )

29、nSaveStatus=statusNSGreenEWRed;nSaveTimeCount=0;nOldStatus=nNowStatus;switch ( nNowStatus )case statusNSGreenEWRed: uLightStatusEW=0 x24; uLightStatusSN=0 x49;SetLEDArray(20);break;case statusNSFlashEWRed: uLightStatusEW=0 x24; uLightStatusSN=0 x49;SetLEDArray(0);break;case statusNSYellowEWRed: uLig

30、htStatusEW=0 x24; uLightStatusSN=0 x52;SetLEDArray(20);break;case statusNSRedEWYellow: uLightStatusEW=0 x12; uLightStatusSN=0 x64;SetLEDArray(20);break;case statusNSRedEWGreen: uLightStatusEW=0 x09; uLightStatusSN=0 x64;SetLEDArray(20);break;case statusNSRedEWFlash: uLightStatusEW=0 x09; uLightStatu

31、sSN=0 x64;SetLEDArray(0);break;case statusHold:uLightStatusEW=0 x24; uLightStatusSN=0 x64;SetLEDArray(20);break;CTRLR=uLightStatusEW; CTRLR=uLightStatusSN; / 设置交通灯状态RefreshLEDArray(); / 刷新发光二极管显示 nScanCode=port8001; / 读键盘扫描码nScanCode&=0 x0ff;tKey=CTRCLKEY;if ( nScanCode=SCANCODE_9 ) break;EndICE

32、TEKCTR();exit(0);/ 定时器中断服务程序,进行时钟计数 void interrupt time(void)nTimeCount+;nTimeCount%=nTotalTime;/ 设置发光二极管显示内容void SetLEDArray(int nNumber)int i,ShowNumber;ShowNumber=nNumber/2; if(ShowNumber9) ShowNumber=0;CTRLCDCMDR=LCDCMDPAGE; / 设置操作页 =0 Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMD

33、VERADDRESS; / 起始列 =0 Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( i=0;i8;i+ )CTRLCDLCR=ledkeyShowNumberi; Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);/ 将缓存中点阵送发光二极管显示void RefreshLEDArray()int i;for ( i=0;i8;i+ )CTRGR=ledxi;CTRLA=ledbufi;/初始化 DSP,设置运行速度=8MHzvoid InitDSP()REGISTERCLKMD=0; / 复位 PLLR

34、EGISTERCLKMD=0 x1007; / 速度设置 =16MHz/ 设置定时器参数、允许中断void InitTimer()unsigned int k;asm( ssbx INTM); / 关中断,进行关键设置时不许打扰/ 设置通用定时器k=PMST;/ 设置 PMST 寄存器PMST =k&0 xff;/ 中断向量表起始地址=80HIMR = 0 x0c;/ 使能 TINTTCR = 0 x41f; / 预分频系数为 16TIM = 0; / 时钟计数器清 0PRD = 0 x0f423; / 周期寄存器为 0ffHTCR = 0 x42f; / 复位、启动IFR = 0 x

35、0c;/ 清中断标志位port3004=0; / 使能 XINT2asm( rsbx INTM); / 开中断/ 初始化 ICETEK-CTR 板上设备void InitICETEKCTR()int k;CTRGR=0;CTRGR=0 x80;CTRGR=0;CTRLR=0;CTRLR=0 x40;CTRLR=0 x0c1;CTRLR=0 xc8; for( k=0;k8;k+ )ledbufk=0 x0ff; ledxk=(k4);CTRLCDCR=0;/ 初始化 ICETEK-CTR/ 关闭东西方向的交通灯/ 关闭南北方向的交通灯/ 开启发光二极管显示阵列/使能外部中断k=CTRCLKEY;TurnOnLCD();LCDCLS();/ 清除键盘缓冲区/ 打开显示/ 清除显示内存/ 显示为空白/ 生成显示列控制字CTRLCDCMDR=LCDCMDSTARTLINE; /

温馨提示

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

评论

0/150

提交评论