基于DSP的 交通燈
《基于DSP的 交通燈》由會員分享,可在線閱讀,更多相關《基于DSP的 交通燈(32頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、目 錄 第1章 設計目的及要求 - 1 - 1.1 設計目的 - 1 - 1.2 設計要求 - 1 - 1.2.1 設計任務 - 1 - 1.2.2 設計要求 - 2 - 第2章 設計原理和方案 - 3 - 2.1 設計思路 - 3 - 2.2 設計原理 - 3 - 2.3 設計方案 - 4 - 2.4 工作狀態(tài)設計 - 5 - 第3章 硬件設計 - 7 - 3.1 總體設計 - 7 - 3.2 單元電路設計 - 8 - 第4章 軟件調(diào)試 - 11 - 4.1 總體設計 - 11 - 4.2 源程序 - 14 - 第5章 系統(tǒng)調(diào)試 - 14 - 5.1 硬件
2、調(diào)試 - 14 - 5.1.1 電源調(diào)試 - 14 - 5.1.2 Emulator調(diào)試 - 15 - 5.2 軟件調(diào)試 - 17 - 5.2.1 軟件設置 - 17 - 5.2.2程序運行 - 19 - 5.3 系統(tǒng)聯(lián)調(diào) - 21 - 第6章 結論分析及體會 - 22 - 參考文獻 - 24 - 附 錄 - 25 - 第1章 設計目的及要求 1.1 設計目的 (1)練習自主獨立的設計,實現(xiàn)理論和實踐的統(tǒng)一,提高自我動手能力。 (2)通過交通燈的設計,進一步加深、鞏固學生所學專業(yè)課程DSP控制器及其應用的基本理論知識,理論聯(lián)系實際,進一步培養(yǎng)學生綜合分
3、析問題和解決問題的能力。 (3)熟悉使用TMS320F2812控制交通燈的方法。 (4)利用DSP開發(fā)環(huán)境CCS C2000對源程序文件進行編譯、鏈接、裝載調(diào)試,以完成基本的DSP項目文件設計。 (5)通過此次課程設計,學習DSPf2812芯片的I/O端口控制方法,熟悉字模的簡單構建和使用,熟悉Emulator方式下的程序調(diào)試規(guī)程,并能最終熟悉掌握在DSP軟硬件環(huán)境下的程序開發(fā)流程,達到學以致用的目。 1.2 設計要求 1.2.1 設計任務 ⑴設計一個十字路口交通燈(帶一個倒計時數(shù)碼管),每個方向有三色(紅、黃、綠); ⑵實現(xiàn)交通燈雙向車道紅綠燈切換功能、交通燈全亮功能、數(shù)碼管
4、全亮功能; ⑶保證每次切換倒計時20秒,且綠燈變紅燈前2秒黃燈閃爍1次,并在此時熄滅綠燈。 ⑶完成緊急狀態(tài)的情況的手動設置。 1.2.2 設計要求 利用ICETEK-EDU 實驗箱提供的設備,設計模擬實際生活中十字路口交通燈控制的程 序。要求如下: 交通燈分紅黃綠三色,東、南、西、北各一組,用燈光信號實現(xiàn)對交通的控制:綠燈信號 表示通行,黃燈表示警告,紅燈禁止通行,燈光閃爍表示信號即將改變。 計時顯示:88 點陣顯示兩位計數(shù),為倒計時,每秒改變計數(shù)顯示。 正常交通控制信號順序:正常交通燈信號自動變換: ⑴南北方向綠燈,東西紅燈(20
5、秒)。 ⑵南北方向綠燈閃爍。 ⑶南北方向黃燈。 ⑷南北方向紅燈,東西方向黃燈 ⑸東西方向綠燈(20 秒)。 ⑹東西方向綠燈閃爍。 ⑺東西方向黃燈。 ⑻返回⑴循環(huán)控制。 緊急情況處理:模仿緊急情況(重要車隊通過、急救車通過等)發(fā)生時,交通警察手動控制 ⑴當任意方向通行剩余時間多于10 秒,將時間改成10 秒。 ⑵正常變換到四面紅燈(20 秒)。 ⑶直接返回正常信號順序的下一個通行信號(跳過閃爍綠燈、黃燈狀態(tài))。 第2章 設計原理和方案 2.1 設計思路 根據(jù)DSP的硬件中斷、定時器
6、、I/O訪問的原理。用定時器定時,用I/O口控制紅綠黃燈的開關,用硬件外部中斷模擬急救車的到達。有急救車到達時,兩向為全紅,以便讓急救車通過。急救車通過后,交通燈恢復硬件中斷前的狀態(tài)。觸發(fā)開關(紅色按紐)為中斷申請,表示有急救車通過。在實驗箱上交通燈模塊由高8位數(shù)據(jù)線控制:南北紅燈D9、D11為高,南北黃燈D9、D11、D13、D15為高,南北綠燈D13、D15為高,東西紅燈D8、D10為高,東西黃燈由D8、D10、D12、D14為高,東西綠燈D12、D14為高。交通燈模塊的I/O地址:0x5008h 2.2 設計原理 根據(jù)設計要求,由于控制是由不同的各種狀態(tài)按順序發(fā)生的,我可以
7、采用狀態(tài)機制控制方法來解決此問題。這種方法是:首先列舉所有可能發(fā)生的狀態(tài);然后將這些狀態(tài)編號,按順序產(chǎn)生這些狀態(tài);狀態(tài)延續(xù)的時間用程序控制。對于突發(fā)情況,可采用在正常順序的控制中插入特殊控制序列的方式完成。時鐘計數(shù):采用250ms 一次中斷進行累加計數(shù)。如表2.1所示。 表2.1信號燈狀態(tài)圖 狀 態(tài) 編號 信號燈狀態(tài) 狀態(tài)定義 時間 計數(shù) 顯示 1 南北燈綠,東西燈紅 statusNSGreenEWRed 20s 20-0 2 南北綠燈閃,東西紅燈 statusNSFlashEWRed 6s 0 3 南北黃燈,東西
8、紅燈 statusNSYellowEWRed 4s 20 4 南北紅燈,東西黃燈 statusNSRedEWYellow 4s 20 5 南北紅燈,東西綠燈 statusNSRedEWGreen 20s 20-1 6 南北紅燈,東西綠燈閃 statusNSRedEWFlash 6s 0 7 南北紅燈,東西黃燈 statusNSRedEWYellow 4s 20 8 南北黃燈,東西紅燈 statusNSYellowEWRed 4s 20 * 南北紅燈,東西紅燈 statusNSRedEWRed 20s 20-1 其中,正
9、常順序每112 秒(計數(shù)值448)為一個循環(huán),狀態(tài)“*”為非順序狀態(tài)。這樣,只要根據(jù)計數(shù)值就可確定當前狀態(tài),根據(jù)狀態(tài)再分情況處理。對于計數(shù)顯示,當處于狀態(tài)1、5、*中時需要進行倒計時,需要計算在此狀態(tài)中的計數(shù)值增量,根據(jù)增量判斷是否更新計數(shù)顯示。 2.3 設計方案 中斷方案 方案一:軟件中斷 優(yōu)點: ① 用一條指令進入中斷處理子程序,并且,中斷類型碼由指令提供。 ② 不執(zhí)行中斷響應總線周期,也不從數(shù)據(jù)總線讀取中斷類型碼。 ③ 不受中斷允許標志IF的影響。 ④ 執(zhí)行過程中可響應外部硬件中斷。 適應范圍:軟件中斷:比較典型的是定時器中斷、串口中斷
10、 方案二:硬件中斷 特點:① 硬件中斷時通過中斷請求線輸入信號來請求處理機 ② 具有隨機性。 適用范圍:外部中斷(用于按鍵、鍵盤中斷、打印機中斷、定時器中) 比較:硬件中斷時通過中斷請求線輸入信號來請求處理機;軟件中斷是處理機內(nèi)部識別并進行處理的中斷過程。硬件中斷一般是由中斷控制器提供中斷碼類型,處理機自動轉(zhuǎn)向中斷處理程序;軟件中斷完全有處理機內(nèi)部形成中斷處理程序的入口地址并轉(zhuǎn)向中斷處理程序的入口地址,并轉(zhuǎn)向中斷處理程序,不需要外部提供信息。 選擇:對于突發(fā)情況,采用在正常順序的控制中插入特殊控制序列的方式完成,通過按鍵進入到中斷服務子程序,即硬件中斷。
11、2.4 工作狀態(tài)設計 狀態(tài)一:南北綠燈、東西紅燈,延時20秒,20秒后南北綠燈閃3次,東西紅燈延時6秒;如圖2.1所示 圖2.1 狀態(tài)一 狀態(tài)二:南北黃燈、東西紅燈,持續(xù)6秒; 圖2.2 狀態(tài)二 狀態(tài)三:東西綠燈、南北紅燈,延時20秒,20秒后東西綠燈閃3次,南北紅燈持續(xù)6秒; 圖2.3 狀態(tài)三 狀態(tài)四:東西黃燈、南北紅燈,持續(xù)6秒; 圖2.4 狀態(tài)四 狀態(tài)五:緊急狀態(tài)下東西南北均亮紅燈; 圖2.5 狀態(tài)五 第3章 硬件設計 3.1 總體設計 ① 根據(jù)設計要求,由于控制是由不同的各種狀態(tài)按順序發(fā)生的, 我可
12、以采用狀態(tài)機制控制方法來解決此問題。這種方法是: 首先列舉所有可能發(fā)生的狀態(tài); 然后將這些狀態(tài)編號, 按順序產(chǎn)生這些狀態(tài);狀態(tài)延續(xù)的時間用程序控制,對于突發(fā)情況, 可采用在正常順序的控制中插入特殊控制序列的方式完成。 ② 突發(fā)事件設置, 在實際交通過程中會出現(xiàn)突發(fā)狀況, 比如說有救護車或者110 緊急車要通過, 此時就可以通過小鍵盤進行突發(fā)狀況模擬。通過按鍵進入到中斷服務子程序, 相當于原來先要通過的車輛在突發(fā)狀況來了以后就要先讓緊急車輛通過。 圖3.1 ICETEK-VC5416-A原理圖 3.2 單元電路設計 件位置和撥碼開關設置 1. POWER: 這個接口用于接入為整個板
13、子供電的電源,電源電壓為+5V,標準配置的電源電流為1A,如果不使用隨板提供的電源,請注意電源的正負極性和電流的大小。因為板上設計了電源管理芯片,所以可以使用一路電源供電。下面是這個接口的插孔示意圖: 圖3.2 電源插孔示意圖 2. DAOUT1 和DACOUT2: 接頭分別是ICETEK-VC5416-A 評估板的DA 通道1 和道2的輸出接口,接口輸出0 到 +5V 的電壓。 3.AIN1 和AIN4:模擬輸入(ANOLOG INPUT)通道1 和通道4,采集速率最大為500KHz,輸入模擬電壓為0 到+5V。 4.標準RS-232 接口:ICETEK-VC5416-A 上的串
14、口是通過一個串口專用器件TL16C550 和串口的驅(qū)動器件共同實現(xiàn)的。串口的物理設計是一個標準的9 針插頭,具體定義見下圖3.5 DB9:9 針D 型連串口的物理設計是一個標準的9 針插頭,具體定義見下圖DB9:9 針D 型連接器,異步串口連接器,符合RS-232 規(guī)范,輸出電平為正負12V。下面是9 針連器的管腳定義。 圖3.3 異步串口連接器示意圖 表3.1 DB9 管腳定義表管 管腳號 管腳定義 說明 1 NC 無連接 2 TxD 數(shù)據(jù)輸出引腳,與對方輸入腳連接 3 RxD 數(shù)據(jù)輸入引腳,與對方輸出腳連接 4 NC 無連接 5 GND 無連接
15、 6 NC 無連接 7 NC 無連接 8 NC 無連接 9 NC 無連接 5.POW_LED(D1,D2):電源指示燈,如果評估板工作正常,此燈常亮。其中指示燈D1為5V 指示,若外接電源工作正常,此燈常亮。指示燈D2 為+3.3V 指示,若評估板供電芯片工作正常,此燈常亮。USER_LED(D3-D10): 用戶指示燈,在板上有8 個可編程的指示燈,分別為D3-D10,這8個指示燈的開關可以由VC5416 編程控制。 6. EXT_RST(J10):外接復位信號。J10:如果需要外接控制DSP 的復位信號,可以在此處連接,當兩個信號連通時DSP 處于復位狀態(tài),當兩個
16、信號分開時,DSP 正常工作。 7.DSP_SW:5416 芯片的配置開關。共有四位,如下表:表3.3 表3.3芯片DIP 配置開關說明 信號名 信號功能 信號定義 MP/MC 處理器方式選擇 斷開狀態(tài),即OFF,為高電平,選擇MP模式:連接狀態(tài),即ON,為低電平,選擇MC模式 CLKMD1 5416硬件備頻選擇 斷開狀態(tài),即OFF,為高電平; 連接狀態(tài),即ON,為低電平, CLKMD2 CLKMD3 8. HPI_SW(J1,J2):HPI 接口方式選擇。這兩個接口用于控制5416 的HPI16 和HPIENA信號的狀態(tài)。列表如下(表3.4
17、): 表3.4 HPI 接口方式選擇 跳線名 狀態(tài) 含義 J1:HPI16 1,2,3斷開 HPI16懸空 1,2短接 HPI16高電平 2,3短接 HPI16低電平 J2:HPIENA 1,2,3斷開 HPIENA懸空 1,2短接 HPIENA高電平 2,3短接 HPIENA低電平 9. RESET(S1): 手動復位開關。作用是reset鍵是做為冷啟動的,就是重新啟動試驗箱,內(nèi)存數(shù)據(jù)重新自檢。 第4章 軟件調(diào)試 4.1 總體設計 開始運行程序之后: ⑴南北方向綠燈,東西紅燈(20 秒)。 ⑵南北方向綠燈閃爍。 ⑶南北方向黃燈
18、。 ⑷南北方向紅燈,東西方向黃燈。 ⑸東西方向綠燈(20 秒)。 ⑹東西方向綠燈閃爍。 ⑺東西方向黃燈。 ⑻返回⑴循環(huán)控制。 -緊急情況處理:模仿緊急情況(重要車隊通過、急救車通過等)發(fā)生時,交通警察手動控制 ⑴當任意方向通行剩余時間多于10 秒,將時間改成10 秒。 ⑵正常變換到四面紅燈(20 秒)。 ⑶直接返回正常信號順序的下一個通行信號(跳過閃爍綠燈、黃燈狀態(tài))。 圖4.1 二極管列陣圖 圖4.2 中斷服務圖 圖4.3 程序流程圖 4.2 源程序 見附錄 第5章 系統(tǒng)調(diào)試 5.1 硬件調(diào)試 5.1.1 電源調(diào)試 1. 連接電源
19、:打開實驗箱,取出三相電源連接線(如右圖),將電源線的一端插入實驗箱外部左側箱壁上的電源插孔中。確認實驗箱面板上電源總開關(位于實驗箱底板左上角)處于“關”的位置,連接電源線的另一端至220V 交流供電插座上,保證穩(wěn)固連接。 2. 使用電源連接線(如右圖,插頭是帶孔的)連接各模塊電源:確認實驗箱總電源斷開。連接ICETEK-CTR 板上邊插座到實驗箱底板上+12V電源 插座;ICETEK-CTR 板下邊插座到實驗箱底板上+5V 電源插座;如使用PP(并口)型仿真器,則連接仿真器上插座到實驗箱底板上+5V電源插座;連接DSP 評估板模塊電源插座到實驗箱底板上+5V 電源插座。注意各插頭要插到底
20、,防止虛接或接觸不良。 3. 連接DSP 評估板信號線:當需要連接信號源輸出到A/D 輸入插座時,使用信號連接線(如右圖)分別連接相應插座。 4. 接通電源:檢查實驗箱上220V 電源插座(箱體左側)中保險管是否完好,在連接電源線以后,檢查各模塊供電連線是否正確連接,打開實驗箱上的電源總開關(位于實驗箱底板左上角),使開關位于“開”的位置,電源開關右側的指示燈亮。 5.1.2 Emulator調(diào)試 1.啟動Simulator 方式 雙擊桌面上圖標: 2.啟動Emulator 方式 (1)首先將實驗箱電源關閉。連接實驗箱的外接電源線。 (2)檢查ICETEK-5100USB 仿真
21、器的黑色JTAG 插頭是否正確連接到ICETEK-VC5416-A 板的J3 插頭上。注:仿真器的插頭中有一個孔加入了封針與J3 插頭上的缺針位置應重合,保證不會插錯。 (3)檢查是否已經(jīng)用電源連接線連接了ICETEK-VC5416-A 板上的POW1 插座和實驗箱底板上+5V 電源插座。 (4)檢查其他連線是否符合實驗要求。檢查實驗箱上三個撥動開關位置是否符合實驗要求。 (5)打開實驗箱上電源開關(位于實驗箱底板左上角),注意開關邊上紅色指示燈點亮。ICETEK-VC5416-A 板上指示燈D1 和D2 點亮。如果打開了ICETEK-CTR 的電源開關,ICETEK-CTR 板上指示燈
22、L1、L2 和L3 點亮。如果打開了信號源電源開關,相應開關邊的指示燈點亮。 (6)用實驗箱附帶的USB 信號線連接ICETEK-5100USB 仿真器和PC 機后面的USB 插座,注意ICETEK-5100USB 仿真器上指示燈Power 和Run 燈點亮。 (7)雙擊桌面上仿真器初始化圖標:如果出現(xiàn)下面圖5.6提示窗口,表示初始化成功,按一下空格鍵進入下一步操作。 圖5.1 初始化圖 如果窗口中沒有出現(xiàn)“按任意鍵繼續(xù)…”,請關閉窗口,關閉實驗箱電源,再將USB 電纜從仿真器上拔出,返回第(2)步重試。 如果窗口中出現(xiàn)“The adapter returned
23、an error.”,并提示“按任意鍵繼續(xù)…”表示初始瑞泰創(chuàng)新——ICETEK-VC5416-A-USB-EDU 教學實驗系統(tǒng)軟件實驗指導 III-7化失敗,請關閉窗口重試兩三次,如果仍然不能初始化則關閉實驗箱電源,再將USB 電纜從仿真器上拔出,返回第(2)步重試。 ⑧雙擊桌面上圖標: 啟動CCS2.21。 ⑨如果進入CCS 提示錯誤,先選“Abort”,然后用“初始化ICETEK-5100USB2.0 仿真器”初始化仿真器,如提示出錯,可多做幾次。如仍然出錯,拔掉仿真器上USB 接頭(白色方形),按一下ICETEK-VC5416-A 板上S1 復位按鈕,連接USB 接頭再做“初始化
24、ICETEK-5100 USB2.0 仿真器”。 ⑩如果遇到反復不能連接或復位仿真器、進入CCS 報錯,請打開Windows 的“任務管理器”,在“進程”卡片上的“映像名稱”欄中查找是否有“cc_app.exe”,將它結束再試。 5.2 軟件調(diào)試 5.2.1 軟件設置 CCS 可以工作在純軟件仿真環(huán)境中,就是由軟件在PC 機內(nèi)存中構造一個虛擬的DSP 環(huán)境,可以調(diào)試、運行程序。但一般軟件無法構造DSP 中的外設,所以軟件仿真通常用于調(diào)試純軟件的算法和進行效率分析等。 在使用軟件仿真方式工作時,無需連接板卡和仿真器等硬件。 (1) 單擊桌面上圖標:進入CCS 設置窗口。 (
25、2) 在出現(xiàn)的窗口中按標號順序進行如下圖5.1設置: 圖5.2 仿真設置圖 接著在下面出現(xiàn)的窗口中選擇“否(N)”。 此時CCS 已經(jīng)被設置成Simulator 方式(軟件仿真TMS320VC5416 器件的方式),如果一直使用這一方式就不需要重新進行以上設置操作了。 2. 設置CCS 通過ICETEK-5100USB 仿真器連接ICETEK-VC5416-A 硬件環(huán)境進行軟件調(diào)試和開發(fā)。 (1)單擊桌面上圖標:進入CCS 設置窗口 (2)在出現(xiàn)的窗口中按標號順序進行如下設置: 圖5.3 CSS2設置圖 (3)接著在下面的窗口中按標號順序進行如下圖5.3選擇: 圖
26、5.4 CSS2設置圖 在出現(xiàn)的窗口按標號順序進行如下圖5.4設置: 圖5.5 CSS2設置圖 (5) 在出現(xiàn)的窗口按標號順序進行如下圖5.5設置: 圖5.6 CSS2設置圖 以上設置完成后,CCS 已經(jīng)被設置成Emulator 的方式(用仿真器連接硬件板卡的方式),并且指定通過ICETEK-5100USB 仿真器連接ICETEK-VC5416-A 評估板。如果您需要一直使用這一方式就不需要重新進行以上設置操作了。 5.2.2程序運行 選擇菜單“Project”的“New…”項。如圖5.7所示。 圖5.7 CSS2設置圖 如下圖,按編號順序操作建立Traf
27、ficlight.pjt 工程文件: 展開主窗口左側工程管理窗口中“Projects”下新建立的“Trafficlight.pjt”,其中各項均為空。 (2) 在工程文件中添加程序文件: 選擇菜單“Project”的“Add Files to Project…”項;在“Add Files to Project”對話框中 選擇文件目錄為C:\ICETEK-VC5416-EDULab\Lab0601-UseCCS,改變文件類型為“C Source Files(*.c;*.ccc)”,選擇顯示出來的文件“Trafficlight.c”;重復上述各步驟,添加Trafficlight.cmd
28、文件,到volume 工程中; 添加 C:\ti\C5400\cgtools\lib\rts.lib。 (3) 編譯連接工程:選擇菜單“Project”的“Rebuild All”項,或單擊工具條中的按鈕;注意編譯過程中CCS 主窗口下部的“Build”提示窗中顯示編譯信息,最后將給出錯誤和警告的統(tǒng)計數(shù)。 5.3 系統(tǒng)聯(lián)調(diào) (1) 下載程序:執(zhí)行File→Load Program ,在隨后打開的對話框中選擇剛剛建立的 C:\ICETEK-VC5416-EDULab\Lab0601-UseCCS\Debug\Trafficlight.out 文件。 (2) 設置軟件調(diào)試斷點:在項
29、目瀏覽窗口中,雙擊Trafficlight.c 激活這個文件,移動光標到main()行上,單擊鼠標右鍵選擇Toggle Breakpoint 或按F9 設置斷點(另外,雙擊此行左邊的灰色控制條也可以設置或刪除斷點標記)。 (3) 利用斷點調(diào)試程序:選擇Debug→Run 或按F5 運行程序,程序會自動停在main()函數(shù)上。 (4)在ICETEK-CTR 附帶的小鍵盤上按下除“9”鍵外的按鍵,觀察信號是否滿足要求。 第6章 結論分析及體會 本次交通燈設計實現(xiàn)了正常交通控制信號順序,完成了如2.4節(jié)所示的五種狀態(tài)的相互轉(zhuǎn)換。 此次
30、課程設計,通過在實驗室學習,我進一步熟悉了CCS軟件,鞏固了以前所學過的知識。通過對書本上的理論知識與實際的操作相結合,對所學的理論知識也有了更深層次的理解。 本次設計中主要用到了DSP的硬件中斷、定時器以及I/O訪問等方面的相關的知識。對于這幾方面知識我并不陌生,在2011年的電子設計大賽中,這些內(nèi)容都曾涉及,再加上前兩個周的單片機課程設計也曾應用到相關的知識。因此在本次的功能實現(xiàn)方面遇到的問題并不是太多。不過畢竟DSP的相關知識有別于61單片機,因此對編程的理解上還是出現(xiàn)了一些問題,通過對課本以及相關資料的查詢,這些問題也及時的得到了解決。 通過對問題的發(fā)現(xiàn)與解決,使我更加了解DSP的
31、原理及其編程的相關注意事項,加深了對課本理論知識的理解。本次DSP課程設計對我們來說很重要,是我們電子信息工程專業(yè)的學生實踐中的重要環(huán)節(jié)。 總的來說,在這次十字路口交通燈的設計中我收獲頗多。趙老師的諄諄教誨端正了我們的學習態(tài)度,對我們未來的發(fā)展有很大的幫助。最后,對趙老師的指導和教誨表示忠心的感謝! 參考文獻 [1] 鄒彥. DSP原理及應用[M]. 北京:電子工業(yè)出版社,2005.1. [2] 戴明楨.TMS320C54xDSP結構、原理及應用[M].北京航空航天大學出版社,2001.8. [3] 胡圣堯. DSP原理及應用[M].東南大學出版社,2008.
32、7. [4] 清源科技.TMS320C54xDSP應用程序設計教程[M].機械工業(yè)出版社,2004.1. [5] 清源科技.TMS320C54x硬件開發(fā)教程[M].機械工業(yè)出版社,2003.1. 附 錄 源程序 main() { int nWork1,nWork2,nWork3,nWork4; int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus; unsigned int nSc
33、anCode; nTimeCount=0; bHold=0; uLightStatusEW=uLightStatusSN=0; nNowStatus=0; nOldStatus=1; nOldTimeCount=0; InitDSP(); // 初始化DSP,設置運行速度 InitICETEKCTR(); // 初始化顯示/控制模塊 InitTimer(); // 設置定時器中斷 // 根據(jù)計時器計數(shù)切換狀態(tài) // 根據(jù)狀態(tài)設置計數(shù)和交通燈狀態(tài) while ( 1 ) { if ( bHold && nNowStatus==sta
34、tusHold )
{
if ( nTimeCount>=nStatusHold )
{
nNowStatus=nSaveStatus;
nTimeCount=nSaveTimeCount;
bHold=0;
}
}
else if ( nTimeCount 35、else if ( nTimeCount 36、EWFlash;
else if ( nTimeCount 37、NSGreenEWRed;
nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed;
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=nTimeCoun 38、t-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=n 39、StatusNSGreenEWRed/20;
if ( nWork1>0 )
{
nWork2=20-nTimeCount/nWork1;
if ( bHold )
{
if ( nWork2>10 )
{
nTimeCount=nWork1*10;
nWork2=10;
}
}
if ( nOldTimeCount!=nWork2 )
{
nOldTimeCount=nWork2;
40、 SetLEDArray(nWork2);
}
}
break;
case statusNSRedEWGreen:
nWork1=(nStatusNSRedEWGreen-nStatusNSRedEWYellow)/20;
if ( nWork1>0 )
{
nWork2=20-(nTimeCount-nStatusNSRedEWYellow)/nWork1;
if ( bHold )
{
if ( nWork2>10 )
{
41、nTimeCount=nStatusNSRedEWYellow+nWork1*10;
nWork2=10;
}
}
if ( nOldTimeCount!=nWork2 )
{
nOldTimeCount=nWork2;
SetLEDArray(nWork2);
}
}
break;
case statusHold:
nWork1=nStatusHold/20;
if ( nWork1>0 )
{
42、 nWork2=20-nTimeCount/nWork1;
if ( nOldTimeCount!=nWork2 )
{
nOldTimeCount=nWork2;
SetLEDArray(nWork2);
}
}
break;
}
}
else
{
if ( bHold )
{
nSaveStatus=nNowStatus;
nSaveTimeCount=nTimeCount;
nNowStatus=statusHol 43、d;
nTimeCount=0;
if ( nSaveStatus==statusNSFlashEWRed || nSaveStatus==statusNSYellowEWRed )
{
nSaveStatus=statusNSRedEWGreen;
nSaveTimeCount=nStatusNSRedEWYellow;
}
else if ( nSaveStatus==statusNSRedEWFlash || nSaveStatus==statusNSRedEWYellow )
{
nSave 44、Status=statusNSGreenEWRed;
nSaveTimeCount=0;
}
}
nOldStatus=nNowStatus;
switch ( nNowStatus )
{
case statusNSGreenEWRed:
uLightStatusEW=0x24; uLightStatusSN=0x49;
SetLEDArray(20);
break;
case statusNSFlashEWRed:
uLightStatusEW=0x24; uLight 45、StatusSN=0x49;
SetLEDArray(0);
break;
case statusNSYellowEWRed:
uLightStatusEW=0x24; uLightStatusSN=0x52;
SetLEDArray(20);
break;
case statusNSRedEWYellow:
uLightStatusEW=0x12; uLightStatusSN=0x64;
SetLEDArray(20);
break;
case statusNSRe 46、dEWGreen:
uLightStatusEW=0x09; uLightStatusSN=0x64;
SetLEDArray(20);
break;
case statusNSRedEWFlash:
uLightStatusEW=0x09; uLightStatusSN=0x64;
SetLEDArray(0);
break;
case statusHold:
uLightStatusEW=0x24; uLightStatusSN=0x64;
SetLEDArray(20);
47、
break;
}
}
CTRLR=uLightStatusEW; CTRLR=uLightStatusSN; // 設置交通燈狀態(tài)
RefreshLEDArray(); // 刷新發(fā)光二極管顯示
nScanCode=port8001; // 讀鍵盤掃描碼
nScanCode&=0x0ff;
if ( nScanCode==SCANCODE_Enter ) break;
}
EndICETEKCTR();
exit(0);
}
// 定時器中斷服務程序,進行時鐘計數(shù)
void interrupt time(void) 48、
{
nTimeCount++;
nTimeCount%=nTotalTime;
}
// 設置發(fā)光二極管顯示內(nèi)容
void SetLEDArray(int nNumber)
{
int i,k,kk,kkk;
kkk=nNumber;
k=kkk/10*4; kk=kkk%10*4;
for ( i=0;i<4;i++ )
{
ledbuf[7-i]=~led[k+i];
ledbuf[3-i]=~led[kk+i];
}
}
// 將緩存中點陣送發(fā)光二極管顯示
void RefreshLEDArray()
{
int 49、 i;
for ( i=0;i<8;i++ )
{
CTRGR=ledx[i];
CTRLA=ledbuf[i];
}
}
// 初始化DSP,設置運行速度=8MHz
void InitDSP()
{
REGISTERCLKMD=0; // 速度設置=8MHz
}
// 設置定時器參數(shù)、允許中斷
void InitTimer()
{
unsigned int k;
asm(" ssbx INTM"); // 關中斷,進行關鍵設置時不許打擾
// 設置通用定時器
k=PMST; // 設置PMST寄存器
PMST =k&0xf 50、f; // 中斷向量表起始地址=80H
IMR = 0x0c; // 使能TINT
TCR = 0x41f; // 預分頻系數(shù)為16
TIM = 0; // 時鐘計數(shù)器清0
PRD = 0x0f423; // 周期寄存器為0ffH
TCR = 0x42f; // 復位、啟動
IFR = 0x0c; // 清中斷標志位
port3004=0; // 使能XINT2
asm(" rsbx INTM"); // 開中斷
}
// 初始化ICETEK-CTR板上設備
void InitICETEKCTR()
{
int k;
CTRGR= 51、0; // 初始化ICETEK-CTR
CTRGR=0x80;
CTRGR=0;
CTRLR=0; // 關閉東西方向的交通燈
CTRLR=0x40; // 關閉南北方向的交通燈
CTRLR=0x0c1; // 開啟發(fā)光二極管顯示陣列
for ( k=0;k<8;k++ )
{
ledbuf[k]=0x0ff; // 顯示為空白
ledx[k]=(k<<4); // 生成顯示列控制字
}
k=CTRCLKEY; // 清除鍵盤緩沖區(qū)
}
void interrupt xint2(void) // XINT2中斷服務程序
{
bHold=1;
}
void EndICETEKCTR()
{
int k;
CTRLR=0; // 關閉東西方向的交通燈
CTRLR=0x40; // 關閉南北方向的交通燈
CTRLR=0x0c0; // 關閉發(fā)光二極管顯示陣列
k=CTRCLKEY; // 清除鍵盤緩沖區(qū)
}
- 31 -
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案