



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选文库DSP 原理及应用课程设计交通灯综合控制学院电气信息工程专业电子信息工程班级学号分组成员指导教师2013年 6月精选文库目 录1引言 .12课程设计的目标 .22.1课程设计的背景 .22.2设计要求 .22.3设计思路简介 .22.4交通灯控制要求 .32.5交通灯模拟 .32.6计时 .42.7紧急情况 .42.8程序设计 .43DSP定时器的算法原理 . .63.1CPU 定时器的原理 .63.2CPU 定时寄存器原理 .64系统程序设计 .74.1流程图 .74.2试验程序 .85心得体会 .19精选文库1 引言随着计算机和信息技术的飞速发展数字信号处理技术得到迅速的发展。DS
2、P (Digital Signal Processing)是一门涉及许多学科和领域的新兴学科。数字信号处理是一种通过数字信号处理器来处理现实信号的方法这些信号由数字序列表示。在过去的二十多年时间里数字信号处理已经在通信等领域得到极为广泛的应用。本次设计是基于DSP 来实现交通灯的控制利用发光二级管来模拟交通信号利用数码管显示倒计时时间利用 TMS320VC5416DSP 片上定时器定时产生时钟计数来模拟实际生活中十字路口交通灯。关键词: DSPTMS320VC5416;交通灯;发光二极管精选文库2 课程设计的目标2.1课程设计的背景DSP 是一种将处理器的计算核心和一定的外部设备集成在一个单片
3、芯片上而构成的类似于单片机的一种处理器芯片。不同于一般单片机的是由于 DSP采用了特殊的总线结构和体系因此它在执行数字信号处理计算方面具有更高的性能。数字信号处理已经在通信、信号处理等领域得到极为广泛的应用。十字路口交通灯在我们的日常生活中随处可见它为繁忙的道路交通及人们的安全提供了较好的保障。 然而我们只知道交通灯在红、 黄、绿三色之间交替更换来控制人车流量去对其内部的工作原理及软硬件的设计了解很少因此要通过此次简单道路交通灯控制系统软硬件设计来进一步研究交通灯的内部结构。最重要的是将学习到的DSP 系统的组成与原理应用到交通灯的设计当中。通过 DSP 技术及应用课程设计,是学生能够将学到的
4、DSP 系统的组成与原理用到具体的实际系统中,加深对DSP 系统的理解,是将该门课程与实际问题相连接的关键步骤。通过课程设计,能够提高学生分析问题,解决问题,从而运用所学知识解决实际问题的能力,并培养基本的、良好的软硬件射进能力。2.2设计要求利用 C 语言在 CCS 环境中编写一个交通灯综合控制程序,并能通过硬件仿真对所编写的程序及其应用性、可行性进行验证。2.3设计思路简介在 TMS320C54x 系统开发环境 CCS(Code Composer Studio)下对交通灯综合控制的实现原理进行讨论。 通过实验仿真, 可以在硬件实验箱上看到对交通灯的模拟控制。精选文库交通等综合控制的控制原理
5、2.4交通灯控制要求利用 ICETEK-S60 实验箱提供的设备,设计模拟实际生活中十字路口交通灯控制的程序。要求如下:- 交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:绿灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。- 计时显示:液晶屏幕上 8×8 点阵显示 0-9 计数。- 正常交通控制信号顺序:正常交通灯信号自动变换: 南北方向绿灯,东西红灯(20 秒)。 南北方向绿灯闪烁。 南北方向黄灯。 南北方向红灯,东西方向黄灯。 东西方向绿灯 (20 秒)。 东西方向绿灯闪烁。 东西方向黄灯。 返回循环控制。- 紧急情况处理:模仿紧急情况
6、 (重要车队通过、急救车通过等 )发生时,交通警察手动控制 当任意方向通行剩余时间多于 10 秒,将时间改成 10 秒。 正常变换到四面红灯 (20 秒)。 直接返回正常信号顺序的下一个通行信号 (跳过闪烁绿灯、黄灯状态 )。2.5交通灯模拟利用 ICETEK-CTR上的一组发光二极管 (共 12 只,分为东西南北四组、红黄绿三色 )的亮灭实现交通信号的模拟。发光二极管的控制方法可参见第二部分、第二章、二、2。精选文库2.6计时使用 TMS320VC5416DSP 片上定时器,定时产生时钟计数,再利用此计数对应具体时间。定时器控制及中断编程可参考实验3.3 程序。2.7紧急情况利用 ICETE
7、K-CTR上键盘产生外中断, 中断正常信号顺序, 模拟突发情况。外中断编程控制可参考实验3.4 程序。2.8程序设计根据设计要求, 由于控制是由不同的各种状态按顺序发生的, 我们可以采用状态机制控制方法来解决此问题。 这种方法是: 首先列举所有可能发生的状态; 然后将这些状态编号,按顺序产生这些状态; 状态延续的时间用程序控制。 对于突发情况, 可采用在正常顺序的控制中插入特殊控制序列的方式完成。时钟计数:采用 250ms 一次中断进行累加计数。表格1计状保持时间 (计数值,起始数态信号灯状态状态定义编时间,结束时间 )显号示1南北绿灯,东西红灯statusNSGreenEWRed20 秒 (
8、160, 0,159)20-02南北绿灯闪烁,东西红灯statusNSFlashEWRed6秒 (24,160,183)03南北黄灯,东西红灯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南
9、北黄灯,东西红灯statusNSYellowEWRed4 秒 (16,416,431)20精选文库*南北红灯,东西红灯StatusHold20 秒 (160, 0,159)20-1其中,正常顺序每112 秒(计数值 448)为一个循环,状态“ * ”为非顺序状态。这样,只要根据计数值就可确定当前状态,根据状态再分情况处理。对于计数显示,当处于状态 1、5、* 中时需要进行倒计时,需要计算在此状态中的计数值增量,根据增量判断是否更新计数显示。精选文库3DSP 定时器的算法原理3.1CPU 定时器的原理本次设计主要用的是F2812 器件上的3 个32 位CPU 定时器( TIMER0/1/2 )。
10、其中定时器1 和定时器2 预留给实时操作系统使用(如DSP-BIOS),只有定时器 0 用户可以在应用程序中使用。定时器功能框图如下:3.2CPU 定时寄存器原理定时器在工作过程中,首先把周期寄存器(PRDH:PRD)的值装入32 位计数寄存器。计数寄存器根据SYSCLKOUT 时钟递减计数。当计数寄存器等于0 时,定时器中断输出产生一个中断脉冲。( 1)定时器计数寄存器( TIMERxTIM 和 TIMERxTIMH )( 2)定时器控制寄存器( TIMERxTCR ):使能中断,定时功能;( 3)定时器周期寄存器( TIMERxPRD ):符合条件则周期性重新装载并保存周期值( 4)定时器
11、预定标寄存器( TIMERxTPR 和 TIMERxTPRH ):控制多久减 1。精选文库4 系统程序设计4.1流程图图 4-1 实验程序流程图精选文库开始初始化 DSP全部红灯 ,延时 1 秒南北绿灯、东西红灯,延时20 秒南北绿灯闪3 次、东西红灯南北绿灯闪3 次、东西红灯南北黄灯、东西红灯,延时 3秒南北红灯、东西绿灯,延时 20 秒南北 红灯、东西绿灯闪3 次南北红灯、东西黄灯,延时 3秒图 4-2 设计总流程图设计总流程图4.2试验程序#include "scancode.h"#define SPSA0 *(unsigned int *)0x38#define S
12、PSD0 *(unsigned int *)0x39#define REGISTERCLKMD (*(unsigned int *)0x58)#defineTIM*(int *)0x24#definePRD*(int *)0x25#defineTCR*(int *)0x26#defineIMR*(int *)0x0/IM R 中断屏蔽寄存器精选文库#defineIFR*(int *)0x1/IFR 中断标志寄存器#definePMST*(int *)0x1d/PMST 处理器模式状态寄存器 (地址 1dh)#define nStatusNSGreenEWRed 160 /状态 1 计数结束时间
13、#define nStatusNSFlashEWRed 184#define nStatusNSYellowEWRed 200#define nStatusNSRedEWYellow 216#define nStatusNSRedEWGreen 376#define nStatusNSRedEWFlash 400#define nStatusNSRedEWYellow1 416#define nStatusNSYellowEWRed1 432#define nTotalTime 448#define nStatusHold 160#define statusNSGreenEWRed 0#def
14、ine statusNSFlashEWRed 1#define statusNSYellowEWRed 2#define statusNSRedEWYellow 3#define statusNSRedEWGreen 4#define statusNSRedEWFlash 5#define statusHold 6#define LCDDELAY 1#define LCDCMDTURNON 0x3f#define LCDCMDTURNOFF 0x3e#define LCDCMDSTARTLINE 0xc0#define LCDCMDPAGE 0xb8#define LCDCMDVERADDRE
15、SS 0x40ioport unsigned int port3004;/ CTR 扩展寄存器定义ioport unsigned int port8000;ioport unsigned int port8001;/8001:读键盘扫描值,写液晶控制寄存器地址ioport unsigned int port8002;/8002:液晶控制寄存器地址ioport unsigned int port8003;/8003,8004:液晶显示数据寄存器地址ioport unsigned int port8004;/ioport unsigned int port8005;/8005:发光二极管显示阵列控
16、制寄存器地址ioport unsigned int port8007;/8007:发光二极管显示阵列控制寄存器地址#define CTRGRport8000#define CTRLCDCMDRport8001#define CTRKEYport8001#define CTRCLKEYport8002#define CTRLCDCRport8002#define CTRLCDLCRport8003#define CTRLCDRCRport8004#define CTRLAport8005精选文库#define CTRLRport8007void InitDSP();/void 表示此函数为空类型
17、, 执行此函数后不产生函数值void InitTimer();void InitICETEKCTR();void interrupt time(void);void interrupt xint2(void);/ XINT2 中断服务程序void SetLEDArray(int nNumber);/ 修改显示内容void RefreshLEDArray();/ 刷新显示void EndICETEKCTR();void TurnOnLCD();void LCDCLS();void Delay(unsigned int nDelay);unsigned int uWork,nTimeCount;u
18、nsigned int uLightStatusEW,uLightStatusSN;unsigned int bHold;unsigned 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,0
19、x91,0x7E;unsigned char ledkey108=0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00, /0 0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00, /1 0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00, /2 0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00, 0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00, 0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00, 0x00,0x00,0x
20、7C,0x92,0x92,0x92,0x64,0x00, 0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00, 0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00, 0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00;main()int nWork1,nWork2,nWork3,nWork4,tKey;int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus;unsigned int nScanCode;nTimeCount=0; bH
21、old=0;精选文库uLightStatusEW=uLightStatusSN=0;nNowStatus=0; nOldStatus=1; nOldTimeCount=0;InitDSP();/ 初始化 DSP,设置运行速度InitICETEKCTR();/ 初始化显示 /控制模块InitTimer();/ 设置定时器中断/ 根据计时器计数切换状态/ 根据状态设置计数和交通灯状态while ( 1 )if ( bHold && nNowStatus=statusHold )if ( nTimeCount>=nStatusHold )nNowStatus=nSaveStat
22、us;nTimeCount=nSaveTimeCount;bHold=0;elseif(nTimeCount<nStatusNSGreenEWRed)nNowStatus=statusNSGreenEWRed;elseif(nTimeCount<nStatusNSFlashEWRed)nNowStatus=statusNSFlashEWRed;elseif(nTimeCount<nStatusNSYellowEWRed)nNowStatus=statusNSYellowEWRed;elseif(nTimeCount<nStatusNSRedEWYellow)nNowSt
23、atus=statusNSRedEWYellow;elseif(nTimeCount<nStatusNSRedEWGreen)nNowStatus=statusNSRedEWGreen;elseif(nTimeCount<nStatusNSRedEWFlash)nNowStatus=statusNSRedEWFlash;elseif(nTimeCount<nStatusNSRedEWYellow1)nNowStatus=statusNSRedEWYellow;elseif(nTimeCount<nStatusNSYellowEWRed1)nNowStatus=statu
24、sNSYellowEWRed;if ( nNowStatus=nOldStatus )switch ( nNowStatus )case statusNSFlashEWRed:nWork1=nTimeCount-nStatusNSGreenEWRed;nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed; nWork3=nWork2/3;精选文库nWork4=nWork3/2;if(nWork1>=0&&nWork2>0&&nWork3>0&&nWork4>0 )uLightSta
25、tusSN=( (nWork1%nWork3)<=nWork4 )?(0x49):(0x40);/满足条件,取 0x49 地址的值,否则,取 0x48 的值 break;case statusNSRedEWFlash:nWork1=nTimeCount-nStatusNSRedEWGreen;nWork2=nStatusNSRedEWYellow1-nStatusNSRedEWFlash;nWork3=nWork2/3;nWork4=nWork3/2;if(nWork1>=0&&nWork2>0&&nWork3>0&&nW
26、ork4>0 )uLightStatusEW=( (nWork1%nWork3)<=nWork4 )?(0x09):(0x00); break;case statusNSGreenEWRed:nWork1=nStatusNSGreenEWRed/20;if ( nWork1>0 )nWork2=20-nTimeCount/nWork1;if ( bHold )if ( nWork2>10 )nTimeCount=nWork1*10;nWork2=10;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;SetLEDArray
27、(nWork2);break;case statusNSRedEWGreen:nWork1=(nStatusNSRedEWGreen-nStatusNSRedEWYellow)/20; if ( nWork1>0 )精选文库nWork2=20-(nTimeCount-nStatusNSRedEWYellow)/nWork1;if ( bHold )if ( nWork2>10 )nTimeCount=nStatusNSRedEWYellow+nWork1*10;nWork2=10;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;Se
28、tLEDArray(nWork2);break;case statusHold:nWork1=nStatusHold/20;if ( nWork1>0 )nWork2=20-nTimeCount/nWork1;if ( nOldTimeCount!=nWork2 )nOldTimeCount=nWork2;SetLEDArray(nWork2);break;elseif ( bHold )nSaveStatus=nNowStatus;nSaveTimeCount=nTimeCount;nNowStatus=statusHold;nTimeCount=0;if ( nSaveStatus=
29、statusNSFlashEWRed | nSaveStatus=statusNSYellowEWRed )精选文库nSaveStatus=statusNSRedEWGreen;nSaveTimeCount=nStatusNSRedEWYellow;else if ( nSaveStatus=statusNSRedEWFlash | nSaveStatus=statusNSRedEWYellow )nSaveStatus=statusNSGreenEWRed;nSaveTimeCount=0;nOldStatus=nNowStatus;switch ( nNowStatus )case sta
30、tusNSGreenEWRed: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; u
31、LightStatusSN=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;精选文库CTR
32、LR=uLightStatusEW; CTRLR=uLightStatusSN;/ 设置交通灯状态RefreshLEDArray(); / 刷新发光二极管显示nScanCode=port8001;/ 读键盘扫描码nScanCode&=0x0ff;tKey=CTRCLKEY;if ( nScanCode=SCANCODE_9 )break;EndICETEKCTR();exit(0);/ 定时器中断服务程序,进行时钟计数void interrupt time(void)nTimeCount+;nTimeCount%=nTotalTime;/ 设置发光二极管显示内容void SetLEDA
33、rray(int nNumber)int i,ShowNumber;ShowNumber=nNumber/2;if(ShowNumber>9)ShowNumber=0;CTRLCDCMDR=LCDCMDPAGE;/ 设置操作页 =0Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS;/ 起始列 =0Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( i=0;i<8;i+ )CTRLCDLCR=ledkeyShowNumberi;Delay(LCDD
34、ELAY);CTRLCDCR=0;Delay(LCDDELAY);/ 将缓存中点阵送发光二极管显示 void RefreshLEDArray()int i;精选文库for ( i=0;i<8;i+ )CTRGR=ledxi;CTRLA=ledbufi;/ 初始化 DSP,设置运行速度 =8MHz void InitDSP()REGISTERCLKMD=0; / 复位 PLL REGISTERCLKMD=0x1007; / 速度设置 =16MHz/ 设置定时器参数、允许中断void InitTimer()unsigned int k;asm("ssbxINTM");/
35、关中断,进行关键设置时不许打扰/ 设置通用定时器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
36、 k;CTRGR=0;/ 初始化 ICETEK-CTRCTRGR=0x80;CTRGR=0;CTRLR=0;/ 关闭东西方向的交通灯CTRLR=0x40;/ 关闭南北方向的交通灯CTRLR=0x0c1; / 开启发光二极管显示阵列CTRLR=0xc8;/使能外部中断for ( k=0;k<8;k+ )ledbufk=0x0ff;/ 显示为空白精选文库ledxk=(k<<4);/ 生成显示列控制字k=CTRCLKEY;/ 清除键盘缓冲区TurnOnLCD();/ 打开显示LCDCLS();/ 清除显示内存CTRLCDCMDR=LCDCMDSTARTLINE;/ 设置显示起始行CT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 碳酸饮料市场季节性变化分析考核试卷
- 网络教具开发考核试卷
- 电池小型化技术考核试卷
- 2025年租金分期付款的合同条款
- 2025天津租房合同简化版模板
- 2025汽车买卖合同书范本
- 2025新合同法关于每年工作时间的规定
- 湖北省“黄鄂鄂”2025年高三下学期4月联考数学
- 二零二五版夫妻婚姻协议书范例
- 商场店面承包协议合同书二零二五年
- 临床检验试题及答案
- 销售预包装食品经营者备案信息采集表
- 付款协议合同范本格式样本案例
- 幼儿园大班主题音乐《想拍就拍》课件
- 西方哲学智慧2024-西方哲学智慧超星尔雅答案
- 《物业保安培训》课件
- 医疗机构安全生产奖励与举报制度
- 档案管理方案
- 2024至2030年中国手打钉枪数据监测研究报告
- 2024年全国数控车工高级技师技能考试题库(含答案)
- 《PBR次世代游戏建模技术》(微课版)课件 邱雅慧 3 高模制作、4 UV展开
评论
0/150
提交评论