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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課程設計說明書</b></p><p><b>  設計題目:</b></p><p>  學 院:機械工程學院</p><p>  專 業(yè):機械設計制造及其自動化</p><p><b>  班 級:</b></p>

2、<p><b>  學 號:</b></p><p><b>  姓 名: </b></p><p><b>  指導教師:</b></p><p><b>  目 錄</b></p><p>  1. 課程設計要求1&l

3、t;/p><p>  2. 系統(tǒng)功能分析與方案確定1</p><p>  方案一:(簡易紅外遙控電路)1</p><p>  方案二:(利用紅外遙控開關電路)2</p><p><b>  方案比較3</b></p><p>  3. 系統(tǒng)主要硬件電路模塊設計3</p><

4、;p>  3.1蜂鳴器電路模塊3</p><p>  3.2液晶屏顯示模塊4</p><p>  3.3紅外遙控模塊5</p><p>  3.4單片機CPU最小系統(tǒng)5</p><p>  3.5 單片機硬件端口分配6</p><p>  4. 程序軟件設計與分析7</p><p&

5、gt;  4.1系統(tǒng)軟件分析及詳細技術文件設計7</p><p>  4.2系統(tǒng)軟件主程序設計8</p><p>  4.3外部中斷程序設計9</p><p>  4.4按鍵檢測和處理模塊設計12</p><p>  5. 后續(xù)有待完善和提高的工作12</p><p><b>  6. 結束語13

6、</b></p><p><b>  參考文獻14</b></p><p><b>  附錄15</b></p><p><b>  1. 課程設計要求</b></p><p>  設計一個智能小車控制系統(tǒng),要求具有:</p><p> 

7、 1、小車能實現(xiàn)前進、后退、轉彎等各種簡單的動作;</p><p>  2、用紅外遙控實現(xiàn)各種動作;</p><p>  2. 系統(tǒng)功能分析與方案確定</p><p>  根據設計要求的功能,結合單片機課程所學知識,分析如下:系統(tǒng)要求能夠實現(xiàn)用紅外遙控實現(xiàn)小車前進、后退、轉彎等各種簡單的動作。那就需要用到紅外遙控模塊,根據任務書的要求,利用單片機設計一個遙控開關電路

8、,可以擬定以下的兩種方案。</p><p>  方案一:(簡易紅外遙控電路)</p><p>  在不需要多路控制的應用場合,可以使用由常規(guī)集成電路組成的單通道紅外遙控電路。這種遙控電路不需要使用較貴的專用編譯碼器,因此成本較低。</p><p><b>  紅外發(fā)射部分</b></p><p>  考慮到本方案電路是簡

9、單的單通道遙控器,可直接產生一個控制功能的震蕩頻率,再通過紅外發(fā)光二極管發(fā)射出去。</p><p><b>  紅外接收部分</b></p><p>  當紅外接收頭接收到控制頻率時,由一個電路對其進行解調并產生相應的控制功能。</p><p>  方案二:(利用紅外遙控開關電路)</p><p>  紅外線發(fā)射/接收控

10、制電路均采用單片機來實現(xiàn),輸出控制方式可選擇,實用性強。方案結構圖:</p><p><b>  紅外發(fā)射部分:</b></p><p>  當按下遙控按鈕時,單片機產生相應的控制脈沖,由紅外發(fā)光二極管發(fā)射出去。</p><p><b>  紅外接收部分:</b></p><p>  當紅外接收器

11、接收到控制脈沖后,由控制方式選擇開關選擇是“互鎖”還是單路控制,再由單片機處理后,對相應的受控電器產生控制。</p><p><b>  方案比較</b></p><p>  綜上所述通過比較兩套方案,方案一未采用單片機控制,功能過于單一,僅能對一路電器進行簡單的遙控;方案二的紅外線發(fā)射/接電路簡單,可控制多個電器,實用性強。且本設計用到的元器件較少,電路相對簡單實用

12、。所以本設計采用方案二作為設計藍本。</p><p>  最后剩下的就是每當遙控器按下一個按鈕時,蜂鳴器輸出提醒模塊,這個功能模塊可以使用定時器輸出一定頻率的方波信號來獲得蜂鳴器發(fā)出一定頻率的聲音。收控制電路采用單片機來實現(xiàn),</p><p>  根據上述分析,由硬件功能可以將本系統(tǒng)分解為如下 5 個功能模塊:</p><p>  1.蜂鳴器發(fā)音軟硬件模塊,采用蜂鳴

13、器及其接口電路;</p><p>  2.紅外遙控軟硬件模塊,采用紅外遙控板及其接口電路;</p><p>  4.lcd液晶顯示軟硬件模塊,采用lcd液晶屏顯示屏及其接口電路;</p><p>  5.系統(tǒng) CPU 模塊,采用 STC89c52 最小系統(tǒng)。</p><p>  3. 系統(tǒng)主要硬件電路模塊設計</p><p

14、>  根據上述分析確定的設計方案,本系統(tǒng)主要設計和使用了蜂鳴器電路模塊、液晶屏顯示模塊、紅外遙控模塊。</p><p>  3.1蜂鳴器電路模塊</p><p>  本系統(tǒng)的音樂播放時通過蜂鳴器發(fā)出不同的音調從而來實現(xiàn)的,蜂鳴器控制電路如圖3.1所示。</p><p>  圖3.1 蜂鳴器接口電路圖</p><p>  3.2液晶屏顯示

15、模塊</p><p>  QC12864B中文字庫型液晶顯示模塊可以顯示字母、數字、中文字型及圖形,具有繪圖及文字畫面混合顯示功能。可顯示128(列)× 64(行)點陣??赏瓿蓤D形顯示,也可顯示8×4個(16×16點陣)中文漢字。 提供三種控制接口: 8位微處理器接口、4位微處理器接口、串行接口。模塊內置2M-位元中文字型ROM (CGROM) 總共提供8192 個中文字型(16&#

16、215;16點陣),16K-位元半寬字型ROM (HCGROM) 總共提供126 個符號字型(16×8點陣),64×16-位元顯示RAM (DDRAM),另外繪圖顯示畫面提供一個64×256點的繪圖區(qū)域(GDRAM),可以和文字畫面混和顯示。提供多功能指令:畫面清除(Display clear)、光標歸位(Return home)、顯示打開/關閉(Display on/off)、光標顯示/隱藏(Cursor

17、 on/off)、顯示字符閃爍(Display character blink)、光標移位(Cursor shift)、顯示移位(Display shift)、垂直畫面卷動(Vertical line scroll)、反白顯示(revers</p><p>  圖3.2 紅外接收電路模塊</p><p><b>  3.3紅外遙控模塊</b></p>&

18、lt;p>  紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成,應用編/解碼專用集成電路芯片來進行控制操作。發(fā)射部分包括鍵盤矩陣、編碼調制、LED紅外發(fā)送器;接收部分包括光、電轉換放大器、解調、解碼電路。紅外遙控鍵值表如圖3.3所示,紅外接收器接口如圖3.4所示。</p><p>  圖3.3 紅外遙控鍵值表 圖3.4 紅外接收電路模塊</p><p&g

19、t;  3.4單片機CPU最小系統(tǒng)</p><p>  本系統(tǒng)CPU采用宏晶科技推出的STC89S52RC,它是一款高速、低功率、超強抗干擾的單片機,指定代碼完全兼容傳統(tǒng)5051單片機,有E2PROM功能,內部集成MAX810專用復位電路,外部晶體20M以下時可以省略外部復位電路,本系統(tǒng)便充分利用該CPU的特點,省去了傳統(tǒng)的晶振和復位電路。具有為便于后續(xù)端口的擴展和使用,本系統(tǒng)已對全部的I/O端口做了上拉電阻設計

20、,考慮到程序代碼總量不超過2K字節(jié),完全可以使用片內ROM空間,故而將EA引腳接高位點。如圖3.4所示。</p><p>  圖3.4 單片機最小系統(tǒng)</p><p>  3.5 單片機硬件端口分配 </p><p>  為合理利用單片機的端口資源,并且兼顧程序設計的便利,將系統(tǒng)的輸出和輸入端口作如表3.1配置。</p><p>  表3.1

21、 單片機端口配置表</p><p>  4. 程序軟件設計與分析</p><p>  4.1系統(tǒng)軟件分析及詳細技術文件設計</p><p>  作為一個完整的紅外遙控小車運動系統(tǒng),其每一個細節(jié)動作都要確定和符合設計要求的。這些動作細節(jié)就是軟件的設計過程和任務,如同設計一個更為詳細的產品說明書,這個工作必須由系統(tǒng)研發(fā)者設計、完成。</p><p&

22、gt;  根據本次課程設計的提出的功能要求,整個系統(tǒng)功能可以分為五種狀態(tài):“前進”、“后退”、“左轉”、“右轉”、“停止”。當檢測到“前進”按鍵按下,系統(tǒng)就進入“前進工作狀態(tài)”,當檢測到“后退”按鍵按下,系統(tǒng)就進入“后退工作狀態(tài)”, 當檢測到“左轉”按鍵按下,系統(tǒng)就進入“左轉工作狀態(tài)”, 當檢測到“右轉”按鍵按下,系統(tǒng)就進入“右轉工作狀態(tài)”, 當檢測到“停止”按鍵按下,系統(tǒng)就進入“停止工作狀態(tài)”。</p><p>

23、;  通過以上的設計和分析,本系統(tǒng)操作主要通過遙控按鍵進行,有“前進”、“后退”、“左轉”、“右轉”、“停止”等五個功能按鍵。詳細技術文件設計如下:</p><p>  上電后,首先完成系統(tǒng)初始化和硬件自檢:初始化液晶顯示模塊和紅外遙控模塊。自檢動作為: 液晶屏顯示三行“紅外遙控小車,·····,方向”。(自檢的目的是測試輸入和輸出硬件的狀態(tài),通 過輸出系統(tǒng)(如顯

24、示器或喇叭)告知操作者關于系統(tǒng)的狀態(tài)。)自檢完成后,系統(tǒng)進入工作狀態(tài): 當有“前進”鍵按下,系統(tǒng)就進入“前進工作狀態(tài)”,此時電動機1正轉,電動機2反轉,液晶屏第三行第四列顯示“go”,實現(xiàn)小車的前進功能;當有“后退”鍵按下,系統(tǒng)就進入“后退工作狀態(tài)”,此時電動機1反轉,電動機2正轉,液晶屏第三行第四列顯示“back”,實現(xiàn)小車的后退功能;當有“左轉”鍵按下,系統(tǒng)就進入“左轉工作狀態(tài)”,此時電動機1反轉,電動機2反轉,液晶屏第三行第四列顯

25、示“l(fā)eft”,實現(xiàn)小車的左轉功能;當有“右轉”鍵按下,系統(tǒng)就進入“右轉工作狀態(tài)”,此時電動機1正轉,電動機2正轉,液晶屏第三行第四列顯示“right”,實現(xiàn)小車的右轉功能。當有“停止”鍵按下,系統(tǒng)就進入“停止工作狀態(tài)”,此時電動機1停止,電動機2停止,液晶屏第三行第四列顯示“stop”,實現(xiàn)小車的停車功能。</p><p>  4.2系統(tǒng)軟件主程序設計</p><p>  系統(tǒng)軟件的主程

26、序包括初始化、自檢和主循環(huán)。初始化主要針對液晶顯示模塊和紅外遙控模塊等硬件進行初始化。</p><p>  系統(tǒng)通過使用延時來獲得蜂鳴器以1000hz頻率鳴叫,方波周期為1毫秒,輸出的半周期為0.5毫秒,所以延時0.5毫秒即可。</p><p>  初始化液晶顯示模塊是調用函數名為“void lcd_init()”函數來實現(xiàn)的。</p><p>  與此同時,還要對

27、系統(tǒng)工作的標志位和全局變量做初始化,部分標志位和變量的設置及其功能將在各模塊中詳細說明。</p><p>  系統(tǒng)的設置的全局變量和標志位如表 4.1 所示。</p><p>  表 4.1 全局變量和標志位說明</p><p>  本系統(tǒng)自檢工作設計比較簡單,主要完成液晶模塊的的輸出動作,以供操控著觀察設備是否良好。</p><p>  主

28、循環(huán)主要完成液晶屏的顯示,當第一行的所有字符顯示完之后顯示第二行字符,當第二行字符顯示完之后顯示第三行字符。</p><p>  具體流程圖如圖4.1所示,該模塊程序見附錄main()函數。</p><p>  圖4.1 主程序流程圖</p><p>  4.3外部中斷程序設計</p><p>  系統(tǒng)使用外部中斷子程序來接受紅外線發(fā)射的信號

29、。掃鍵過程:首先判斷控制鍵是否按下,若有控制鍵按下則進行逐行掃描,按照P口值查找鍵號.最后按照鍵號轉至相應的發(fā)射程序。</p><p>  紅外信號發(fā)射過程:首先裝入發(fā)射脈沖個數(發(fā)射時為3ms脈沖,停發(fā)時為1ms脈沖),此時若發(fā)射脈沖個數為1則返回主程序,若不為1則發(fā)1ms脈沖,然后停發(fā)1ms脈沖,這樣便結束整個發(fā)射過程。</p><p>  在實踐中,采用紅外線遙控方式時,由于受遙控距

30、離,角度等影響,使用效果不是很好,如采用調頻或調幅發(fā)射接收碼,可提高遙控距離,并且沒有角度影響。</p><p>  遙控接收部分的主程序及初始化及延時過程如上:首先初始化,然后按照顯示亮度數據設定調光脈沖延時值,看P3.0口的脈沖是否為0,若不為0則調入延時程序,此時P2.7口輸出調光脈沖然后返回;若為0則直接返回。</p><p>  具體流程圖如圖4.2所示,該模塊程序見附錄IR_I

31、N( )函數。</p><p>  圖4.2 外部中斷流程圖</p><p>  4.4按鍵檢測和處理模塊設計</p><p>  如果系統(tǒng)檢測到按鍵被按下,則返回按鍵的鍵值,五個功能鍵的鍵值分別是:“前進”為0x09,“后退”為0x15,“左轉”為0x40,“右轉”為0x43,“停止”為0x44。</p><p>  如果用戶按下了“前進”

32、按鍵,則系統(tǒng)就進入“前進工作狀態(tài)”,此時電動機1正轉,電動機2反轉,液晶屏第三行第四列顯示“go”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經被按下。</p><p>  如果用戶按下了“后退”按鍵,則系統(tǒng)就進入“后退工作狀態(tài)”,此時電動機1反轉,電動機2正轉,液晶屏第三行第四列顯示“back”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經被按下。</p><p>  如果用

33、戶按下了“左轉”按鍵,則系統(tǒng)就進入“左轉工作狀態(tài)”,此時電動機1反轉,電動機2反轉,液晶屏第三行第四列顯示“l(fā)eft”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經被按下。</p><p>  如果用戶按下了“右轉”按鍵,則系統(tǒng)就進入“前進工作狀態(tài)”,此時電動機1正轉,電動機2正轉,液晶屏第三行第四列顯示“right”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經被按下。</p><

34、;p>  如果用戶按下了“前進”按鍵,則系統(tǒng)就進入“前進工作狀態(tài)”,此時電動機1停止,電動機2停止,液晶屏第三行第四列顯示“stop”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經被按下。</p><p>  5. 后續(xù)有待完善和提高的工作</p><p>  本系統(tǒng)設計了一套紅外遙控實現(xiàn)小車各種動作的系統(tǒng),完成了本次課程設計給出的基本要求,隨著設計的逐步推進,我對該系統(tǒng)的功能

35、也有了更深入的理解,我認為可以在以下幾個方面更進一步提高和完善:</p><p>  1.為了進一步體現(xiàn)“以人為本”的思想,小車在不同運動狀態(tài)下可以發(fā)出不同的音樂,或者用不同顏色的閃光燈進行區(qū)分。</p><p>  2.為了使小車上更智能化,可以在安裝小車的周圍安裝超聲波模塊,使其能自動尋跡。</p><p>  3.為了使小車更具實用性,可以再加入一個調速模塊,

36、這樣小車就能在不同環(huán)境進行使用。</p><p><b>  6. 結束語</b></p><p>  經過幾個星期的努力,我們在金老師的耐心幫助和自己的努力下終于完成了此次設計,并按設計要求實現(xiàn)了遙控器的各項功能。通過這次設計使我們從中學到到了很多課本上學不到的知識,了解了紅外遙控器的現(xiàn)狀和發(fā)展趨勢,并學會了用單片機開發(fā)產品的完整的過程,明白了設計的概念。通過自己親

37、自去動手和調試我明白的實踐的重要性,明白了理論結合實踐的含義,同時也大大的提高了自己的動手能力和團隊合作能力,這在我以后的工作中都是非常有用的。</p><p>  在這次設計中,金老師不厭其煩的給我講解問題和修正錯誤,在此表示衷心的感謝??!</p><p><b>  參考文獻</b></p><p>  劉祖京. 實用接口技術[M]. 北京

38、:北京工業(yè)大學出版社,1999.</p><p>  王彤. C語言在測量與控制中的應用[M]. 北京:機械工業(yè)出版社,2009.</p><p>  閆玉德,俞虹. MCS-51單片機原理與應用(C語言版)[M]. 北京:機械工業(yè)出版社,2002.</p><p>  謝維成,楊加國. 單片機原理及應用及C51程序設計. 北京:清華大學出版社,2009</p

39、><p><b>  附錄</b></p><p>  /*系統(tǒng)軟件源程序*/</p><p>  #include <reg51.h> </p><p>  #include <intrins.h> </p><p>  #define uchar unsigned char

40、 </p><p>  #define uint unsigned int </p><p>  /*TS12864A-3 端口定義*/ </p><p>  #define LCD_data P0 //數據口 </p><p>  sbit LCD_RS = P2^0; //寄存器選擇輸

41、入 </p><p>  sbit LCD_RW = P2^1; //液晶讀/寫控制 </p><p>  sbit LCD_EN = P2^2; //液晶使能控制 </p><p>  sbit LCD_PSB = P2^3; //串/并方式控制 </p><p>

42、;  sbit LCD_RST = P2^5; //液晶復位端口 </p><p>  sbit m0=P1^0;</p><p>  sbit m1=P1^1;</p><p>  sbit m2=P3^0;</p><p>  sbit m3=P3^1;</p><p>  sbit IR

43、IN = P3^2; //紅外遙控 </p><p>  sbit BEEP = P3^6; //蜂鳴器 </p><p>  uchar code dis1[] = {"電子遙控小車"}; </p><p>  uchar code dis2[] = {"-------

44、---------"}; </p><p>  uchar code dis3[] = {"方向: "}; </p><p>  #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; </p><p>  uchar IRDIS[2]; </p><p>

45、  uchar IRCOM[4]; </p><p>  void delay0(uchar x); //x*0.14MS </p><p>  void beep(); </p><p>  void dataconv(); </p><p>  void lcd_pos(uchar X,uchar Y); //確定顯示位置 <

46、/p><p>  /*******************************************************************/ </p><p>  /* */ </p><p>  /* 延時函數

47、 */ </p><p>  /* */ </p><p>  /****************************************************

48、***************/ </p><p>  void delay(int ms) </p><p><b>  { </b></p><p>  while(ms--) </p><p><b>  { </b></p><p><b>  uchar

49、i; </b></p><p>  for(i=0;i<250;i++) </p><p><b>  { </b></p><p>  _nop_(); </p><p><b>  _nop_(); </b></p><p&

50、gt;<b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  } </p><

51、;p>  /*******************************************************************/ </p><p>  /* */ </p><p>  /*檢查LCD忙狀態(tài)

52、 */ </p><p>  /*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。 */ </p><p>  /* */ </p><

53、;p>  /*******************************************************************/ </p><p>  bit lcd_busy() </p><p>  { </p><p>  bit result; </p><p&

54、gt;  LCD_RS = 0; </p><p>  LCD_RW = 1; </p><p>  LCD_EN = 1; </p><p>  delayNOP(); </p><p>  result = (bit)(P0&0x80); </p><p>  LCD_EN = 0; </p>

55、<p>  return(result); </p><p><b>  } </b></p><p>  /*******************************************************************/ </p><p>  /*

56、 */ </p><p>  /*寫指令數據到LCD */ </p><p>  /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */ </p>

57、<p>  /* */ </p><p>  /*******************************************************************/ </p><p>  void lcd_wcmd(uchar cm

58、d) </p><p>  { </p><p>  while(lcd_busy()); </p><p>  LCD_RS = 0; </p><p>  LCD_RW = 0; </p><p>  LCD_EN = 0; </p><p&g

59、t;<b>  _nop_(); </b></p><p>  _nop_(); </p><p>  P0 = cmd; </p><p>  delayNOP(); </p><p>  LCD_EN = 1; </p><p>  delayNOP(); </p><p

60、>  LCD_EN = 0; </p><p><b>  } </b></p><p>  /*******************************************************************/ </p><p>  /*

61、 */ </p><p>  /*寫顯示數據到LCD */ </p><p>  /*RS=H,RW=L,E=高脈沖,D0-D7=數據。 */ </p><p&g

62、t;  /* */ </p><p>  /*******************************************************************/ </p><p>  void lcd_wdat(uchar dat) </

63、p><p>  { </p><p>  while(lcd_busy()); </p><p>  LCD_RS = 1; </p><p>  LCD_RW = 0; </p><p>  LCD_EN = 0; </p><p>  P0 =

64、 dat; </p><p>  delayNOP(); </p><p>  LCD_EN = 1; </p><p>  delayNOP(); </p><p>  LCD_EN = 0; </p><p><b>  } </b></p><p>  /*****

65、**************************************************************/ </p><p>  /* */ </p><p>  /* LCD初始化設定

66、 */ </p><p>  /* */ </p><p>  /*******************************************************************/ </p>

67、;<p>  void lcd_init() </p><p><b>  { </b></p><p>  LCD_RST = 0; //液晶復位 </p><p>  delay(30); </p><p>  LCD_RST = 1;

68、 </p><p>  delay(5); </p><p>  LCD_PSB = 1; //并口方式 </p><p>  lcd_wcmd(0x34); //擴充指令操作 </p><p>  delay(5); </p><p>  lcd_wcmd(0x30); //基本指

69、令操作 </p><p>  delay(5); </p><p>  lcd_wcmd(0x0C); //顯示開,關光標 </p><p>  delay(5); </p><p>  lcd_wcmd(0x01); //清除LCD的顯示內容 </p><p>  delay(5); </p

70、><p><b>  } </b></p><p>  /*********************************************************/ </p><p>  /* */ </p>&l

71、t;p>  /* 主程序 */ </p><p>  /* */ </p><p>  /***********************************************

72、**********/ </p><p><b>  main() </b></p><p>  { uchar i; </p><p>  IE = 0x81; //允許總中斷中斷,使能 INT0 外部中斷 </p><p>  TCON = 0x01;

73、//觸發(fā)方式為脈沖負邊沿觸發(fā) </p><p>  IRIN=1; //I/O口初始化 </p><p><b>  BEEP=1; </b></p><p>  delay(10); //延時 </p><p>  lcd_init();

74、 //初始化LCD </p><p>  lcd_pos(0,0); //設置顯示位置為第一行的第1個字符 </p><p><b>  i = 0; </b></p><p>  while(dis1[i] != '\0' )</p><p

75、>  { //顯示字符 </p><p>  lcd_wdat(dis1[i]); </p><p><b>  i++; </b></p><p><b>  } </b></p><p>  lcd_pos(1,0);

76、 //設置顯示位置為第二行的第1個字符 </p><p><b>  i = 0; </b></p><p>  while(dis2[i] != '\0') </p><p><b>  { </b></p><p>  lcd_wdat(dis2[i]); </p

77、><p><b>  i++; </b></p><p><b>  } </b></p><p>  lcd_pos(2,0); </p><p><b>  i = 0; </b></p><p>  while(dis3[i]

78、 != '\0')</p><p><b>  { </b></p><p>  lcd_wdat(dis3[i]); </p><p><b>  i++; </b></p><p><b>  } </b></p><p>

79、;  while(1); </p><p><b>  } </b></p><p>  /*********************************************************/ </p><p>  /*

80、 */ </p><p>  /* INT0外部中斷子程序 */ </p><p>  /* */ </p><p>  /*******************************

81、**************************/ </p><p>  void IR_IN() interrupt 0 using 0 </p><p><b>  { </b></p><p>  uchar j,k,N=0; </p><p>  EX0 = 0; </p><

82、p>  delay0(15); </p><p>  if (IRIN==1) </p><p>  { EX0 =1; </p><p><b>  return; </b></p><p><b>  } </b></p><p>  //確認IR信號出現(xiàn) &l

83、t;/p><p>  while (!IRIN) //等IR變?yōu)楦唠娖?,跳過9ms的前導低電平信號。 </p><p>  {delay0(1);} </p><p>  for (j=0;j<4;j++) //收集四組數據 </p><p><b>  { </b></p&

84、gt;<p>  for (k=0;k<8;k++) //每組數據有8位 </p><p><b>  { </b></p><p>  while (IRIN); //等IR變?yōu)榈碗娖剑^4.5ms的前導高電平信號。 </p><p>  while (!IRIN); //等IR變?yōu)楦?/p>

85、電平 </p><p>  while (IRIN) //計算IR高電平時長 </p><p><b>  { </b></p><p>  delay0(1); </p><p>  N++; </p><p>  if (N>=30) </p&g

86、t;<p><b>  { EX0=1; </b></p><p>  return;} //0.14ms計數過長自動離開。 </p><p>  } //高電平計數完畢 </p><p>  IRCOM[j]=IRCOM[j] &g

87、t;> 1; //數據最高位補“0” </p><p>  if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //數據最高位補“1” </p><p><b>  N=0; </b></p><p>  }//end for k </p><p&g

88、t;  }//end for j </p><p>  if (IRCOM[2]!=~IRCOM[3]) </p><p><b>  { EX0=1; </b></p><p>  return; } </p><p>  dataconv();</p><p><b>  {<

89、/b></p><p>  if(IRCOM[2]==0x09)</p><p><b>  { {</b></p><p><b>  m0=1;</b></p><p><b>  m1=0;</b></p><p>  m2=0;

90、 //小車前進</p><p><b>  m3=1;</b></p><p><b>  }</b></p><p><b>  { </b></p><p>  lcd_pos(2,3);</p><p>  lcd_wdat('g

91、');</p><p>  lcd_pos(2,4);</p><p>  lcd_wdat('o');</p><p>  lcd_pos(2,5);</p><p>  lcd_wdat(' ');</p><p>  lcd_pos(2,6);</p><

92、;p>  lcd_wdat(' ');</p><p>  lcd_pos(2,7);</p><p>  lcd_wdat(' '); }} </p><p>  else if(IRCOM[2]==0x15)</p><p><b>  { {</b></p>&

93、lt;p><b>  m0=0;</b></p><p><b>  m1=1;</b></p><p>  m2=1; //小車后退</p><p><b>  m3=0;</b></p><p><b>  }</b></

94、p><p><b>  { </b></p><p>  lcd_pos(2,3);</p><p>  lcd_wdat('b');</p><p>  lcd_pos(2,4);</p><p>  lcd_wdat('a');</p><p&

95、gt;  lcd_pos(2,5);</p><p>  lcd_wdat('c');</p><p>  lcd_pos(2,6);</p><p>  lcd_wdat('k');</p><p>  lcd_pos(2,7);</p><p>  lcd_wdat(' &#

96、39;);}} </p><p>  else if(IRCOM[2]==0x40)</p><p><b>  { {</b></p><p><b>  m0=1;</b></p><p><b>  m1=0;</b></p><p><

97、b>  m2=1;</b></p><p><b>  m3=0;</b></p><p><b>  }</b></p><p><b>  { </b></p><p>  lcd_pos(2,3);</p><p>  lcd

98、_wdat('l'); //小車左轉</p><p>  lcd_pos(2,4);</p><p>  lcd_wdat('e');</p><p>  lcd_pos(2,5);</p><p>  lcd_wdat('f');</p><p>  lcd_p

99、os(2,6);</p><p>  lcd_wdat('t');</p><p>  lcd_pos(2,7);</p><p>  lcd_wdat(' '); }} </p><p>  else if(IRCOM[2]==0x44)</p><p><b>  {

100、{</b></p><p><b>  m0=0;</b></p><p><b>  m1=0;</b></p><p><b>  m2=0;</b></p><p><b>  m3=0;</b></p><p>

101、<b>  }</b></p><p><b>  { </b></p><p>  lcd_pos(2,3);</p><p>  lcd_wdat('s'); //小車停止</p><p>  lcd_pos(2,4);</p><p>  l

102、cd_wdat('t');</p><p>  lcd_pos(2,5);</p><p>  lcd_wdat('o');</p><p>  lcd_pos(2,6);</p><p>  lcd_wdat('p');</p><p>  lcd_pos(2,7);&

103、lt;/p><p>  lcd_wdat(' '); }} </p><p>  else if(IRCOM[2]==0x43)</p><p><b>  { {</b></p><p><b>  m0=0;</b></p><p><b>  m1

104、=1;</b></p><p><b>  m2=0;</b></p><p><b>  m3=1;</b></p><p><b>  } </b></p><p><b>  {</b></p><p>  lc

105、d_pos(2,3);</p><p>  lcd_wdat('r');</p><p>  lcd_pos(2,4);</p><p>  lcd_wdat('i'); //小車右轉</p><p>  lcd_pos(2,5);</p><p>  lcd_wdat

106、('g');</p><p>  lcd_pos(2,6);</p><p>  lcd_wdat('h');</p><p>  lcd_pos(2,7);</p><p>  lcd_wdat('t');}} }</p><p><b>  beep();

107、</b></p><p>  EX0 = 1; </p><p><b>  } </b></p><p>  /*********************************************************/ </p><p>  /*

108、 */ </p><p>  /* 轉換為ASCII碼 */ </p><p>  /* */ </p><p>  

109、/*********************************************************/ </p><p>  void dataconv() </p><p><b>  { </b></p><p>  uchar t; </p><p>  for (t=0;t<

110、2;t++) </p><p>  if(IRDIS[t]>9) </p><p>  IRDIS[t]=IRDIS[t]+0x37; </p><p><b>  else </b></p><p>  IRDIS[t]=IRDIS[t]+0x30; </p><p><b&g

111、t;  } </b></p><p>  /*********************************************************/ </p><p>  /* */ </p><p>  /* 蜂鳴器響一聲子程序

112、 */ </p><p>  /* */ </p><p>  /*********************************************************/ </p><

113、;p>  void beep() </p><p><b>  { </b></p><p><b>  uchar i; </b></p><p>  for (i=0;i<100;i++) </p><p><b>  { </b></p><

114、;p>  delay0(4); </p><p>  BEEP=!BEEP; //BEEP取反 </p><p><b>  } </b></p><p>  BEEP=1; //關閉蜂鳴器 </p><p><b>  } &l

115、t;/b></p><p>  /*********************************************************/ </p><p>  /* */ </p><p>  /* 延時x*0.14ms子程序

116、 */ </p><p>  /* */ </p><p>  /*********************************************************/ </p><p&g

117、t;  void delay0(uchar x) //x*0.14MS </p><p><b>  { </b></p><p><b>  uchar i; </b></p><p>  while(x--) </p><p><b>  { </b></p&g

118、t;<p>  for (i = 0; i<13; i++) {} </p><p><b>  } </b></p><p><b>  } </b></p><p>  /*********************************************************/ </

119、p><p>  /* */ </p><p>  /* 設定顯示位置 */ </p><p>  /*

120、 */ </p><p>  /*********************************************************/ </p><p>  void lcd_pos(uchar X,uchar Y) </p><p>  { </p><

121、;p>  uchar pos; </p><p>  if (X==0) </p><p>  {X=0x80;} </p><p>  else if (X==1) </p><p>  {X=0x90;} </p><p>  else if (X==2) </p><p>  {X

溫馨提示

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

評論

0/150

提交評論