77范文网 - 专业文章范例文档资料分享平台

交通灯综合控制1

来源:网络收集 时间:2018-11-01 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

4.启动Code Composer Studio2.21: 选择菜单Debug->Reset CPU。 5.编译并下载已编好的程序。 6.运行程序观察结果。 7.突发事件控制。

在ICETEK-CTR附带的小键盘上按下除“Enter“键外的按键,观察信号是否满足要求。

8.结束程序运行退出。

在ICETEK-CTR附带的小键盘上按下“Enter“键。 9.退出CCS

六、系统功能,参数指标

(1)利用ICETEK-EDU实验箱提供的设备,设计模拟实际生活中十字路口交通灯控制,具体要求如下:

交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:绿灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。 计时显示:8*8点阵显示两位计数,为倒计时,每秒改变计数显示。 正常交通灯信号自动变换: 1南北方向绿灯,东西红灯(20秒) 2南北方向绿灯闪烁。 3南北方向黄灯

4南北方向红灯,东西方向黄灯 5东西方向绿灯(20秒) 6东西方向绿灯闪烁 7东西方向黄灯 8返回1循环控制 紧急情况;

利用ICETEK-CTR上键盘产生外中断,中断正常信号顺序,模拟突发情况。 (2)交通灯模拟

利用ICETEK—CTR上的一组发光二极管(共12只,分东西南北四组,

6

红绿三色)的亮灭实现交通信号的模拟。 (3)计时显示

利用ICETEK-CTR的发光二极管显示阵列模拟显示。 (4)计时

使用TMS320F2812DSP片上定时器,定时产生时钟计数器,再利用此计数对应具体时间

(5)紧急情况

利用ICETEK-CTR上键盘产生外中断,中断正常信号顺序,模拟突法情况。

七、设计总结

此次课程设计,主要学习交通灯的控制。了解并掌握了TMS320VC5509DST定时器、外中断的使用和程序编写。总体设计与模块设计要分配均衡。修改程序提高交通灯处理突法事件的能力和运行速度是重点也是难点。

八、参考文献

[1]胡庆名、李小刚、吴钰淳 EMS320C55X DSP原理、应用和设计 北京机械出版社,[M]2005

[2]陈武凡.小波分析及其在图像处理中的应用.科学出版社,[M]2002.01 [3]DSP技术实验指导书 仰恩大学实验中心电子信息教研室 编, 2008.9 [4]汪春梅, 孙洪波, 任治刚. TMS320C5000 系列 DSP 系统设计与开发实例. 北京: 电子工业出版社, [M]2004.

九、程序

#include \

#include \ #include \

#define nStatusNSGreenEWRed 160 #define nStatusNSFlashEWRed 184 #define nStatusNSYellowEWRed 200 #define nStatusNSRedEWYellow 216 #define nStatusNSRedEWGreen 376 #define nStatusNSRedEWFlash 400 #define nStatusNSRedEWYellow1 416 #define nStatusNSYellowEWRed1 432 #define nTotalTime 448

7

#define nStatusHold 160

#define statusNSGreenEWRed 0 #define statusNSFlashEWRed 1 #define statusNSYellowEWRed 2 #define statusNSRedEWYellow 3 #define statusNSRedEWGreen 4 #define statusNSRedEWFlash 5 #define statusHold 6 void InitDSP(); void InitTimer();

void InitICETEKCTR(); void INTR_init();

void interrupt time(void);

void interrupt xint2(void);// XINT2中断服务程序 void SetLEDArray1(int nNumber); // 修改显示内容 void RefreshLEDArray1(); // 刷新显示 void EndICETEKCTR();

unsigned int uWork,nTimeCount,nTimeMS; unsigned int uLightStatusEW,uLightStatusSN; unsigned int bHold;

unsigned char ledbuf[8],ledx[8]; unsigned char led[40]= {

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 };

int www=0; main() {

int nWork1,nWork2,nWork3,nWork4;

int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus; unsigned int nScanCode;

nTimeCount=nTimeMS=0; bHold=0; uLightStatusEW=uLightStatusSN=0;

nNowStatus=0; nOldStatus=1; nOldTimeCount=0; InitDSP(); // 初始化DSP,设置运行速度 InitICETEKCTR(); // 初始化显示/控制模块 InitTimer(); // 设置定时器中断 // 根据计时器计数切换状态

// 根据状态设置计数和交通灯状态 while ( 1 )

8

{

if ( bHold && nNowStatus==statusHold ) {

if ( nTimeCount>=nStatusHold ) {

nNowStatus=nSaveStatus;

nTimeCount=nSaveTimeCount; bHold=0; } }

else if ( nTimeCount

else if ( nTimeCount

switch ( nNowStatus ) {

case statusNSFlashEWRed:

nWork1=nTimeCount-nStatusNSGreenEWRed;//-160

nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed;//200-184=16 nWork3=nWork2/3; nWork4=nWork3/2;

if ( nWork1>=0 && nWork2>0 && nWork3>0 && nWork4>0 ) uLightStatusSN=( (nWork1%nWork3)<=nWork4 )?(0x49):(0x40); break;

case statusNSRedEWFlash:

nWork1=nTimeCount-nStatusNSRedEWGreen;

nWork2=nStatusNSRedEWYellow1-nStatusNSRedEWFlash; nWork3=nWork2/3; nWork4=nWork3/2;

if ( nWork1>=0 && nWork2>0 && nWork3>0 && nWork4>0 ) uLightStatusEW=( (nWork1%nWork3)<=nWork4 )?(0x09):(0x00); break;

case statusNSGreenEWRed:

nWork1=nStatusNSGreenEWRed/20;

9

if ( nWork1>0 ) {

nWork2=20-nTimeCount/nWork1; if ( bHold ) {

if ( nWork2>10 ) {

nTimeCount=nWork1*10; nWork2=10; } }

if ( nOldTimeCount!=nWork2 ) {

nOldTimeCount=nWork2; SetLEDArray1(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; SetLEDArray1(nWork2); } }

break;

case statusHold:

nWork1=nStatusHold/20; if ( nWork1>0 ) {

nWork2=20-nTimeCount/nWork1; if ( nOldTimeCount!=nWork2 ) {

10

交通灯综合控制

摘 要

设计交通灯控制程序、用ICETEK-CTR上的发光二极管的亮灭模拟交通信号,并用其显示阵列模拟显示;使用TMS320VC5509DSP片上定时器定时产生时钟计数;利用ICETEK-CTR上键盘产生外中断,从而模拟实际生活中十字路口交通灯控制。

关键词:交通灯控制、ICETEK-CTR发光二极管、定时器、键盘

Abstract:

Design of traffic lights control procedures, ICETEK-CTR on the LED light out of the simulated traffic signals and display its array simulation shows; TMS320VC5509DSP the use of on-chip clock timer from time to time have a count; ICETEK-CTR on the use of the keyboard have a break outside, so Simulated real-life traffic light controlled crossroads.

Key words: light, ICETEK-CTR light-emitting diodes, timer,

keyboard

1

目 录

摘 要 ———————————————————————— 1 关键词 ———————————————————————— 1前 言 ———————————————————————— 3 总体设计方案 ———————————————————————— 3 总程序流程图 ———————————————————————— 4 程序编写 ———————————————————————— 5 实验步骤及调试 ———————————————————————— 5 系统功能,参数指标—————————————————————— 6 设计总结 ———————————————————————— 7 参考文献 ———————————————————————— 7 程 序 ———————————————————————— 7

2

一、前言

世界正处于高科技下一波快速增长的开端, DSP已经成为业界公认的、将按指数增长的技术焦点。目前,大多数DSP设计已经能在半导体生产商(如T1、ADI、Freescale等)提供的通用DSP芯片上实现。通用处理器的价格相对比较便宜,并且有高质量和廉价的编程工具、方便快速实现DSP算法的支持,但开发人员更希望在原型创建和调试过程中能进行重新编程。

DSP算法在不同供应商提供的FPGA器件列中实现,其性能和范围有很大的差异,这是因为对于不同设备来讲,结构、逻辑资源、布局资源以及布局方法都是不同的。通过“结构化意识”,Accelchip为DSP设计小组的目标FPGA器件提供了很好的物理实现。同时通过提供容易使用的、自动的从MATLAB到硬件实现的直接路径,使得DSP系统设计人员和算法开发人员能够在设计开发初期定义他们的算法。进而算法开发人员能够很快地将MATLAB设计转换成综合了性能、范围、成本和功率优点的目标FPGA的门级网表。有了来自算法物理实现的初期或开发周期中的反馈,就意味着设计流程后期所做的重复更少,再一次节省了宝贵的时间和人力

二、总体设计方案

(1) 交通灯模拟:

利用ICETEK-CTR上的一组发光二极管(共12只,分为东西南北四组、红黄绿三色)的亮灭实现交通信号的模拟。 (2) 计时显示:

利用ICETEK-CTR上的发光二极管显示阵列模拟显示。

对于计数显示,当处于状态1、5、*中时需要进行倒计时,需要计算在此状态中

3

的计数值增量,根据增量判断是否更新计数显示。 3计时

使用TMS320VC5509DSP片上定时器,定时产生时钟计数,再利用此计数 对应具体时间。 statusNSRedEWYellow 状态编号 4 南北红灯,东4秒(16,200,20 西黄灯 215) 信号灯状态 状态定义 保持时间(计计数显示 数值,起始时间,结束时间) 南北绿灯,东statusNSGreen20秒(160,0,20-0 EWRed 西红灯 159) 南北绿灯闪statusNSFlash6秒(24,160,0 烁,东西红灯 EWRed 183) 南北黄灯,东statusNSYello4秒(16,184,20 wEWRed 西红灯 199) 南北红灯,东statusNSRedE20秒(160,20-1 WGreen 西绿灯 216,375) 南北红灯,东statusNSRedE6秒(24,376,0 西绿灯闪烁 WFlash 399) 南北红灯,东statusNSRedE4秒(16,400,20 WYellow 西黄灯 415) 南北黄灯,东statusNSYello4秒(16,416,20 wEWRed 西红灯 431) 南北红灯,东StatusHold 20秒(160,0,20-1 西红灯 159) 1 2 3 5 6 7 8 * 其中,正常顺序每112秒(计数值日448)为一个循环,状态“*”为非顺序状态。 这样,只要根据计数值就可确定当前状态,根据状态再分情况处理。

紧急情况处理;模拟紧急情况(重要车队通过、急救车通过等)发生时,交通警察手动控制

当任意方向通行剩余时间多于是秒,将时间改成10秒。

正常变换到四面红灯(20秒)

直接返回正常顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。

4

三、总程序流程图

四、程序编写

根据设计要求,由于控制是由不同的各种状态按顺序发生的,我们可以采用状态机制控制方法来解决此问题。具体方法是:首先列举所有可能发生的状态;然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制。对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成。

五、实验步骤及调试

1.连接实验箱附带的键盘的PS2插头到ICETEK-CTRR的键盘接口P8 2.将ICETEK-CTR板的供电电源开关拨动到“开”的位置。 3.设置Code Composer Studio2.21在硬件仿真方式下运行。

5

nOldTimeCount=nWork2; SetLEDArray1(nWork2); } }

break; } } else {

if ( bHold )

{ nSaveStatus=nNowStatus; nSaveTimeCount=nTimeCount; nNowStatus=statusHold; nTimeCount=0;

if ( nSaveStatus==statusNSFlashEWRed || nSaveStatus==statusNSYellowEWRed ) {

nSaveStatus=statusNSRedEWGreen;

nSaveTimeCount=nStatusNSRedEWYellow; } else if ( nSaveStatus==statusNSRedEWFlash || nSaveStatus==statusNSRedEWYellow ) {

nSaveStatus=statusNSGreenEWRed; nSaveTimeCount=0; } }

nOldStatus=nNowStatus; switch ( nNowStatus ) {

case statusNSGreenEWRed:

uLightStatusEW=0x24; uLightStatusSN=0x49; 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; SetLEDArray1(20);

11

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=uLightStatusSN; // 设置交通灯状态 RefreshLEDArray1(); // 刷新发光二极管显示 nScanCode=CTRKEY; // 读键盘扫描码 nScanCode&=0x0ff;

if ( nScanCode==SCANCODE_Enter ) break; }

EndICETEKCTR(); exit(0); }

// 定时器中断服务程序,进行时钟计数 void interrupt time(void) {

nTimeMS++;

if ( nTimeMS>=5 ) {

nTimeMS=0; nTimeCount++;

nTimeCount%=nTotalTime; } }

// 设置发光二极管显示内容 void SetLEDArray1(int nNumber) {

int i,k,kk,kkk; kkk=nNumber;

k=kkk/10*4; kk=kkk*4; for ( i=0;i<4;i++ ) {

ledbuf[7-i]=~led[k+i];

12

ledbuf[3-i]=~led[kk+i]; } }

// 将缓存中点阵送发光二极管显示 void RefreshLEDArray1() { int i;

for ( i=0;i<8;i++ ) {

CTRGR=ledx[i]; CTRLA=ledbuf[i]; } }

// 初始化DSP,设置运行速度=8MHz void InitDSP() {

CLK_init(); SDRAM_init(); INTR_init(); }

// 设置定时器参数、允许中断 void InitTimer() {

ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *prsc0; tim0 = (unsigned int *)0x1000; prd0 = (unsigned int *)0x1001; tcr0 = (unsigned int *)0x1002; prsc0 = (unsigned int *)0x1003; *tcr0 = 0x04f0; *tim0 = 0;

*prd0 = 37500; // 10ms *prsc0 = 0x0f; // 16分频 *tcr0 = 0x00e0; }

// 初始化ICETEK-CTR板上设备 void InitICETEKCTR() { int k;

InitCTR();

CTRLR=0x0c1; // 打开发光二极管阵列 for ( k=0;k<8;k++ )

13

{

ledbuf[k]=0x0ff; // 显示为空白

ledx[k]=(k<<4); // 生成显示列控制字 } }

void interrupt xint2(void) // XINT2中断服务程序 {

bHold=1; }

void EndICETEKCTR() {

CloseCTR(); }

void INTR_init() // 设置中断使能 {

IVPD=0xd0; IVPH=0xd0; IER0=0x18; DBIER0 =0x18; IFR0=0xffff;

asm(\ }

14

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库交通灯综合控制1在线全文阅读。

交通灯综合控制1.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/250938.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: