版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計說明書</b></p><p><b> 設(shè)計題目:</b></p><p> 學(xué) 院:機(jī)械工程學(xué)院</p><p> 專 業(yè):機(jī)械設(shè)計制造及其自動化</p><p><b> 班 級:</b></p>
2、<p><b> 學(xué) 號:</b></p><p><b> 姓 名: </b></p><p><b> 指導(dǎo)教師:</b></p><p><b> 目 錄</b></p><p> 1. 課程設(shè)計要求1&l
3、t;/p><p> 2. 系統(tǒng)功能分析與方案確定1</p><p> 方案一:(簡易紅外遙控電路)1</p><p> 方案二:(利用紅外遙控開關(guān)電路)2</p><p><b> 方案比較3</b></p><p> 3. 系統(tǒng)主要硬件電路模塊設(shè)計3</p><
4、;p> 3.1蜂鳴器電路模塊3</p><p> 3.2液晶屏顯示模塊4</p><p> 3.3紅外遙控模塊5</p><p> 3.4單片機(jī)CPU最小系統(tǒng)5</p><p> 3.5 單片機(jī)硬件端口分配6</p><p> 4. 程序軟件設(shè)計與分析7</p><p&
5、gt; 4.1系統(tǒng)軟件分析及詳細(xì)技術(shù)文件設(shè)計7</p><p> 4.2系統(tǒng)軟件主程序設(shè)計8</p><p> 4.3外部中斷程序設(shè)計9</p><p> 4.4按鍵檢測和處理模塊設(shè)計12</p><p> 5. 后續(xù)有待完善和提高的工作12</p><p><b> 6. 結(jié)束語13
6、</b></p><p><b> 參考文獻(xiàn)14</b></p><p><b> 附錄15</b></p><p><b> 1. 課程設(shè)計要求</b></p><p> 設(shè)計一個智能小車控制系統(tǒng),要求具有:</p><p>
7、 1、小車能實現(xiàn)前進(jìn)、后退、轉(zhuǎn)彎等各種簡單的動作;</p><p> 2、用紅外遙控實現(xiàn)各種動作;</p><p> 2. 系統(tǒng)功能分析與方案確定</p><p> 根據(jù)設(shè)計要求的功能,結(jié)合單片機(jī)課程所學(xué)知識,分析如下:系統(tǒng)要求能夠?qū)崿F(xiàn)用紅外遙控實現(xiàn)小車前進(jìn)、后退、轉(zhuǎn)彎等各種簡單的動作。那就需要用到紅外遙控模塊,根據(jù)任務(wù)書的要求,利用單片機(jī)設(shè)計一個遙控開關(guān)電路
8、,可以擬定以下的兩種方案。</p><p> 方案一:(簡易紅外遙控電路)</p><p> 在不需要多路控制的應(yīng)用場合,可以使用由常規(guī)集成電路組成的單通道紅外遙控電路。這種遙控電路不需要使用較貴的專用編譯碼器,因此成本較低。</p><p><b> 紅外發(fā)射部分</b></p><p> 考慮到本方案電路是簡
9、單的單通道遙控器,可直接產(chǎn)生一個控制功能的震蕩頻率,再通過紅外發(fā)光二極管發(fā)射出去。</p><p><b> 紅外接收部分</b></p><p> 當(dāng)紅外接收頭接收到控制頻率時,由一個電路對其進(jìn)行解調(diào)并產(chǎn)生相應(yīng)的控制功能。</p><p> 方案二:(利用紅外遙控開關(guān)電路)</p><p> 紅外線發(fā)射/接收控
10、制電路均采用單片機(jī)來實現(xiàn),輸出控制方式可選擇,實用性強(qiáng)。方案結(jié)構(gòu)圖:</p><p><b> 紅外發(fā)射部分:</b></p><p> 當(dāng)按下遙控按鈕時,單片機(jī)產(chǎn)生相應(yīng)的控制脈沖,由紅外發(fā)光二極管發(fā)射出去。</p><p><b> 紅外接收部分:</b></p><p> 當(dāng)紅外接收器
11、接收到控制脈沖后,由控制方式選擇開關(guān)選擇是“互鎖”還是單路控制,再由單片機(jī)處理后,對相應(yīng)的受控電器產(chǎn)生控制。</p><p><b> 方案比較</b></p><p> 綜上所述通過比較兩套方案,方案一未采用單片機(jī)控制,功能過于單一,僅能對一路電器進(jìn)行簡單的遙控;方案二的紅外線發(fā)射/接電路簡單,可控制多個電器,實用性強(qiáng)。且本設(shè)計用到的元器件較少,電路相對簡單實用
12、。所以本設(shè)計采用方案二作為設(shè)計藍(lán)本。</p><p> 最后剩下的就是每當(dāng)遙控器按下一個按鈕時,蜂鳴器輸出提醒模塊,這個功能模塊可以使用定時器輸出一定頻率的方波信號來獲得蜂鳴器發(fā)出一定頻率的聲音。收控制電路采用單片機(jī)來實現(xiàn),</p><p> 根據(jù)上述分析,由硬件功能可以將本系統(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)主要硬件電路模塊設(shè)計</p><p
14、> 根據(jù)上述分析確定的設(shè)計方案,本系統(tǒng)主要設(shè)計和使用了蜂鳴器電路模塊、液晶屏顯示模塊、紅外遙控模塊。</p><p> 3.1蜂鳴器電路模塊</p><p> 本系統(tǒng)的音樂播放時通過蜂鳴器發(fā)出不同的音調(diào)從而來實現(xiàn)的,蜂鳴器控制電路如圖3.1所示。</p><p> 圖3.1 蜂鳴器接口電路圖</p><p> 3.2液晶屏顯示
15、模塊</p><p> QC12864B中文字庫型液晶顯示模塊可以顯示字母、數(shù)字、中文字型及圖形,具有繪圖及文字畫面混合顯示功能??娠@示128(列)× 64(行)點(diǎn)陣。可完成圖形顯示,也可顯示8×4個(16×16點(diǎn)陣)中文漢字。 提供三種控制接口: 8位微處理器接口、4位微處理器接口、串行接口。模塊內(nèi)置2M-位元中文字型ROM (CGROM) 總共提供8192 個中文字型(16
16、215;16點(diǎn)陣),16K-位元半寬字型ROM (HCGROM) 總共提供126 個符號字型(16×8點(diǎn)陣),64×16-位元顯示RAM (DDRAM),另外繪圖顯示畫面提供一個64×256點(diǎn)的繪圖區(qū)域(GDRAM),可以和文字畫面混和顯示。提供多功能指令:畫面清除(Display clear)、光標(biāo)歸位(Return home)、顯示打開/關(guān)閉(Display on/off)、光標(biāo)顯示/隱藏(Cursor
17、 on/off)、顯示字符閃爍(Display character blink)、光標(biāo)移位(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ā)射和接收兩大部分組成,應(yīng)用編/解碼專用集成電路芯片來進(jìn)行控制操作。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、LED紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路。紅外遙控鍵值表如圖3.3所示,紅外接收器接口如圖3.4所示。</p><p> 圖3.3 紅外遙控鍵值表 圖3.4 紅外接收電路模塊</p><p&g
19、t; 3.4單片機(jī)CPU最小系統(tǒng)</p><p> 本系統(tǒng)CPU采用宏晶科技推出的STC89S52RC,它是一款高速、低功率、超強(qiáng)抗干擾的單片機(jī),指定代碼完全兼容傳統(tǒng)5051單片機(jī),有E2PROM功能,內(nèi)部集成MAX810專用復(fù)位電路,外部晶體20M以下時可以省略外部復(fù)位電路,本系統(tǒng)便充分利用該CPU的特點(diǎn),省去了傳統(tǒng)的晶振和復(fù)位電路。具有為便于后續(xù)端口的擴(kuò)展和使用,本系統(tǒng)已對全部的I/O端口做了上拉電阻設(shè)計
20、,考慮到程序代碼總量不超過2K字節(jié),完全可以使用片內(nèi)ROM空間,故而將EA引腳接高位點(diǎn)。如圖3.4所示。</p><p> 圖3.4 單片機(jī)最小系統(tǒng)</p><p> 3.5 單片機(jī)硬件端口分配 </p><p> 為合理利用單片機(jī)的端口資源,并且兼顧程序設(shè)計的便利,將系統(tǒng)的輸出和輸入端口作如表3.1配置。</p><p> 表3.1
21、 單片機(jī)端口配置表</p><p> 4. 程序軟件設(shè)計與分析</p><p> 4.1系統(tǒng)軟件分析及詳細(xì)技術(shù)文件設(shè)計</p><p> 作為一個完整的紅外遙控小車運(yùn)動系統(tǒng),其每一個細(xì)節(jié)動作都要確定和符合設(shè)計要求的。這些動作細(xì)節(jié)就是軟件的設(shè)計過程和任務(wù),如同設(shè)計一個更為詳細(xì)的產(chǎn)品說明書,這個工作必須由系統(tǒng)研發(fā)者設(shè)計、完成。</p><p&
22、gt; 根據(jù)本次課程設(shè)計的提出的功能要求,整個系統(tǒng)功能可以分為五種狀態(tài):“前進(jìn)”、“后退”、“左轉(zhuǎn)”、“右轉(zhuǎn)”、“停止”。當(dāng)檢測到“前進(jìn)”按鍵按下,系統(tǒng)就進(jìn)入“前進(jìn)工作狀態(tài)”,當(dāng)檢測到“后退”按鍵按下,系統(tǒng)就進(jìn)入“后退工作狀態(tài)”, 當(dāng)檢測到“左轉(zhuǎn)”按鍵按下,系統(tǒng)就進(jìn)入“左轉(zhuǎn)工作狀態(tài)”, 當(dāng)檢測到“右轉(zhuǎn)”按鍵按下,系統(tǒng)就進(jìn)入“右轉(zhuǎn)工作狀態(tài)”, 當(dāng)檢測到“停止”按鍵按下,系統(tǒng)就進(jìn)入“停止工作狀態(tài)”。</p><p>
23、; 通過以上的設(shè)計和分析,本系統(tǒng)操作主要通過遙控按鍵進(jìn)行,有“前進(jìn)”、“后退”、“左轉(zhuǎn)”、“右轉(zhuǎn)”、“停止”等五個功能按鍵。詳細(xì)技術(shù)文件設(shè)計如下:</p><p> 上電后,首先完成系統(tǒng)初始化和硬件自檢:初始化液晶顯示模塊和紅外遙控模塊。自檢動作為: 液晶屏顯示三行“紅外遙控小車,·····,方向”。(自檢的目的是測試輸入和輸出硬件的狀態(tài),通 過輸出系統(tǒng)(如顯
24、示器或喇叭)告知操作者關(guān)于系統(tǒng)的狀態(tài)。)自檢完成后,系統(tǒng)進(jìn)入工作狀態(tài): 當(dāng)有“前進(jìn)”鍵按下,系統(tǒng)就進(jìn)入“前進(jìn)工作狀態(tài)”,此時電動機(jī)1正轉(zhuǎn),電動機(jī)2反轉(zhuǎn),液晶屏第三行第四列顯示“go”,實現(xiàn)小車的前進(jìn)功能;當(dāng)有“后退”鍵按下,系統(tǒng)就進(jìn)入“后退工作狀態(tài)”,此時電動機(jī)1反轉(zhuǎn),電動機(jī)2正轉(zhuǎn),液晶屏第三行第四列顯示“back”,實現(xiàn)小車的后退功能;當(dāng)有“左轉(zhuǎn)”鍵按下,系統(tǒng)就進(jìn)入“左轉(zhuǎn)工作狀態(tài)”,此時電動機(jī)1反轉(zhuǎn),電動機(jī)2反轉(zhuǎn),液晶屏第三行第四列顯
25、示“l(fā)eft”,實現(xiàn)小車的左轉(zhuǎn)功能;當(dāng)有“右轉(zhuǎn)”鍵按下,系統(tǒng)就進(jìn)入“右轉(zhuǎn)工作狀態(tài)”,此時電動機(jī)1正轉(zhuǎn),電動機(jī)2正轉(zhuǎn),液晶屏第三行第四列顯示“right”,實現(xiàn)小車的右轉(zhuǎn)功能。當(dāng)有“停止”鍵按下,系統(tǒng)就進(jìn)入“停止工作狀態(tài)”,此時電動機(jī)1停止,電動機(jī)2停止,液晶屏第三行第四列顯示“stop”,實現(xiàn)小車的停車功能。</p><p> 4.2系統(tǒng)軟件主程序設(shè)計</p><p> 系統(tǒng)軟件的主程
26、序包括初始化、自檢和主循環(huán)。初始化主要針對液晶顯示模塊和紅外遙控模塊等硬件進(jìn)行初始化。</p><p> 系統(tǒng)通過使用延時來獲得蜂鳴器以1000hz頻率鳴叫,方波周期為1毫秒,輸出的半周期為0.5毫秒,所以延時0.5毫秒即可。</p><p> 初始化液晶顯示模塊是調(diào)用函數(shù)名為“void lcd_init()”函數(shù)來實現(xiàn)的。</p><p> 與此同時,還要對
27、系統(tǒng)工作的標(biāo)志位和全局變量做初始化,部分標(biāo)志位和變量的設(shè)置及其功能將在各模塊中詳細(xì)說明。</p><p> 系統(tǒng)的設(shè)置的全局變量和標(biāo)志位如表 4.1 所示。</p><p> 表 4.1 全局變量和標(biāo)志位說明</p><p> 本系統(tǒng)自檢工作設(shè)計比較簡單,主要完成液晶模塊的的輸出動作,以供操控著觀察設(shè)備是否良好。</p><p> 主
28、循環(huán)主要完成液晶屏的顯示,當(dāng)?shù)谝恍械乃凶址@示完之后顯示第二行字符,當(dāng)?shù)诙凶址@示完之后顯示第三行字符。</p><p> 具體流程圖如圖4.1所示,該模塊程序見附錄main()函數(shù)。</p><p> 圖4.1 主程序流程圖</p><p> 4.3外部中斷程序設(shè)計</p><p> 系統(tǒng)使用外部中斷子程序來接受紅外線發(fā)射的信號
29、。掃鍵過程:首先判斷控制鍵是否按下,若有控制鍵按下則進(jìn)行逐行掃描,按照P口值查找鍵號.最后按照鍵號轉(zhuǎn)至相應(yīng)的發(fā)射程序。</p><p> 紅外信號發(fā)射過程:首先裝入發(fā)射脈沖個數(shù)(發(fā)射時為3ms脈沖,停發(fā)時為1ms脈沖),此時若發(fā)射脈沖個數(shù)為1則返回主程序,若不為1則發(fā)1ms脈沖,然后停發(fā)1ms脈沖,這樣便結(jié)束整個發(fā)射過程。</p><p> 在實踐中,采用紅外線遙控方式時,由于受遙控距
30、離,角度等影響,使用效果不是很好,如采用調(diào)頻或調(diào)幅發(fā)射接收碼,可提高遙控距離,并且沒有角度影響。</p><p> 遙控接收部分的主程序及初始化及延時過程如上:首先初始化,然后按照顯示亮度數(shù)據(jù)設(shè)定調(diào)光脈沖延時值,看P3.0口的脈沖是否為0,若不為0則調(diào)入延時程序,此時P2.7口輸出調(diào)光脈沖然后返回;若為0則直接返回。</p><p> 具體流程圖如圖4.2所示,該模塊程序見附錄IR_I
31、N( )函數(shù)。</p><p> 圖4.2 外部中斷流程圖</p><p> 4.4按鍵檢測和處理模塊設(shè)計</p><p> 如果系統(tǒng)檢測到按鍵被按下,則返回按鍵的鍵值,五個功能鍵的鍵值分別是:“前進(jìn)”為0x09,“后退”為0x15,“左轉(zhuǎn)”為0x40,“右轉(zhuǎn)”為0x43,“停止”為0x44。</p><p> 如果用戶按下了“前進(jìn)”
32、按鍵,則系統(tǒng)就進(jìn)入“前進(jìn)工作狀態(tài)”,此時電動機(jī)1正轉(zhuǎn),電動機(jī)2反轉(zhuǎn),液晶屏第三行第四列顯示“go”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經(jīng)被按下。</p><p> 如果用戶按下了“后退”按鍵,則系統(tǒng)就進(jìn)入“后退工作狀態(tài)”,此時電動機(jī)1反轉(zhuǎn),電動機(jī)2正轉(zhuǎn),液晶屏第三行第四列顯示“back”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經(jīng)被按下。</p><p> 如果用
33、戶按下了“左轉(zhuǎn)”按鍵,則系統(tǒng)就進(jìn)入“左轉(zhuǎn)工作狀態(tài)”,此時電動機(jī)1反轉(zhuǎn),電動機(jī)2反轉(zhuǎn),液晶屏第三行第四列顯示“l(fā)eft”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經(jīng)被按下。</p><p> 如果用戶按下了“右轉(zhuǎn)”按鍵,則系統(tǒng)就進(jìn)入“前進(jìn)工作狀態(tài)”,此時電動機(jī)1正轉(zhuǎn),電動機(jī)2正轉(zhuǎn),液晶屏第三行第四列顯示“right”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經(jīng)被按下。</p><
34、;p> 如果用戶按下了“前進(jìn)”按鍵,則系統(tǒng)就進(jìn)入“前進(jìn)工作狀態(tài)”,此時電動機(jī)1停止,電動機(jī)2停止,液晶屏第三行第四列顯示“stop”。同時蜂鳴器發(fā)出一段短暫的聲音,說明有工作按鍵,已經(jīng)被按下。</p><p> 5. 后續(xù)有待完善和提高的工作</p><p> 本系統(tǒng)設(shè)計了一套紅外遙控實現(xiàn)小車各種動作的系統(tǒng),完成了本次課程設(shè)計給出的基本要求,隨著設(shè)計的逐步推進(jìn),我對該系統(tǒng)的功能
35、也有了更深入的理解,我認(rèn)為可以在以下幾個方面更進(jìn)一步提高和完善:</p><p> 1.為了進(jìn)一步體現(xiàn)“以人為本”的思想,小車在不同運(yùn)動狀態(tài)下可以發(fā)出不同的音樂,或者用不同顏色的閃光燈進(jìn)行區(qū)分。</p><p> 2.為了使小車上更智能化,可以在安裝小車的周圍安裝超聲波模塊,使其能自動尋跡。</p><p> 3.為了使小車更具實用性,可以再加入一個調(diào)速模塊,
36、這樣小車就能在不同環(huán)境進(jìn)行使用。</p><p><b> 6. 結(jié)束語</b></p><p> 經(jīng)過幾個星期的努力,我們在金老師的耐心幫助和自己的努力下終于完成了此次設(shè)計,并按設(shè)計要求實現(xiàn)了遙控器的各項功能。通過這次設(shè)計使我們從中學(xué)到到了很多課本上學(xué)不到的知識,了解了紅外遙控器的現(xiàn)狀和發(fā)展趨勢,并學(xué)會了用單片機(jī)開發(fā)產(chǎn)品的完整的過程,明白了設(shè)計的概念。通過自己親
37、自去動手和調(diào)試我明白的實踐的重要性,明白了理論結(jié)合實踐的含義,同時也大大的提高了自己的動手能力和團(tuán)隊合作能力,這在我以后的工作中都是非常有用的。</p><p> 在這次設(shè)計中,金老師不厭其煩的給我講解問題和修正錯誤,在此表示衷心的感謝??!</p><p><b> 參考文獻(xiàn)</b></p><p> 劉祖京. 實用接口技術(shù)[M]. 北京
38、:北京工業(yè)大學(xué)出版社,1999.</p><p> 王彤. C語言在測量與控制中的應(yīng)用[M]. 北京:機(jī)械工業(yè)出版社,2009.</p><p> 閆玉德,俞虹. MCS-51單片機(jī)原理與應(yīng)用(C語言版)[M]. 北京:機(jī)械工業(yè)出版社,2002.</p><p> 謝維成,楊加國. 單片機(jī)原理及應(yīng)用及C51程序設(shè)計. 北京:清華大學(xué)出版社,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 //數(shù)據(jù)口 </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; //液晶復(fù)位端口 </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> /* 延時函數(shù)
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時,閑,可寫指令與數(shù)據(jù)。 */ </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> /*寫指令數(shù)據(jù)到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> /*寫顯示數(shù)據(jù)到LCD */ </p><p> /*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 */ </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初始化設(shè)定
66、 */ </p><p> /* */ </p><p> /*******************************************************************/ </p>
67、;<p> void lcd_init() </p><p><b> { </b></p><p> LCD_RST = 0; //液晶復(fù)位 </p><p> delay(30); </p><p> LCD_RST = 1;
68、 </p><p> delay(5); </p><p> LCD_PSB = 1; //并口方式 </p><p> lcd_wcmd(0x34); //擴(kuò)充指令操作 </p><p> delay(5); </p><p> lcd_wcmd(0x30); //基本指
69、令操作 </p><p> delay(5); </p><p> lcd_wcmd(0x0C); //顯示開,關(guān)光標(biāo) </p><p> delay(5); </p><p> lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容 </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ù)邊沿觸發(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); //設(shè)置顯示位置為第一行的第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、 //設(shè)置顯示位置為第二行的第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> //確認(rèn)IR信號出現(xiàn) &l
83、t;/p><p> while (!IRIN) //等IR變?yōu)楦唠娖?,跳過9ms的前導(dǎo)低電平信號。 </p><p> {delay0(1);} </p><p> for (j=0;j<4;j++) //收集四組數(shù)據(jù) </p><p><b> { </b></p&
84、gt;<p> for (k=0;k<8;k++) //每組數(shù)據(jù)有8位 </p><p><b> { </b></p><p> while (IRIN); //等IR變?yōu)榈碗娖?,跳過4.5ms的前導(dǎo)高電平信號。 </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計數(shù)過長自動離開。 </p><p> } //高電平計數(shù)完畢 </p><p> IRCOM[j]=IRCOM[j] &g
87、t;> 1; //數(shù)據(jù)最高位補(bǔ)“0” </p><p> if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //數(shù)據(jù)最高位補(bǔ)“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、 //小車前進(jìn)</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'); //小車左轉(zhuǎn)</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'); //小車右轉(zhuǎn)</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> /* 轉(zhuǎn)換為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; //關(guān)閉蜂鳴器 </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> /* 設(shè)定顯示位置 */ </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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能小車課程設(shè)計說明書
- 課程設(shè)計-- 智能小車循跡控制系統(tǒng)
- 電機(jī)及其運(yùn)動控制系統(tǒng)課程設(shè)計說明書
- 小車多方式運(yùn)行的plc控制系統(tǒng)設(shè)計-《電氣控制技術(shù)》課程設(shè)計說明書
- 小車多方式運(yùn)行的plc控制系統(tǒng)設(shè)計-《電氣控制技術(shù)》課程設(shè)計說明書
- 《電力拖動與控制系統(tǒng)》課程設(shè)計說明書
- 行車電氣控制系統(tǒng)設(shè)計-課程設(shè)計說明書
- 接口課程設(shè)計說明書----電工門控制系統(tǒng)設(shè)計
- plc小車運(yùn)行方向控制課程設(shè)計說明書end
- 小車避障課程設(shè)計說明書
- 課程設(shè)計--燃油量檢查控制系統(tǒng)設(shè)計說明書
- 鍋爐水位控制系統(tǒng)控制器課程設(shè)計說明書
- 再熱器汽溫控制系統(tǒng)課程設(shè)計說明書
- 課程設(shè)計說明書 氣動機(jī)械手控制系統(tǒng)設(shè)計
- 步進(jìn)電機(jī)加減速定位控制系統(tǒng)課程設(shè)計說明書
- 課程設(shè)計--燃油量檢查控制系統(tǒng)設(shè)計說明書.doc
- 智能控制小車課程設(shè)計
- 智能化課程設(shè)計說明書
- 智能清障小車設(shè)計說明書.doc
- 遙控智能小車設(shè)計說明書.doc
評論
0/150
提交評論