版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> DSP課程設(shè)計(jì)</b></p><p> 2012年6 月2日</p><p><b> 目 錄</b></p><p> 一、 緒論……………………………………………………………..3</p><p> 二、 設(shè)計(jì)的任務(wù)……………………………………………
2、………..3</p><p> 三、 設(shè)計(jì)的要求……………………………………………………..4</p><p> 四、 設(shè)計(jì)方案………………………………………………………...4</p><p> 4.1 直流電機(jī)的控制……………………………………………….…4 </p><p> 4.1.1 直流電機(jī)的原理……………………………
3、………….....4</p><p> 4.1.2 直流電機(jī)的控制程序框圖………………………………...4</p><p> 4.2 步進(jìn)電機(jī)的控制…………………………………………….......6</p><p> 4.2.1 步進(jìn)電機(jī)的原理……………………………………..…...6</p><p> 4.2.2 步進(jìn)電機(jī)的控制程序
4、框圖…………………………….…..7</p><p> 4.3 交通燈的控制…………………………………………………..7</p><p> 4.3.1 交通燈的原理……………………………………..……..8</p><p> 4.3.2 步交通燈的控制程序框圖…………………………….…..8</p><p> 五、系統(tǒng)調(diào)試與分析………
5、………………………………………..10</p><p> 六、總結(jié)和心得……………………………………..………………11</p><p> 七、參考文獻(xiàn)………………………………………………………...12</p><p> 八、附錄……………………………………………………………...12</p><p><b> 一、緒論&
6、lt;/b></p><p> DSP數(shù)字信號(hào)處理(Digital Signal Processing ,簡(jiǎn)稱DSP)是一門(mén)涉及許多科學(xué)而又廣泛應(yīng)用于許多領(lǐng)域的新學(xué)領(lǐng)域。數(shù)字信號(hào)處理是一種通過(guò)使用數(shù)學(xué)技巧執(zhí)行轉(zhuǎn)換或提取信息,來(lái)處理現(xiàn)實(shí)信號(hào)的方法,這些信號(hào)由數(shù)字序列表示。本次設(shè)計(jì)的是基于DSP原理設(shè)計(jì)的直流電機(jī),步進(jìn)電機(jī),交通燈控制軟硬件系統(tǒng)。</p><p> 直流電機(jī)定義為輸出
7、或輸入為直流電能的旋轉(zhuǎn)電機(jī),它是能實(shí)現(xiàn)直流電能和機(jī)械能互相轉(zhuǎn)換的電機(jī)。當(dāng)它作電動(dòng)機(jī)運(yùn)行時(shí)是直流電動(dòng)機(jī),將電能轉(zhuǎn)換為機(jī)械能;作發(fā)電機(jī)運(yùn)行時(shí)是直流發(fā)電機(jī),將機(jī)械能轉(zhuǎn)換為電能。</p><p> 步進(jìn)電機(jī)是將電脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開(kāi)環(huán)控制元件。它的調(diào)速一般是改變輸入步進(jìn)電機(jī)的脈沖的頻率來(lái)實(shí)現(xiàn)步進(jìn)電機(jī)的調(diào)速,因?yàn)椴竭M(jìn)電機(jī)每給一個(gè)脈沖就轉(zhuǎn)動(dòng)一個(gè)固定的角度,這樣就可以通過(guò)控制步進(jìn)電機(jī)的一個(gè)脈沖到下一個(gè)脈沖的時(shí)間間
8、隔來(lái)改變脈沖的頻率,延時(shí)的長(zhǎng)短來(lái)具體控制步進(jìn)角來(lái)改變電機(jī)的轉(zhuǎn)速,從而實(shí)現(xiàn)步進(jìn)電機(jī)的調(diào)速。</p><p> 交通燈是利用發(fā)光二極管亮滅模擬交通信號(hào),數(shù)碼管現(xiàn)實(shí)時(shí)間,利用TMS320VS5420 DSP片上定時(shí)器產(chǎn)生時(shí)鐘計(jì)數(shù),設(shè)計(jì)模擬實(shí)際生活中十字路口交通燈。</p><p><b> 二、設(shè)計(jì)的任務(wù)</b></p><p> 1. 編程實(shí)
9、現(xiàn)在現(xiàn)有實(shí)驗(yàn)箱上整合步進(jìn)電機(jī)、直流電機(jī)、交通燈等實(shí)驗(yàn)項(xiàng)目。</p><p> 2. 三個(gè)實(shí)驗(yàn)可以通過(guò)鍵盤(pán)進(jìn)行模式選擇來(lái)切換(1步進(jìn)電機(jī)控制,2直流電機(jī)控制,3交通燈控制,4三個(gè)實(shí)驗(yàn)同時(shí)進(jìn)行),并在LED左數(shù)第一位上顯示模式。</p><p> 3. 步進(jìn)電機(jī)和直流電機(jī)的正反轉(zhuǎn)、加減速在鍵盤(pán)上進(jìn)行控制,并在LED上顯示步進(jìn)電機(jī)和直流電機(jī)的運(yùn)行狀態(tài)。</p><p>
10、; 4. 交通燈控制時(shí)應(yīng)在LED上顯示時(shí)間的變化。交通燈東西、南北的時(shí)間可通過(guò)鍵盤(pán)設(shè)定。</p><p> 5. 三個(gè)實(shí)驗(yàn)同時(shí)進(jìn)行時(shí)只顯示模式,各實(shí)驗(yàn)的參數(shù)都可通過(guò)鍵盤(pán)設(shè)置。</p><p><b> 三、設(shè)計(jì)的要求</b></p><p> 1.利用DSP的I/O操作編制程序輸出一串脈沖控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、加速、減速、停止。<
11、/p><p> 2.通過(guò)DSP的I/O控制能對(duì)步進(jìn)電機(jī)調(diào)速。</p><p> 3.利用TMS320VC5402的片內(nèi)定時(shí)器中斷,通過(guò)鍵盤(pán)直流電機(jī)和步進(jìn)電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、加速、減速。并將送往步進(jìn)電機(jī)的代碼顯示到LED上。</p><p> 4.能夠正確的模擬交通燈,能響應(yīng)硬件中斷和定時(shí)中斷</p><p> 5.運(yùn)用C語(yǔ)言編程。</
12、p><p><b> 四、設(shè)計(jì)方案</b></p><p> 4.1 直流電機(jī)的控制</p><p> 利用DSP的I/O操作編制程序輸出一串脈沖控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、加速、減速、停止 。編寫(xiě)定時(shí)器初始化程序(用于測(cè)速)、外部硬件中斷服務(wù)程序,根據(jù)占空比×速度=常數(shù)的原則進(jìn)行調(diào)速。</p><p> 4.1
13、.1 直流電機(jī)的原理</p><p> 導(dǎo)體受力的方向用左手定則確定。這一對(duì)電磁力形成了作用于電樞一個(gè)力矩,這個(gè)力矩在旋轉(zhuǎn)電機(jī)里稱為電磁轉(zhuǎn)矩,轉(zhuǎn)矩的方向是逆時(shí)針?lè)较?,企圖使電樞逆時(shí)針?lè)较蜣D(zhuǎn)動(dòng)。如果此電磁轉(zhuǎn)矩能夠克服電樞上的阻轉(zhuǎn)矩(例如由摩擦引起的阻轉(zhuǎn)矩以及其它負(fù)載轉(zhuǎn)矩),電樞就能按逆時(shí)針?lè)较蛐D(zhuǎn)起來(lái)。 </p><p> 當(dāng)電樞轉(zhuǎn)了180°后,導(dǎo)體 cd轉(zhuǎn)到 N極下,導(dǎo)體ab
14、轉(zhuǎn)到S極下時(shí),由于直流電源供給的電流方向不變,仍從電刷 A流入,經(jīng)導(dǎo)體cd 、ab 后,從電刷B流出。這時(shí)導(dǎo)體cd 受力方向變?yōu)閺挠蚁蜃?,?dǎo)體ab 受力方向是從左向右,產(chǎn)生的電磁轉(zhuǎn)矩的方向仍為逆時(shí)針?lè)较颉?</p><p><b> 直流電機(jī)的控制框圖</b></p><p> a.直流電機(jī)的方向控制:</p><p> b.直流電機(jī)的
15、速度控制:</p><p> 當(dāng)相配對(duì)的開(kāi)關(guān)閉合時(shí),直流電機(jī)加速運(yùn)行;當(dāng)開(kāi)關(guān)斷開(kāi)時(shí),直流電機(jī)慣性運(yùn)行(由于摩擦而減速運(yùn)行),所以,要控制直流電動(dòng)機(jī)的速度即是控制開(kāi)關(guān)閉合的時(shí)間,在一段時(shí)間內(nèi)(定義一個(gè)固定周期T),開(kāi)關(guān)持續(xù)閉合時(shí)間越長(zhǎng)(定義這個(gè)時(shí)間為t,t<T),直流電機(jī)的速度就越快,那么,要想給直流電機(jī)加速,即是增加這個(gè)閉合時(shí)間,要想給直流電機(jī)減速,即是減少這個(gè)閉合時(shí)間,想迅速的減慢速度,也可通反向電流更
16、好的達(dá)到效果。</p><p> 直流電機(jī)的程序框圖如下:</p><p> 4.2 步進(jìn)電機(jī)的控制</p><p> 通過(guò)DSP的I/O控制能對(duì)步進(jìn)電機(jī)調(diào)速。在了解步進(jìn)電機(jī)工作原理前提下,掌握DSP I/O總線控制方法,按照步進(jìn)電機(jī)工作原理編寫(xiě)步進(jìn)電機(jī)的驅(qū)動(dòng)程序。使電機(jī)旋轉(zhuǎn),改變脈沖信號(hào)的頻率對(duì)電機(jī)調(diào)速。</p><p> 4.2.
17、1 步進(jìn)電機(jī)的原理</p><p> 步進(jìn)電機(jī)的調(diào)速一般是改變輸入步進(jìn)電機(jī)的脈沖的頻率來(lái)實(shí)現(xiàn)步進(jìn)電機(jī)的調(diào)速,因?yàn)椴竭M(jìn)電機(jī)每給一個(gè)脈沖就轉(zhuǎn)動(dòng)一個(gè)固定的角度,這樣就可以通過(guò)控制步進(jìn)電機(jī)的一個(gè)脈沖到下一個(gè)脈沖的時(shí)間間隔來(lái)改變脈沖的頻率,延時(shí)的長(zhǎng)短來(lái)具體控制步進(jìn)角來(lái)改變電機(jī)的轉(zhuǎn)速,從而實(shí)現(xiàn)步進(jìn)電的調(diào)速。具體的延時(shí)時(shí)間可以通過(guò)軟件來(lái)實(shí)現(xiàn)。</p><p> 這就需要采用單片機(jī)對(duì)步進(jìn)電機(jī)進(jìn)行加減速
18、控制,實(shí)際上就是改變輸出脈沖的時(shí)間間隔,單片機(jī)控制步進(jìn)電機(jī)加減法運(yùn)轉(zhuǎn)可實(shí)現(xiàn)的方法有軟件和硬件兩種 ,軟件方法指的是依靠延時(shí)程序來(lái)改變脈沖輸出的頻率,其中延時(shí)的長(zhǎng)短是動(dòng)態(tài)的,軟件法在電機(jī)控制中, 要不停地產(chǎn)生控制脈沖, 占用了大量的CPU 時(shí)間,使單片機(jī)無(wú)法同時(shí)進(jìn)行其他工作;硬件方法是依靠單片機(jī)內(nèi)部的定時(shí)器來(lái)實(shí)現(xiàn)的,在每次進(jìn)入定時(shí)中斷后,改變定時(shí)常數(shù),從而升速時(shí)使脈沖頻率逐漸增大,減速時(shí)使脈沖頻率逐漸減小,這種方法占用CPU 時(shí)間較少,在
19、各種單片機(jī)中都能實(shí)現(xiàn),是一種比較實(shí)用的調(diào)速方法。</p><p> 4.2.2 步進(jìn)電機(jī)的控制程序框圖 </p><p> 4.3 交通燈的控制</p><p> 用定時(shí)器定時(shí),用I/O口控制紅綠黃燈的開(kāi)關(guān),用硬件外部中斷模擬急救車(chē)的到達(dá)。有急救車(chē)到達(dá)時(shí),兩向?yàn)槿t,以便讓急救車(chē)通過(guò)。急救車(chē)通過(guò)后,交通燈恢復(fù)硬件中斷前的狀態(tài)。本實(shí)驗(yàn)以觸發(fā)開(kāi)關(guān)(紅色按紐)為中斷
20、申請(qǐng),表示有急救車(chē)通過(guò)。</p><p> 4.3.1 交通燈的原理</p><p> 一個(gè)十字路口的交通一般分為兩個(gè)方向,每個(gè)方向具有紅燈,綠燈和黃燈3種,另外每個(gè)方向還具有左轉(zhuǎn)燈,因此每個(gè)方向具有四個(gè)燈。交通燈為每一個(gè)燈的狀態(tài)設(shè)計(jì)了倒計(jì)時(shí)數(shù)碼管顯示功能??梢詾槊恳粋€(gè)燈的狀態(tài)設(shè)置一個(gè)初始值,燈狀態(tài)改變后,開(kāi)始按照這個(gè)初始值倒計(jì)時(shí)。倒計(jì)時(shí)歸零后,燈的狀態(tài)將會(huì)改變至下一個(gè)狀態(tài)。值得注意的
21、是,交通燈兩個(gè)方向的燈的狀態(tài)是相關(guān)的。也就是說(shuō),每個(gè)方向的燈的狀態(tài)影響著另外一個(gè)方向的燈的狀態(tài),這樣才能夠協(xié)調(diào)兩個(gè)方向的車(chē)流。如果每個(gè)方向的燈是獨(dú)立變化的,那么交通燈就沒(méi)有了意義。</p><p> 4.3.2 交通燈的控制框圖</p><p> 交通燈的控制程序框圖:</p><p><b> 五.系統(tǒng)調(diào)試與分析</b></p&g
22、t;<p><b> 調(diào)試結(jié)果如下:</b></p><p> 本次設(shè)計(jì),完成了直流電機(jī)和步進(jìn)電機(jī)轉(zhuǎn)運(yùn),并可以通過(guò)鍵盤(pán)按鍵來(lái)控制改變轉(zhuǎn)速的快慢和正反轉(zhuǎn),以及交通燈的顯示。小鍵盤(pán)上的0表示在數(shù)碼管上顯示是1,以此類推?!?’時(shí)表示直流電機(jī)運(yùn)轉(zhuǎn);‘2’時(shí)表示步進(jìn)電機(jī)運(yùn)轉(zhuǎn);‘3’時(shí)表示交通燈工作;‘4’時(shí)表示直流電機(jī),步進(jìn)電機(jī),交通燈同時(shí)工作。‘5,6’表示改變電機(jī)的正反轉(zhuǎn);‘7
23、,8’表示改變電機(jī)的轉(zhuǎn)速。</p><p> 首先,要正確連接DSP實(shí)驗(yàn)機(jī)箱與電腦的連接,實(shí)驗(yàn)前確認(rèn)機(jī)箱良好,打開(kāi)電腦桌面上的CCS5.0軟件,在my project文件夾中正確添加以編好的程序,生成.out文件,然后裝載到DSP實(shí)驗(yàn)機(jī)箱上面。其次,運(yùn)行程序,觀察直流電機(jī)與步進(jìn)電機(jī)的運(yùn)行情況。按DSP實(shí)驗(yàn)箱上的鍵盤(pán),觀察不同按鍵對(duì)直流電機(jī)和步進(jìn)電機(jī)的運(yùn)行影響并記錄,最后與預(yù)期要達(dá)到的人物要求作對(duì)比,看是否達(dá)到設(shè)
24、計(jì)要求。</p><p> 程序中各模塊的地址如下:</p><p><b> 六、總結(jié)與心得</b></p><p> 通過(guò)這次課程設(shè)計(jì),是我將所學(xué)理論知識(shí)很好地運(yùn)用到實(shí)際工程當(dāng)中,學(xué)到了很多東西,鍛煉了自己的各方面的能力,具體有以下幾點(diǎn):</p><p> 1. 在DSP控制知識(shí)學(xué)習(xí)方面,此次設(shè)計(jì)使我對(duì)課本
25、上學(xué)到的知識(shí)有了進(jìn)一步鞏固,而且對(duì)課本上沒(méi)有設(shè)計(jì)的知識(shí)也作了了解,例如TMS320VC5402的硬件結(jié)構(gòu)和芯片資源的掌握,這里很感謝雷老師上實(shí)驗(yàn)課時(shí)耐心的講解,使我們豐富了自己的知識(shí)。</p><p> 2. 查資料能力方面,通過(guò)這次課程設(shè)計(jì),我進(jìn)一步認(rèn)識(shí)到了查工具書(shū)及網(wǎng)絡(luò)資源的重要性,因?yàn)檎n本上的知識(shí)是有限的,通過(guò)查工具書(shū)能使我們廣泛地吸取知識(shí),補(bǔ)充自己知識(shí)系統(tǒng)的不足。</p><p&g
26、t; 3. 實(shí)用軟件能力及編程能力方面,通過(guò)本次課程設(shè)計(jì),我對(duì)以前做DSP實(shí)驗(yàn)時(shí)用到的CCS5.0軟件有了更熟練的掌握,之前對(duì)DSP的C語(yǔ)言編程不太了解,通過(guò)本次設(shè)計(jì)們我學(xué)習(xí)并基本掌握了一些特殊指令的用法,而且也學(xué)習(xí)了DSP匯編語(yǔ)言和標(biāo)準(zhǔn)C語(yǔ)言混合編程的方法。</p><p><b> 七、參考文獻(xiàn)</b></p><p> 1、鄒彥,《DSP原理與應(yīng)用》
27、電子工業(yè)出版社 2005年</p><p> 2、張勇,《C\C++語(yǔ)言硬件程序設(shè)計(jì)》西安電子科技大學(xué)出版社 2003年</p><p> 3、劉和平 《DSP原理及電機(jī)控制應(yīng)用》 北京航空航天大學(xué)出版社 2006.10</p><p> 4、 唐介 《電機(jī)與拖動(dòng)》 高等教育出版社 2003.7</p
28、><p> 5、 王海生 《微型計(jì)算機(jī)控制技術(shù)》 清華大學(xué)出版社 2007.4</p><p><b> 八、附錄:源代碼</b></p><p><b> 主程序:</b></p><p> /*******main_func.c****/ </p>
29、<p> #include "reg_define.h"</p><p> #include "system_init.h" /*通過(guò)system_init();調(diào)用*/</p><p> #include "IOport_init.h" /*包含后可直接使用所定義的IO端口*/</p><p&
30、gt; #include "Timer0_init.h" /*通過(guò)Timer0_init(unsigned int Tmer0_VAL);調(diào)用*/</p><p> #include "Timer1_init.h" /*通過(guò)Timer1_init(unsigned int Tmer0_VAL);調(diào)用*/</p><p> #include
31、"Interrupt_server.h" /*包含后可直接到所對(duì)應(yīng)的中斷服務(wù)程序中編中斷服務(wù)程序*/</p><p> #include "LED_display_6.h" /*通過(guò)LED_display_6(unsigned int 顯示數(shù)據(jù));調(diào)用*/ </p><p> #include "LED_display_1.h&q
32、uot; </p><p> #include "LED_display_2.h"</p><p> #include "LED_display_34.h" </p><p> #include "LED_display_56.h" </p><p> #include &
33、quot;traffic.h"</p><p> #include <stdio.h> </p><p> unsigned int BJ_code[]={0x07,0x0b,0x0d,0x0e}; </p><p> unsigned int bjcode,dj_code;</p><p> #define
34、 dtime 1000 ; </p><p> void delay(unsigned int d_t);</p><p><b> main()</b></p><p><b> {</b></p><p> system_init();</p><p> Ti
35、mer0_init(0x6fff); /*Tmer0_VAL為T(mén)INT0的定時(shí)時(shí)間常數(shù)*/</p><p> Timer1_init(0x0ffff); /*Tmer0_VAL為T(mén)INT1的定時(shí)時(shí)間常數(shù)*/ </p><p><b> while(1)</b></p><p><b> {</b></p>
36、<p> switch(mode)</p><p><b> {</b></p><p> case 1: BJ_ADDR=BJ_code[bjcode]; </p><p> delay(100);</p><p> LED_display_1(key_code+1); </p>
37、<p> LED_display_2(BJ_code[bjcode]); </p><p> delay(100); break;</p><p> case 2: DJ_ADDR=dj_code; </p><p> delay(100);</p><p> LED_display_1(key_code+1);
38、 </p><p> delay(100); break;</p><p> case 3: traffic(); </p><p> delay(100);</p><p> LED_display_1(key_code+1);</p><p> LED_display_34(key_code); &
39、lt;/p><p> delay(100); break;</p><p> case 4: BJ_ADDR=BJ_code[bjcode]; delay(1000);</p><p> DJ_ADDR=dj_code; delay(100);</p><p> traffic(); delay(100); </p>
40、<p> LED_display_1(key_code+1);</p><p> delay(100); </p><p> default : break; } </p><p><b> } </b></p><p><b> }</b></p>&
41、lt;p> void delay(unsigned int d_t)</p><p><b> { </b></p><p><b> int i,j;</b></p><p> for(i=0;i<d_t;i++)</p><p> {for(j=0;j<1;j++)
42、{}} </p><p><b> }</b></p><p><b> 中斷服務(wù)程序:</b></p><p> /*********** INT_serv.h ***************/</p><p> /*********** 中斷服務(wù)程序 **
43、*************/</p><p> #include "IOport_init.h"</p><p> void traffic();</p><p> /**請(qǐng)?jiān)诖颂幧昝髦鞒绦蛑卸x而在中斷服務(wù)程序中要使用的變量**/</p><p> /**如:extern unsigned int code ;e
44、xtern unsigned int keycode ;**/ </p><p> extern unsigned int bjcode,dj_code,BJ_code[],t_traffic; </p><p> extern void delay(unsigned int d_t); </p><p> unsigned int t0,t1,key_cod
45、e,bj_derect=0,bj_speed=20;</p><p> unsigned int t0_dj, dj_speed=5, dj_period=20,dj_derect=0; </p><p> unsigned int mode,state;</p><p> #define positive 0x0100;</p><p&
46、gt; #define negative 0x0200;</p><p> #define stop 0x0000; </p><p> unsigned int t10=0,t11=0,light_flag;</p><p> unsigned int trdcode[];</p><p> /***NMI中斷服務(wù)程序
47、***/ </p><p> interrupt void NMI_ISR()</p><p><b> { </b></p><p> asm(" NOP");</p><p> asm(" NOP");</p><p> /**請(qǐng)?jiān)诖颂幘帉?xiě)NM
48、I中斷服務(wù)程序**/</p><p><b> return; </b></p><p><b> }</b></p><p> /***TINT0中斷服務(wù)程序***/</p><p> interrupt void TINT0_ISR() </p><p><
49、b> { </b></p><p> asm(" NOP");</p><p> asm(" NOP");</p><p><b> t0++;</b></p><p><b> t0_dj++;</b></p>&l
50、t;p> t_traffic++;</p><p> if(t0>=bj_speed) </p><p><b> {</b></p><p><b> t0=0;</b></p><p><b> t1++;</b></p><p&g
51、t; bjcode=t1%4; </p><p> if(bj_derect) bjcode=3-bjcode; </p><p> }/**請(qǐng)?jiān)诖颂幘帉?xiě)TINT0中斷服務(wù)程序**/ </p><p> if(t0_dj<dj_speed)</p><p><b> {</b></p>&l
52、t;p> dj_code=positive;</p><p> if(dj_derect) dj_code=negative;</p><p><b> }</b></p><p> if(t0_dj>=dj_speed&&t0_dj<dj_period) dj_code=stop;</p>
53、;<p> if(t0_dj>=dj_period) t0_dj=0;</p><p><b> return; </b></p><p><b> }</b></p><p> /***TINT1中斷服務(wù)程序***/</p><p> interrupt void T
54、INT1_ISR() </p><p><b> { </b></p><p> asm(" NOP");</p><p> asm(" NOP");</p><p> /**請(qǐng)?jiān)诖颂幘帉?xiě)TINT1中斷服務(wù)程序**/</p><p><b>
55、; return; </b></p><p><b> } </b></p><p> /***INT0中斷服務(wù)程序***/</p><p> interrupt void INT0_ISR() </p><p><b> { </b></p><p>
56、 asm(" NOP");</p><p> asm(" NOP");</p><p> traffic_ADDR=0x0f000;</p><p> delay(50000);</p><p> delay(50000);</p><p> delay(50000)
57、;</p><p> delay(50000);</p><p> delay(50000);</p><p> delay(50000);</p><p> delay(50000);</p><p> delay(50000);</p><p> /**請(qǐng)?jiān)诖颂幘帉?xiě)INT0中斷服
58、務(wù)程序**/</p><p><b> return; </b></p><p><b> } </b></p><p> /***INT1中斷服務(wù)程序***/</p><p> interrupt void INT1_ISR() </p><p><b>
59、 { </b></p><p> asm(" NOP");</p><p> asm(" NOP");</p><p> /**請(qǐng)?jiān)诖颂幘帉?xiě)INT1中斷服務(wù)程序**/</p><p><b> return; </b></p><p>
60、<b> } </b></p><p> /***INT2中斷服務(wù)程序***/</p><p> interrupt void INT2_ISR() </p><p><b> { </b></p><p> asm(" NOP");</p><p&
61、gt; asm(" NOP");</p><p> key_code=KEY_ADDR;</p><p> key_code&=0x001f;</p><p> switch(key_code)</p><p> { </p><p> case 1
62、: mode=1;break;</p><p> case 2: mode=2;break; </p><p> case 3: mode=3;break;</p><p> case 4: mode=4;break; </p><p> default : break;}</
63、p><p> if(mode==1) </p><p> {switch(key_code) </p><p><b> {</b></p><p> case 5: bj_derect=0; break; </p><p> case 6: bj_derect=1;break; /*
64、反轉(zhuǎn)1*/</p><p> case 7: if(bj_speed>=3) bj_speed--;break; /*加速2*/</p><p> case 8: if(bj_speed<=50) bj_speed++;break; /*減速3*/ </p><p> default : break;}</p><p>&l
65、t;b> }</b></p><p> else if(mode==2) </p><p> {switch(key_code) </p><p><b> {</b></p><p> case 5: dj_derect=0;break; /*正轉(zhuǎn)0*/</p><p&
66、gt; case 6: dj_derect=1;break; /*反轉(zhuǎn)1*/</p><p> case 7: if(dj_speed>=1) dj_speed--;break; /*減速2*/</p><p> case 8: if(dj_speed<dj_period) dj_speed++;break; /*加速3*/</p><p>
67、default : break;}</p><p><b> }</b></p><p> else if(mode==3)</p><p> traffic();</p><p> else if(mode==4) </p><p> {switch(key_code) </p&
68、gt;<p><b> {</b></p><p> case 5: BJ_ADDR=BJ_code[bjcode]; break; </p><p> case 6: DJ_ADDR=dj_code; break; /*反轉(zhuǎn)1*/</p><p> case 7: traffic();break; /*加速2*/&
69、lt;/p><p> default : break; }</p><p> }/**請(qǐng)?jiān)诖颂幘帉?xiě)INT2中斷服務(wù)程序**/</p><p><b> return; </b></p><p><b> } </b></p><p> /***INT3中斷服務(wù)程序***
70、/</p><p> interrupt void INT3_ISR() </p><p><b> { </b></p><p> asm(" NOP");</p><p> asm(" NOP");</p><p> /**請(qǐng)?jiān)诖颂幘帉?xiě)INT3
71、中斷服務(wù)程序**/</p><p><b> return; </b></p><p> IOport_init.h :</p><p> /******* IOport_init.h *******/</p><p> /******* 定義5402的IO端口
72、 *******/</p><p> /* IO port Definition */ </p><p> ioport unsigned int port1008; /*步進(jìn)電機(jī)模塊IO口葉址1008h */</p><p> ioport unsigned int port5008; /*交通燈模塊IO口葉5008h */</p>
73、;<p> ioport unsigned int port6000; /*液晶顯示模塊片選1口地址600xh */</p><p> ioport unsigned int port7000; /*液晶顯示模塊片選2口地址700xh */ </p><p> ioport unsigned int portA008; /*鍵盤(pán)模塊掃描入口地址A008h */</
74、p><p> ioport unsigned int portB000; /*數(shù)碼管顯示模塊IO口葉址B000h */</p><p> ioport unsigned int portB007; /*直流電機(jī)模塊IO口葉址B007h */ </p><p> #define BJ_ADDR port1008 /*步進(jìn)電機(jī)模塊IO口葉址為BJ_ADDR */
75、 </p><p> #define traffic_ADDR port5008 /*交通燈模塊IO口葉址為traffic */ </p><p> #define LCD1_ADDR port6000 /*液晶顯示模塊片選1口地址為L(zhǎng)CD1_ADDR */ </p><p> #define LCD2_ADDR port7000 /*液晶顯示
76、模塊片選2口地址為L(zhǎng)CD2_ADDR */ </p><p> #define KEY_ADDR portA008 /*鍵盤(pán)模塊掃描入口地址為KEY_ADDR */ </p><p> #define LED_ADDR portB000 /*數(shù)碼管顯示模塊IO口地址為L(zhǎng)ED_ADDR */ </p><p> #define DJ_ADDR
77、portB007 /*直流電機(jī)模塊IO口葉址為DJ_ADDR */</p><p> LED_display_1.h:</p><p> /*********** LED_display_1.h ***********/ </p><p> /*********** LED顯示子程序 ***********/</p&
78、gt;<p> unsigned int LED_code_1[]={0x0001,0x3F01,0x0601,0x5B01,0x4f01,0x6601,0x6d01,0x7d01,0x0701,0x7f01,0x6f01,0x7701,0x7c01,0x3901,0x5e01,0x7901,0x7101};</p><p> void display_delay_1(u16 dt);</
79、p><p> void LED_display_1(u16 keycode)</p><p><b> {</b></p><p> LED_ADDR=LED_code_1[keycode];</p><p> display_delay_1(5);</p><p> LED_ADDR=0x
80、0001;</p><p> display_delay_1(1);</p><p><b> }</b></p><p> void display_delay_1(u16 dt)</p><p><b> {</b></p><p><b> int
81、i,j;</b></p><p> for(i=0;i<dt;i++)</p><p> {for(j=0;j<2;j++) {} }</p><p><b> }</b></p><p> LED_display_2.h :</p><p> /********
82、*** LED_display_2.h ***********/ </p><p> /*********** LED顯示子程序 ***********/</p><p> unsigned int LED_code_2[]={0x0002,0x3F02,0x0602,0x5B02,0x4f02,0x6602,0x6d02,0x7d02,0x0702
83、,0x7f02,0x6f02,0x7702,0x7c02,0x3902,0x5e02,0x7902,0x7102};</p><p> void display_delay_2(u16 dt2);</p><p> void LED_display_2(u16 keycode)</p><p><b> {</b></p>
84、<p> LED_ADDR=LED_code_2[keycode];</p><p> display_delay_2(5);</p><p> LED_ADDR=0x0001+1;</p><p> display_delay_2(1);</p><p><b> }</b></p>
85、<p> void display_delay_2(u16 dt2)</p><p><b> {</b></p><p><b> int i,j;</b></p><p> for(i=0;i<dt2;i++)</p><p> {for(j=0;j<10;j++
86、) {} }</p><p><b> }</b></p><p> LED_display_34.h: </p><p> /*********** LED_display_34.h ***********/ </p><p> /*********** LED顯示子程序 *
87、**********/</p><p> unsigned int LED_code_34[]={0x3F01,0x0601,0x5B01,0x4f01,0x6601,0x6d01,0x7d01,0x0701,0x7f01,0x6f01};</p><p> void display_delay_34(unsigned int dt3);</p><p> v
88、oid LED_display_34(unsigned int keycode)</p><p><b> {</b></p><p> unsigned int k3,k4,temp3,show_delay_time3=2,hide_delay_time3=1;</p><p> k3=keycode/10;</p>&l
89、t;p> LED_ADDR=LED_code_34[k3]+2;</p><p> display_delay_34(show_delay_time3);</p><p> LED_ADDR=0x0001+3;</p><p> display_delay_34(hide_delay_time3);</p><p> temp
90、3=keycode-k3*10;</p><p><b> k4=temp3;</b></p><p> LED_ADDR=LED_code_34[k4]+3;</p><p> display_delay_34(show_delay_time3);</p><p> LED_ADDR=0x0001+4;<
91、/p><p> display_delay_34(hide_delay_time3);</p><p><b> }</b></p><p> void display_delay_34(unsigned int dt3)</p><p><b> {</b></p><p&
92、gt;<b> int i,j;</b></p><p> for(i=0;i<dt3;i++)</p><p> {for(j=0;j<1;j++) {} }</p><p><b> }</b></p><p> LED_display_56.h :</p>
93、<p> /*********** LED_display_56.h ***********/ </p><p> /*********** LED顯示子程序 ***********/</p><p> unsigned int LED_code_56[]={0x3F01,0x0601,0x5B01,0x4f01,0x6601,0x6d
94、01,0x7d01,0x0701,0x7f01,0x6f01};</p><p> void display_delay_56(unsigned int dt4);</p><p> void LED_display_56(unsigned int keycode)</p><p><b> {</b></p><p&
95、gt; unsigned int k5,k6,temp4,show_delay_time4=2,hide_delay_time4=1;</p><p> k5=keycode/10;</p><p> LED_ADDR=LED_code_56[k5]+4;</p><p> display_delay_56(show_delay_time4);</p&
96、gt;<p> LED_ADDR=0x0001+4;</p><p> display_delay_56(hide_delay_time4);</p><p> temp4=keycode-k5*10;</p><p><b> k6=temp4;</b></p><p> LED_ADDR=LE
97、D_code_56[k6]+5;</p><p> display_delay_56(show_delay_time4);</p><p> LED_ADDR=0x0001+5;</p><p> display_delay_56(hide_delay_time4);</p><p><b> }</b><
98、/p><p> void display_delay_56(unsigned int dt4)</p><p><b> {</b></p><p><b> int i,j;</b></p><p> for(i=0;i<dt4;i++)</p><p> {f
99、or(j=0;j<1;j++) {} }</p><p><b> }</b></p><p><b> LED顯示子程序:</b></p><p> /*********** LED_display_6.h ***********/ </p><p> /****
100、******* LED顯示子程序 ***********/</p><p> unsigned int LED_code_6[]={0x3F01,0x0601,0x5B01,0x4f01,0x6601,0x6d01,0x7d01,0x0701,0x7f01,0x6f01};</p><p> void display_delay_6(unsigned int dt);
101、</p><p> void LED_display_6(unsigned int keycode)</p><p><b> {</b></p><p> unsigned int k1,k2,k3,k4,k5,k6,temp1,temp2,show_delay_time=2,hide_delay_time=1;</p>
102、<p> k1=keycode/100000; </p><p> LED_ADDR=LED_code_6[k1]+0;</p><p> display_delay_6(show_delay_time);</p><p> LED_ADDR=0x0001+0;</p><p> display_delay_6(hide_
103、delay_time);</p><p> temp1=keycode-k1*100000;</p><p> k2=temp1/10000;</p><p> LED_ADDR=LED_code_6[k2]+1;</p><p> display_delay_6(show_delay_time);</p><p&
104、gt; LED_ADDR=0x0001+1;</p><p> display_delay_6(hide_delay_time);</p><p> temp2=temp1-k2*10000;</p><p> k3=temp2/1000; </p><p> LED_ADDR=LED_code_6[k3]+2;</p>
105、<p> display_delay_6(show_delay_time);</p><p> LED_ADDR=0x0001+2;</p><p> display_delay_6(hide_delay_time);</p><p> temp1=temp2-k3*1000;</p><p> k4=temp1/10
106、0; </p><p> LED_ADDR=LED_code_6[k4]+3;</p><p> display_delay_6(show_delay_time);</p><p> LED_ADDR=0x0001+3;</p><p> display_delay_6(hide_delay_time);</p><
107、;p> temp2=temp1-k4*100;</p><p> k5=temp2/10;</p><p> LED_ADDR=LED_code_6[k5]+4;</p><p> display_delay_6(show_delay_time);</p><p> LED_ADDR=0x0001+4;</p>
108、<p> display_delay_6(hide_delay_time);</p><p> temp1=temp2-k5*10;</p><p><b> k6=temp1;</b></p><p> LED_ADDR=LED_code_6[k6]+5;</p><p> display_dela
109、y_6(show_delay_time);</p><p> LED_ADDR=0x0001+5;</p><p> display_delay_6(hide_delay_time);</p><p><b> }</b></p><p> void display_delay_6(unsigned int dt
110、)</p><p><b> {</b></p><p><b> int i,j;</b></p><p> for(i=0;i<dt;i++)</p><p> {for(j=0;j<1;j++) {} }</p><p><b> }&
111、lt;/b></p><p><b> 定時(shí)器初始化程序:</b></p><p> /*********** Timer0_init.h ***********/ </p><p> /*********** 定時(shí)器初始化程序 ***********/</p><p> /*
112、****定時(shí)器控制寄存器TCR各位的功能******/</p><p> /*| 15-12 | 11 | 10 |9-6| 5 | 4 |3-0 |*/</p><p> /*|Reserved|Soft|free|PSC|TRB|TSS|TDDR|*/ </p><p> /*TRB=1重新加載, TSS=1定時(shí)器停止工作*/</p>&
113、lt;p> /*定時(shí)中斷的周期T=(PRD+1)X(TDDR+1)XCLKOUT */ </p><p> /*IFR/IMR各位的功能,IMR=1開(kāi)放,IFR=1有請(qǐng)求,進(jìn)出中斷服務(wù)程序過(guò)程中IMR自動(dòng)屏蔽/開(kāi)啟,IFR自動(dòng)清除*/</p><p> /*| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6
114、| 5 | 4 | 3 | 2 | 1 | 0 |*/</p><p> /*|RECVD|RECVD|DMAC5|DMAC4|BXINT1|BRINT1|HPINT|INT3|TINT1|DMAC0|BXINT0|BRINT0|TINT0|INT2|INT1|INT0|*/</p><p> #include "reg_define.h"
115、</p><p> void Timer0_init(u16 Tmer0_VAL) /*請(qǐng)?jiān)谥鞒绦蛑谐跏蓟糠滞ㄟ^(guò) Timer0_init(u16 定時(shí)常數(shù));調(diào)用*/</p><p><b> { </b></p><p> IMR&=0x0fff7; /**通過(guò)向IMR中TINT0寫(xiě)0關(guān)閉所要使用的中斷的相應(yīng)標(biāo)志位,
116、IMR=1開(kāi)放**/ </p><p> asm(" SSBX INTM"); /**關(guān)總中斷*/ </p><p> TCR0=0x0010;/*STOP THE TIMER0 */</p><p> PRD0=Tmer0_VAL;/*PRD0=Tmer0_VAL */</p><p> TCR0=0x
117、002A;/*TDDR=1001B, TRB=1 AUTO LOAD THE PSC, TSS=0 START THE TIMER0 */ </p><p> IFR|=0x0008;/*清TINT0中斷標(biāo)志位 */</p><p> IMR|=0x0008;/*開(kāi)TINT0的IMR中斷標(biāo)屏蔽位 */ </p><p> asm("
118、; RSBX INTM"); /**開(kāi)總中斷*/ </p><p><b> }</b></p><p><b> 定時(shí)器初始化程序:</b></p><p> /*********** Timer1_init.h ***********/ </p><p>
119、/*********** 定時(shí)器初始化程序 ***********/</p><p> /*****定時(shí)器控制寄存器TCR各位的功能******/</p><p> /*| 15-12 | 11 | 10 |9-6| 5 | 4 |3-0 |*/</p><p> /*|Reserved|Soft|free|PSC|TRB|TSS|TDDR|*
120、/ </p><p> /*TRB=1重新加載, TSS=1定時(shí)器停止工作*/</p><p> /*定時(shí)中斷的周期T=(PRD+1)X(TDDR+1)XCLKOUT */ </p><p> /*IFR/IMR各位的功能,IMR=1開(kāi)放,IFR=1有請(qǐng)求,進(jìn)出中斷服務(wù)程序過(guò)程中IMR自動(dòng)屏蔽/開(kāi)啟,IFR自動(dòng)清除*/</p><p>
121、 /*| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |*/</p><p> /*|RECVD|RECVD|DMAC5|DMAC4|BXINT1|BRINT1|HPINT|INT3|TINT1|DMAC0|BXINT0|BRINT0|TINT0|INT2|INT1
122、|INT0|*/</p><p> #include "reg_define.h" </p><p> void Timer1_init(u16 Tmer1_VAL) /*請(qǐng)?jiān)谥鞒绦蛑谐跏蓟糠滞ㄟ^(guò) Timer1_init(u16 定時(shí)常數(shù));調(diào)用*/</p><p><b> { </b></p>
123、<p> IMR&=0x0ff7f; /**通過(guò)向IMR中TINT0寫(xiě)0關(guān)閉所要使用的中斷的相應(yīng)標(biāo)志位,IMR=1開(kāi)放**/ </p><p> asm(" SSBX INTM"); /**關(guān)總中斷*/ </p><p> TCR1=0x0010;/*STOP THE TIMER0 */</p><p> P
124、RD1=Tmer1_VAL;/*PRD=FFFF */</p><p> TCR1=0x002A;/*TDDR=1001B, TRB=1 AUTO LOAD THE PSC, TSS=0 START THE TIMER0 */ </p><p> IFR|=0x0080;/*清TINT0中斷標(biāo)志位 */</p><p> IMR|=0x0080;
125、/*開(kāi)TINT0的IMR中斷標(biāo)屏蔽位 */ </p><p> asm(" RSBX INTM"); /**開(kāi)總中斷*/ </p><p><b> }</b></p><p><b> 定時(shí)器初始化程序:</b></p><p> /***********
126、 Timer1_init.h ***********/ </p><p> /*********** 定時(shí)器初始化程序 ***********/</p><p> /*****定時(shí)器控制寄存器TCR各位的功能******/</p><p> /*| 15-12 | 11 | 10 |9-6| 5 | 4 |3-0 |*/<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- dsp課程設(shè)計(jì)實(shí)驗(yàn)
- dsp課程設(shè)計(jì)實(shí)驗(yàn)
- dsp課程設(shè)計(jì)--dsp原理及應(yīng)用實(shí)驗(yàn)報(bào)告
- 基于dsp的圖像處理-dsp課程設(shè)計(jì)
- dsp課程設(shè)計(jì)---—基于dsp的gpgga提取
- dsp課程設(shè)計(jì)-基于dsp的gpgga提取
- dsp課程設(shè)計(jì)---dsp芯片簡(jiǎn)介
- dsp課程設(shè)計(jì)---基于dsp的bios模塊設(shè)計(jì)實(shí)現(xiàn)
- dsp課程設(shè)計(jì)fft的dsp實(shí)現(xiàn)
- dsp課程設(shè)計(jì)--調(diào)制解調(diào)實(shí)驗(yàn)報(bào)告
- dsp課程設(shè)計(jì)報(bào)告--fft的dsp實(shí)現(xiàn)
- dsp實(shí)驗(yàn)講義 -課程中心
- dsp課程設(shè)計(jì)
- dsp實(shí)驗(yàn)
- dsp課程設(shè)計(jì)---基于dsp的回波的產(chǎn)生與抵消
- dsp課程設(shè)計(jì)--基于dsp的溫度控制系統(tǒng)的設(shè)計(jì)
- dsp課程設(shè)計(jì)——基于dsp的鋸齒波發(fā)生器設(shè)計(jì)
- dsp課程設(shè)計(jì)報(bào)告
- dsp課程設(shè)計(jì)--基于dsp的spi接口da轉(zhuǎn)換系統(tǒng)設(shè)計(jì)
- dsp課程設(shè)計(jì)報(bào)告--dsp芯片應(yīng)用系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論