交通燈綜合控制報告概要_第1頁
交通燈綜合控制報告概要_第2頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、京江學(xué)院JINGJIANGOLLEGOF J I A N G SHIN I V E R S I T YDSP原理課程設(shè)計交通燈綜合控制班級:_學(xué)號:_姓名:_2016 年 6 月目錄1引言 . 42課程設(shè)計的目標(biāo) . 52.1課程設(shè)計的背景 .5.2.2設(shè)計要求5.2.3設(shè)計思路簡介5.2.4交通燈控制要求 .6.2.5交通燈模擬6.2.6計時7.2.7緊急情況7.2.8程序設(shè)計7.3DSP 定時器的算法原理. 83.1CPU 定時器的原理 .8.3.2CPU 定時寄存器原理 .8.4系統(tǒng)程序設(shè)計 . 94.1流程圖9.試驗程序 .1.0.5心得體會 . 21引言隨看計算機(jī)和任忌技術(shù)的總壇發(fā)展

2、數(shù)丫伯甘處理技術(shù)得到迅速閭發(fā)展 DSP (DigitalSig nal Process ing)是一門涉及許多學(xué)科和領(lǐng)域的新興學(xué)科。數(shù)字信號處理是一種通過數(shù)字信號處理器來處理觀實怡號的方法這戰(zhàn)怡號由數(shù)十序列表示璉過去的一 I 哆仆時間里 數(shù) 字信號處理已經(jīng)在通信等領(lǐng)域得到極為廣泛的應(yīng)用。本次設(shè)計是基于DSP 來實現(xiàn)交通燈的控制利用發(fā)光二級詩來模擬交逋信號利用數(shù)碼管顯示倒計時時間利用 TMS320VC5416DSP片上定時器定時產(chǎn)生時鐘計數(shù)來模擬實際生活中十字路口交通燈。關(guān)鍵詞:DSPTMS320VC5416 :交通燈;發(fā)壯一核青課程設(shè)計的目標(biāo)課程設(shè)計的背景DSP 是一種將處理器的計算核心和一定

3、的外部設(shè)備集成在一個單片芯片上而構(gòu)成的類似丁旦汁機(jī)的一種處理器芯氏 不同丁一般單片機(jī)的是 由丁- DSP 采用了特殊的總線結(jié)構(gòu)和嗥系 剛 K 它在拭彳丁數(shù)丫伯號處壬訃算方帀兵仁更高的性色 數(shù)了皆號處珅在遽住柱處理淬領(lǐng)域得到極為廣泛帕應(yīng).用門-字路口交逋燈生我們泊口常牛話屮躺處叮見 它為繁忙曲道路交逋哎人們的安全提哄較好的像障.熱両 我忙只蚓道交逸燈在纖、5t綠二色之間交替更換來控制人丫流亙 去;C 其內(nèi)那的工口京珅.及軟硬件陽殳計了解很少 另業(yè)要通過此次簡單道路交通燈控制系統(tǒng)軟硬件設(shè)計來進(jìn)一步研究交通燈的內(nèi)部結(jié)構(gòu)。最重要的是將學(xué)習(xí)到的 DSP 系統(tǒng)的組成與原理應(yīng)用到交通燈的設(shè)計當(dāng)中。通過DSP

4、 技術(shù)及應(yīng)用課程設(shè)計,是學(xué)生能夠?qū)W(xué)到的DSP 系統(tǒng)的組成與原理用到具體的實際系統(tǒng)中, 加深對 DSP 系統(tǒng)的理解,是將該門課程與實際問題相連接的關(guān)鍵步驟。 通過課程設(shè)計,能夠提高學(xué)生分析問題,解決問題,從而運用所學(xué)知識解決實際問題的能力,并培養(yǎng)基本的、良好的軟硬件射進(jìn)能力。設(shè)計要求利用 C 語言在 CCS 環(huán)境中編寫一個交通燈綜合控制程序,并能通過硬件仿真對所編寫的程序及其應(yīng)用性、可行性進(jìn)行驗證。設(shè)計思路簡介在 TMS320C54X 系統(tǒng)開發(fā)環(huán)境 CCS( Code Composer Studio)下對交通燈綜合控制的實 現(xiàn)原理進(jìn)行討論。通過實驗仿真,可以在硬件實驗箱上看到對交通燈的模擬控制

5、。交通等綜合控制的控制原理交通燈控制要求利用 ICETEK-S60 實驗箱提供的設(shè)備,設(shè)計模擬實際生活中十字路口交通燈控制的程 序。要求如下:- 交通燈分紅黃綠三色,東、南、西、北各一組,用燈光信號實現(xiàn)對交通的控制:綠 燈信號表示通行,黃燈表示警告,紅燈禁止通行,燈光閃爍表示信號即將改變。-計時顯示:液晶屏幕上8X8 點陣顯示 0-9 計數(shù)。- 正常交通控制信號順序:正常交通燈信號自動變換: 南北方向綠燈,東西紅燈 (20 秒 )。 南北方向綠燈閃爍。 南北方向黃燈。 南北方向紅燈,東西方向黃燈。 東西方向綠燈 (20 秒 ) 。 東西方向綠燈閃爍。 東西方向黃燈。 返回循環(huán)控制。- 緊急情況

6、處理:模仿緊急情況 (重要車隊通過、急救車通過等 )發(fā)生時,交通警察手動 控制 當(dāng)任意方向通行剩余時間多于 5 秒,將時間改成 5 秒。 正常變換到四面紅燈 (20 秒 )。 直接返回正常信號順序的下一個通行信號(跳過閃爍綠燈、黃燈狀態(tài) ) 。交通燈模擬利用 ICETEK-CTR 上的一組發(fā)光二極管 (共 12 只,分為東西南北四組、紅黃綠三色 ) 的亮滅實現(xiàn)交通信號的模擬。#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 片上定時器,定時產(chǎn)生時鐘計數(shù),再利用此計數(shù)對應(yīng)具體時 間。定時器控制及中斷編程可參考實驗3.3 程序。緊急情況利用 ICETEK-CTR 上鍵盤產(chǎn)生外中斷,中斷正常信號順序,模擬突發(fā)情況。 外中斷編程控制可參考實驗 3.4 程序。程序設(shè)計根據(jù)設(shè)

8、計要求,由于控制是由不同的各種狀態(tài)按順序發(fā)生的,我們可以采用狀態(tài)機(jī)制 控制方法來解決此問題。這種方法是:首先列舉所有可能發(fā)生的狀態(tài);然后將這些狀態(tài)編 號,按順序產(chǎn)生這些狀態(tài);狀態(tài)延續(xù)的時間用程序控制。對于突發(fā)情況,可采用在正常順序的 控制中插入特殊控制序列的方式完成。時鐘計數(shù):采用 250ms 一次中斷進(jìn)行累加計數(shù)。表格 1狀態(tài)編號信號燈狀態(tài)狀態(tài)定義保持時間(計數(shù)值,起始 時間,結(jié)束時間)計 數(shù) 顯示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 秒(計數(shù)值 448)為一個循環(huán),狀態(tài)“ *”為非順序狀態(tài)。 這樣,只要根據(jù)計數(shù)值就可確定當(dāng)前狀態(tài),根據(jù)狀態(tài)再分情況處理。對于計數(shù)顯示,當(dāng)處于狀態(tài) 1、5、*中時需要進(jìn)行倒計時,需 要 計 算 在 此 狀 態(tài) 中 的 計 數(shù)值增量,根據(jù)增量判斷是否更新計數(shù)顯示。DSP定時器的算法原理CPU 定時器的原理本次設(shè)計主要用的是 F2812 器件上的 3 個 32 位 CPU 定時器(TIMER0/1/2 )。其中 定時器 1和定時器 2 預(yù)留給實時操作系統(tǒng)使用(如 DSP-BIOS ),只有定時器 0 用戶可以在 應(yīng)用程序中使

11、用。定時器功能框圖如下:CPU 定時寄存器原理定時器在工作過程中, 首先把周期寄存器(PRDH:PRD )的值裝入 32 位計數(shù)寄存器。 計數(shù)寄存器根據(jù) SYSCLKOUT 時鐘遞減計數(shù)。當(dāng)計數(shù)寄存器等于 0 時,定時器中斷輸出產(chǎn) 生一個中斷脈沖。定時器計數(shù)寄存器(TIMERxTIM 和 TIMERxTIMH )定時器控制寄存器(TIMERxTCR):使能中斷,定時功能;定時器周期寄存器(TIMERxPRD ):符合條件則周期性重新裝載并保存周期值定時器預(yù)定標(biāo)寄存器(TIMERxTPR 和 TIMERxTPRH ):控制多久減 1。系統(tǒng)程序設(shè)計流程圖圖 0-1 實驗程序流程圖圖 0-2 設(shè)計總

12、流程圖設(shè)計總流程圖試驗程序#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 中斷標(biāo)

13、志寄存器#define PMST*(int *)0 x1d/PMST 處理器模式狀態(tài)寄存器(地址 1dh)#define nStatusNSGreenEWRed 160 / 狀態(tài) 1 計數(shù)結(jié)束時間#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 擴(kuò)展寄存器定義ioport unsigned int port8000;ioport unsigned int port8001; /8001 :讀鍵盤掃描值,寫液晶控制寄存器地址ioport unsigned int port8002; /8002 :液晶控制寄存器地址ioport unsigned int

16、 port8003; /8003,8004:液晶顯示數(shù)據(jù)寄存器地址ioport unsigned int port8004; /ioport unsigned int port8005; /8005 :發(fā)光二極管顯示陣列控制寄存器地址ioport unsigned int port8007; /8007 :發(fā)光二極管顯示陣列控制寄存器地址 #define CTRGRport8000#define CTRLCDCMDR port8001#define CTRKEYport8001#define CTRCLKEYport8002#define CTRLCDCRport8002#define CTR

17、LCDLCRport8003#define CTRLCDRCRport8004#define CTRLAport8005#define CTRLRport8007void InitDSP(); /void 表示此函數(shù)為空類型,執(zhí)行此函數(shù)后不產(chǎn)生函數(shù)值 void InitTimer();void InitICETEKCTR();void interrupt time(void);void interrupt xint2(void); / XINT2 中斷服務(wù)程序void SetLEDArray(int nNumber);/ 修改顯示內(nèi)容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,設(shè)置運行速度InitICETEKCTR(); / 初始化顯示 /控制模塊 InitTimer();/ 設(shè)置定時器中斷/ 根據(jù)計時器計數(shù)切換狀態(tài)/ 根據(jù)狀態(tài)設(shè)置計數(shù)和交通燈狀態(tài)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; / 設(shè)置交通燈狀態(tài)RefreshLEDArray(); / 刷新發(fā)光二極管顯示 nScanCode=port8001; / 讀鍵盤掃描碼nScanCode&=0 x0ff;tKey=CTRCLKEY;if ( nScanCode=SCANCODE_9 ) break;EndICE

32、TEKCTR();exit(0);/ 定時器中斷服務(wù)程序,進(jìn)行時鐘計數(shù) void interrupt time(void)nTimeCount+;nTimeCount%=nTotalTime;/ 設(shè)置發(fā)光二極管顯示內(nèi)容void SetLEDArray(int nNumber)int i,ShowNumber;ShowNumber=nNumber/2; if(ShowNumber9) ShowNumber=0;CTRLCDCMDR=LCDCMDPAGE; / 設(shè)置操作頁 =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);/ 將緩存中點陣送發(fā)光二極管顯示void RefreshLEDArray()int i;for ( i=0;i8;i+ )CTRGR=ledxi;CTRLA=ledbufi;/初始化 DSP,設(shè)置運行速度=8MHzvoid InitDSP()REGISTERCLKMD=0; / 復(fù)位 PLLR

34、EGISTERCLKMD=0 x1007; / 速度設(shè)置 =16MHz/ 設(shè)置定時器參數(shù)、允許中斷void InitTimer()unsigned int k;asm( ssbx INTM); / 關(guān)中斷,進(jìn)行關(guān)鍵設(shè)置時不許打擾/ 設(shè)置通用定時器k=PMST;/ 設(shè)置 PMST 寄存器PMST =k&0 xff;/ 中斷向量表起始地址=80HIMR = 0 x0c;/ 使能 TINTTCR = 0 x41f; / 預(yù)分頻系數(shù)為 16TIM = 0; / 時鐘計數(shù)器清 0PRD = 0 x0f423; / 周期寄存器為 0ffHTCR = 0 x42f; / 復(fù)位、啟動IFR = 0 x

35、0c;/ 清中斷標(biāo)志位port3004=0; / 使能 XINT2asm( rsbx INTM); / 開中斷/ 初始化 ICETEK-CTR 板上設(shè)備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/ 關(guān)閉東西方向的交通燈/ 關(guān)閉南北方向的交通燈/ 開啟發(fā)光二極管顯示陣列/使能外部中斷k=CTRCLKEY;TurnOnLCD();LCDCLS();/ 清除鍵盤緩沖區(qū)/ 打開顯示/ 清除顯示內(nèi)存/ 顯示為空白/ 生成顯示列控制字CTRLCDCMDR=LCDCMDSTARTLINE; /

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論