2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  DSP課程設(shè)計</b></p><p>  2012年6 月2日</p><p><b>  目 錄</b></p><p>  一、 緒論……………………………………………………………..3</p><p>  二、 設(shè)計的任務(wù)……………………………………………

2、………..3</p><p>  三、 設(shè)計的要求……………………………………………………..4</p><p>  四、 設(shè)計方案………………………………………………………...4</p><p>  4.1 直流電機的控制……………………………………………….…4 </p><p>  4.1.1 直流電機的原理……………………………

3、………….....4</p><p>  4.1.2 直流電機的控制程序框圖………………………………...4</p><p>  4.2 步進電機的控制…………………………………………….......6</p><p>  4.2.1 步進電機的原理……………………………………..…...6</p><p>  4.2.2 步進電機的控制程序

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>  七、參考文獻………………………………………………………...12</p><p>  八、附錄……………………………………………………………...12</p><p><b>  一、緒論&

6、lt;/b></p><p>  DSP數(shù)字信號處理(Digital Signal Processing ,簡稱DSP)是一門涉及許多科學(xué)而又廣泛應(yīng)用于許多領(lǐng)域的新學(xué)領(lǐng)域。數(shù)字信號處理是一種通過使用數(shù)學(xué)技巧執(zhí)行轉(zhuǎn)換或提取信息,來處理現(xiàn)實信號的方法,這些信號由數(shù)字序列表示。本次設(shè)計的是基于DSP原理設(shè)計的直流電機,步進電機,交通燈控制軟硬件系統(tǒng)。</p><p>  直流電機定義為輸出

7、或輸入為直流電能的旋轉(zhuǎn)電機,它是能實現(xiàn)直流電能和機械能互相轉(zhuǎn)換的電機。當(dāng)它作電動機運行時是直流電動機,將電能轉(zhuǎn)換為機械能;作發(fā)電機運行時是直流發(fā)電機,將機械能轉(zhuǎn)換為電能。</p><p>  步進電機是將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。它的調(diào)速一般是改變輸入步進電機的脈沖的頻率來實現(xiàn)步進電機的調(diào)速,因為步進電機每給一個脈沖就轉(zhuǎn)動一個固定的角度,這樣就可以通過控制步進電機的一個脈沖到下一個脈沖的時間間

8、隔來改變脈沖的頻率,延時的長短來具體控制步進角來改變電機的轉(zhuǎn)速,從而實現(xiàn)步進電機的調(diào)速。</p><p>  交通燈是利用發(fā)光二極管亮滅模擬交通信號,數(shù)碼管現(xiàn)實時間,利用TMS320VS5420 DSP片上定時器產(chǎn)生時鐘計數(shù),設(shè)計模擬實際生活中十字路口交通燈。</p><p><b>  二、設(shè)計的任務(wù)</b></p><p>  1. 編程實

9、現(xiàn)在現(xiàn)有實驗箱上整合步進電機、直流電機、交通燈等實驗項目。</p><p>  2. 三個實驗可以通過鍵盤進行模式選擇來切換(1步進電機控制,2直流電機控制,3交通燈控制,4三個實驗同時進行),并在LED左數(shù)第一位上顯示模式。</p><p>  3. 步進電機和直流電機的正反轉(zhuǎn)、加減速在鍵盤上進行控制,并在LED上顯示步進電機和直流電機的運行狀態(tài)。</p><p>

10、;  4. 交通燈控制時應(yīng)在LED上顯示時間的變化。交通燈東西、南北的時間可通過鍵盤設(shè)定。</p><p>  5. 三個實驗同時進行時只顯示模式,各實驗的參數(shù)都可通過鍵盤設(shè)置。</p><p><b>  三、設(shè)計的要求</b></p><p>  1.利用DSP的I/O操作編制程序輸出一串脈沖控制電機的正轉(zhuǎn)、反轉(zhuǎn)、加速、減速、停止。<

11、/p><p>  2.通過DSP的I/O控制能對步進電機調(diào)速。</p><p>  3.利用TMS320VC5402的片內(nèi)定時器中斷,通過鍵盤直流電機和步進電機的正轉(zhuǎn)、反轉(zhuǎn)、加速、減速。并將送往步進電機的代碼顯示到LED上。</p><p>  4.能夠正確的模擬交通燈,能響應(yīng)硬件中斷和定時中斷</p><p>  5.運用C語言編程。</

12、p><p><b>  四、設(shè)計方案</b></p><p>  4.1 直流電機的控制</p><p>  利用DSP的I/O操作編制程序輸出一串脈沖控制電機的正轉(zhuǎn)、反轉(zhuǎn)、加速、減速、停止 。編寫定時器初始化程序(用于測速)、外部硬件中斷服務(wù)程序,根據(jù)占空比×速度=常數(shù)的原則進行調(diào)速。</p><p>  4.1

13、.1 直流電機的原理</p><p>  導(dǎo)體受力的方向用左手定則確定。這一對電磁力形成了作用于電樞一個力矩,這個力矩在旋轉(zhuǎn)電機里稱為電磁轉(zhuǎn)矩,轉(zhuǎn)矩的方向是逆時針方向,企圖使電樞逆時針方向轉(zhuǎn)動。如果此電磁轉(zhuǎn)矩能夠克服電樞上的阻轉(zhuǎn)矩(例如由摩擦引起的阻轉(zhuǎn)矩以及其它負載轉(zhuǎn)矩),電樞就能按逆時針方向旋轉(zhuǎn)起來。 </p><p>  當(dāng)電樞轉(zhuǎn)了180°后,導(dǎo)體 cd轉(zhuǎn)到 N極下,導(dǎo)體ab

14、轉(zhuǎn)到S極下時,由于直流電源供給的電流方向不變,仍從電刷 A流入,經(jīng)導(dǎo)體cd 、ab 后,從電刷B流出。這時導(dǎo)體cd 受力方向變?yōu)閺挠蚁蜃?,?dǎo)體ab 受力方向是從左向右,產(chǎn)生的電磁轉(zhuǎn)矩的方向仍為逆時針方向。 </p><p><b>  直流電機的控制框圖</b></p><p>  a.直流電機的方向控制:</p><p>  b.直流電機的

15、速度控制:</p><p>  當(dāng)相配對的開關(guān)閉合時,直流電機加速運行;當(dāng)開關(guān)斷開時,直流電機慣性運行(由于摩擦而減速運行),所以,要控制直流電動機的速度即是控制開關(guān)閉合的時間,在一段時間內(nèi)(定義一個固定周期T),開關(guān)持續(xù)閉合時間越長(定義這個時間為t,t<T),直流電機的速度就越快,那么,要想給直流電機加速,即是增加這個閉合時間,要想給直流電機減速,即是減少這個閉合時間,想迅速的減慢速度,也可通反向電流更

16、好的達到效果。</p><p>  直流電機的程序框圖如下:</p><p>  4.2 步進電機的控制</p><p>  通過DSP的I/O控制能對步進電機調(diào)速。在了解步進電機工作原理前提下,掌握DSP I/O總線控制方法,按照步進電機工作原理編寫步進電機的驅(qū)動程序。使電機旋轉(zhuǎn),改變脈沖信號的頻率對電機調(diào)速。</p><p>  4.2.

17、1 步進電機的原理</p><p>  步進電機的調(diào)速一般是改變輸入步進電機的脈沖的頻率來實現(xiàn)步進電機的調(diào)速,因為步進電機每給一個脈沖就轉(zhuǎn)動一個固定的角度,這樣就可以通過控制步進電機的一個脈沖到下一個脈沖的時間間隔來改變脈沖的頻率,延時的長短來具體控制步進角來改變電機的轉(zhuǎn)速,從而實現(xiàn)步進電的調(diào)速。具體的延時時間可以通過軟件來實現(xiàn)。</p><p>  這就需要采用單片機對步進電機進行加減速

18、控制,實際上就是改變輸出脈沖的時間間隔,單片機控制步進電機加減法運轉(zhuǎn)可實現(xiàn)的方法有軟件和硬件兩種 ,軟件方法指的是依靠延時程序來改變脈沖輸出的頻率,其中延時的長短是動態(tài)的,軟件法在電機控制中, 要不停地產(chǎn)生控制脈沖, 占用了大量的CPU 時間,使單片機無法同時進行其他工作;硬件方法是依靠單片機內(nèi)部的定時器來實現(xiàn)的,在每次進入定時中斷后,改變定時常數(shù),從而升速時使脈沖頻率逐漸增大,減速時使脈沖頻率逐漸減小,這種方法占用CPU 時間較少,在

19、各種單片機中都能實現(xiàn),是一種比較實用的調(diào)速方法。</p><p>  4.2.2 步進電機的控制程序框圖 </p><p>  4.3 交通燈的控制</p><p>  用定時器定時,用I/O口控制紅綠黃燈的開關(guān),用硬件外部中斷模擬急救車的到達。有急救車到達時,兩向為全紅,以便讓急救車通過。急救車通過后,交通燈恢復(fù)硬件中斷前的狀態(tài)。本實驗以觸發(fā)開關(guān)(紅色按紐)為中斷

20、申請,表示有急救車通過。</p><p>  4.3.1 交通燈的原理</p><p>  一個十字路口的交通一般分為兩個方向,每個方向具有紅燈,綠燈和黃燈3種,另外每個方向還具有左轉(zhuǎn)燈,因此每個方向具有四個燈。交通燈為每一個燈的狀態(tài)設(shè)計了倒計時數(shù)碼管顯示功能??梢詾槊恳粋€燈的狀態(tài)設(shè)置一個初始值,燈狀態(tài)改變后,開始按照這個初始值倒計時。倒計時歸零后,燈的狀態(tài)將會改變至下一個狀態(tài)。值得注意的

21、是,交通燈兩個方向的燈的狀態(tài)是相關(guān)的。也就是說,每個方向的燈的狀態(tài)影響著另外一個方向的燈的狀態(tài),這樣才能夠協(xié)調(diào)兩個方向的車流。如果每個方向的燈是獨立變化的,那么交通燈就沒有了意義。</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è)計,完成了直流電機和步進電機轉(zhuǎn)運,并可以通過鍵盤按鍵來控制改變轉(zhuǎn)速的快慢和正反轉(zhuǎn),以及交通燈的顯示。小鍵盤上的0表示在數(shù)碼管上顯示是1,以此類推?!?’時表示直流電機運轉(zhuǎn);‘2’時表示步進電機運轉(zhuǎn);‘3’時表示交通燈工作;‘4’時表示直流電機,步進電機,交通燈同時工作。‘5,6’表示改變電機的正反轉(zhuǎn);‘7

23、,8’表示改變電機的轉(zhuǎn)速。</p><p>  首先,要正確連接DSP實驗機箱與電腦的連接,實驗前確認機箱良好,打開電腦桌面上的CCS5.0軟件,在my project文件夾中正確添加以編好的程序,生成.out文件,然后裝載到DSP實驗機箱上面。其次,運行程序,觀察直流電機與步進電機的運行情況。按DSP實驗箱上的鍵盤,觀察不同按鍵對直流電機和步進電機的運行影響并記錄,最后與預(yù)期要達到的人物要求作對比,看是否達到設(shè)

24、計要求。</p><p>  程序中各模塊的地址如下:</p><p><b>  六、總結(jié)與心得</b></p><p>  通過這次課程設(shè)計,是我將所學(xué)理論知識很好地運用到實際工程當(dāng)中,學(xué)到了很多東西,鍛煉了自己的各方面的能力,具體有以下幾點:</p><p>  1. 在DSP控制知識學(xué)習(xí)方面,此次設(shè)計使我對課本

25、上學(xué)到的知識有了進一步鞏固,而且對課本上沒有設(shè)計的知識也作了了解,例如TMS320VC5402的硬件結(jié)構(gòu)和芯片資源的掌握,這里很感謝雷老師上實驗課時耐心的講解,使我們豐富了自己的知識。</p><p>  2. 查資料能力方面,通過這次課程設(shè)計,我進一步認識到了查工具書及網(wǎng)絡(luò)資源的重要性,因為課本上的知識是有限的,通過查工具書能使我們廣泛地吸取知識,補充自己知識系統(tǒng)的不足。</p><p&g

26、t;  3. 實用軟件能力及編程能力方面,通過本次課程設(shè)計,我對以前做DSP實驗時用到的CCS5.0軟件有了更熟練的掌握,之前對DSP的C語言編程不太了解,通過本次設(shè)計們我學(xué)習(xí)并基本掌握了一些特殊指令的用法,而且也學(xué)習(xí)了DSP匯編語言和標(biāo)準(zhǔn)C語言混合編程的方法。</p><p><b>  七、參考文獻</b></p><p>  1、鄒彥,《DSP原理與應(yīng)用》

27、電子工業(yè)出版社 2005年</p><p>  2、張勇,《C\C++語言硬件程序設(shè)計》西安電子科技大學(xué)出版社 2003年</p><p>  3、劉和平 《DSP原理及電機控制應(yīng)用》 北京航空航天大學(xué)出版社 2006.10</p><p>  4、 唐介 《電機與拖動》 高等教育出版社 2003.7</p

28、><p>  5、 王海生 《微型計算機控制技術(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" /*通過system_init();調(diào)用*/</p><p>  #include "IOport_init.h" /*包含后可直接使用所定義的IO端口*/</p><p&

30、gt;  #include "Timer0_init.h" /*通過Timer0_init(unsigned int Tmer0_VAL);調(diào)用*/</p><p>  #include "Timer1_init.h" /*通過Timer1_init(unsigned int Tmer0_VAL);調(diào)用*/</p><p>  #include

31、"Interrupt_server.h" /*包含后可直接到所對應(yīng)的中斷服務(wù)程序中編中斷服務(wù)程序*/</p><p>  #include "LED_display_6.h" /*通過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為TINT0的定時時間常數(shù)*/</p><p>  Timer1_init(0x0ffff); /*Tmer0_VAL為TINT1的定時時間常數(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>  /**請在此處申明主程序中定義而在中斷服務(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>  /**請在此處編寫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>  }/**請在此處編寫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>  /**請在此處編寫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>  /**請在此處編寫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>  /**請在此處編寫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>  }/**請在此處編寫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>  /**請在此處編寫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; /*步進電機模塊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; /*鍵盤模塊掃描入口地址A008h */</

74、p><p>  ioport unsigned int portB000; /*數(shù)碼管顯示模塊IO口葉址B000h */</p><p>  ioport unsigned int portB007; /*直流電機模塊IO口葉址B007h */ </p><p>  #define BJ_ADDR port1008 /*步進電機模塊IO口葉址為BJ_ADDR */

75、 </p><p>  #define traffic_ADDR port5008 /*交通燈模塊IO口葉址為traffic */ </p><p>  #define LCD1_ADDR port6000 /*液晶顯示模塊片選1口地址為LCD1_ADDR */ </p><p>  #define LCD2_ADDR port7000 /*液晶顯示

76、模塊片選2口地址為LCD2_ADDR */ </p><p>  #define KEY_ADDR portA008 /*鍵盤模塊掃描入口地址為KEY_ADDR */ </p><p>  #define LED_ADDR portB000 /*數(shù)碼管顯示模塊IO口地址為LED_ADDR */ </p><p>  #define DJ_ADDR

77、portB007 /*直流電機模塊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>  定時器初始化程序:</b></p><p>  /*********** Timer0_init.h ***********/ </p><p>  /*********** 定時器初始化程序 ***********/</p><p>  /*

112、****定時器控制寄存器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定時器停止工作*/</p>&

113、lt;p>  /*定時中斷的周期T=(PRD+1)X(TDDR+1)XCLKOUT */ </p><p>  /*IFR/IMR各位的功能,IMR=1開放,IFR=1有請求,進出中斷服務(wù)程序過程中IMR自動屏蔽/開啟,IFR自動清除*/</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) /*請在主程序中初始化部分通過 Timer0_init(u16 定時常數(shù));調(diào)用*/</p><p><b>  { </b></p><p>  IMR&=0x0fff7; /**通過向IMR中TINT0寫0關(guān)閉所要使用的中斷的相應(yīng)標(biāo)志位,

116、IMR=1開放**/ </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;/*開TINT0的IMR中斷標(biāo)屏蔽位 */ </p><p>  asm("

118、; RSBX INTM"); /**開總中斷*/ </p><p><b>  }</b></p><p><b>  定時器初始化程序:</b></p><p>  /*********** Timer1_init.h ***********/ </p><p>  

119、/*********** 定時器初始化程序 ***********/</p><p>  /*****定時器控制寄存器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定時器停止工作*/</p><p>  /*定時中斷的周期T=(PRD+1)X(TDDR+1)XCLKOUT */ </p><p>  /*IFR/IMR各位的功能,IMR=1開放,IFR=1有請求,進出中斷服務(wù)程序過程中IMR自動屏蔽/開啟,IFR自動清除*/</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) /*請在主程序中初始化部分通過 Timer1_init(u16 定時常數(shù));調(diào)用*/</p><p><b>  { </b></p>

123、<p>  IMR&=0x0ff7f; /**通過向IMR中TINT0寫0關(guān)閉所要使用的中斷的相應(yīng)標(biāo)志位,IMR=1開放**/ </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、/*開TINT0的IMR中斷標(biāo)屏蔽位 */ </p><p>  asm(" RSBX INTM"); /**開總中斷*/ </p><p><b>  }</b></p><p><b>  定時器初始化程序:</b></p><p>  /***********

126、 Timer1_init.h ***********/ </p><p>  /*********** 定時器初始化程序 ***********/</p><p>  /*****定時器控制寄存器TCR各位的功能******/</p><p>  /*| 15-12 | 11 | 10 |9-6| 5 | 4 |3-0 |*/<

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論