基于單片機(jī)的紅外通訊軟件設(shè)計(jì)_第1頁(yè)
基于單片機(jī)的紅外通訊軟件設(shè)計(jì)_第2頁(yè)
基于單片機(jī)的紅外通訊軟件設(shè)計(jì)_第3頁(yè)
基于單片機(jī)的紅外通訊軟件設(shè)計(jì)_第4頁(yè)
基于單片機(jī)的紅外通訊軟件設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

重慶理工大學(xué)畢業(yè)論文 基于單片機(jī)的紅外通訊軟件設(shè)計(jì)PAGEPAGE581目錄摘要 IAbstract II1緒論 11.1課題的研究意義 11.2紅外通信的國(guó)內(nèi)外現(xiàn)狀 21.3目前紅外通信技術(shù)的應(yīng)用熱點(diǎn) 21.4系統(tǒng)設(shè)計(jì)思路分析 31.5系統(tǒng)設(shè)計(jì)需解決的難點(diǎn)要點(diǎn) 32系統(tǒng)方案設(shè)計(jì) 52.1系統(tǒng)功能設(shè)計(jì) 52.2系統(tǒng)的總體方案設(shè)計(jì) 52.2.1系統(tǒng)的總體設(shè)計(jì)思路 52.2.2系統(tǒng)總體設(shè)計(jì)流程圖 62.2.3系統(tǒng)總體結(jié)構(gòu)圖 62.2.3系統(tǒng)總體結(jié)構(gòu)圖 72.3系統(tǒng)設(shè)計(jì)所需用到的主要器件 72.4系統(tǒng)設(shè)計(jì)技巧 73系統(tǒng)硬件設(shè)計(jì) 83.1主要元器件的簡(jiǎn)單介紹和選擇 8·3.1.1單片機(jī)介紹及選擇 83.1.2紅外通訊編碼解碼芯片選擇 93.1.3紅外發(fā)射頭和接收頭 93.2紅外通訊系統(tǒng)電路設(shè)計(jì) 103.2.1最小系統(tǒng)電路 103.2.3按鍵輸入電路 113.2.4紅外編碼電路及其紅外發(fā)射 123.2.5載波信號(hào)電路 123.2.6解碼電路及其紅外接 133.2.7LCD液晶顯示電路和電機(jī)電路 134系統(tǒng)軟件設(shè)計(jì) 164.1紅外通訊系統(tǒng)軟件設(shè)計(jì)的編程語(yǔ)言選擇 164.2開(kāi)發(fā)環(huán)境,即編程軟件的選擇 174.3軟件設(shè)計(jì)原則 174.4系統(tǒng)軟件設(shè)計(jì) 184.4.1主程序功能的設(shè)計(jì)及其實(shí)現(xiàn) 184.4.2LCD1602液晶顯示器軟件設(shè)計(jì) 214.4.3矩陣鍵盤(pán)行列檢測(cè)軟件設(shè)計(jì) 224.4.4模擬編碼芯片的編碼程序設(shè)計(jì) 244.4.538KHz載波信號(hào)調(diào)制程序 254.4.6解碼程序設(shè)計(jì) 254.4.7發(fā)射端與接收端的通信協(xié)議設(shè)計(jì) 284.4.8電機(jī)控制軟件設(shè)計(jì) 284.5軟件抗干擾技術(shù) 294.6系統(tǒng)軟件設(shè)計(jì)注意事項(xiàng) 295調(diào)試及其系統(tǒng)誤差分析 305.1軟件編寫(xiě)及調(diào)試過(guò)程 305.2調(diào)試過(guò)程中遇到的問(wèn)題及其解決辦法 32結(jié)論 34參考文獻(xiàn) 35致謝 36附錄 37摘要著科學(xué)技術(shù)的發(fā)展,單片機(jī)因其高可靠性和高性?xún)r(jià)比,在智能化家用電器、儀器儀表等諸多領(lǐng)域內(nèi)得到了極為廣泛的應(yīng)用。當(dāng)前單片機(jī)對(duì)家用電器控制呈現(xiàn)出外型簡(jiǎn)單化、功能多樣化、性能優(yōu)越化的發(fā)展趨向。紅外通訊是目前使用較多的一種通訊方法。紅外線通訊裝置具有體積小、功耗低、功能強(qiáng)、成本低等特點(diǎn)。在家庭生活中,錄音機(jī)、音響設(shè)備、空調(diào)彩電都采用了紅外通訊系統(tǒng)。本文簡(jiǎn)述基于單片機(jī)的紅外通訊設(shè)備在現(xiàn)代社會(huì)的推廣使用情況和發(fā)展前景,而系統(tǒng)方面主要基于紅外通訊設(shè)備的實(shí)現(xiàn)原理和單片機(jī)原理來(lái)設(shè)計(jì)發(fā)射即遙控器和接收端。發(fā)射端主要包含按鍵輸入,來(lái)控制接收端的電機(jī)運(yùn)轉(zhuǎn)和液晶顯示器的顯示;并且對(duì)可行性進(jìn)行細(xì)致研究,綜合功能用途,做出整體設(shè)計(jì)流程。關(guān)鍵字:紅外通訊發(fā)射端接收端系統(tǒng)AbstractThedevelopmentofscienceandtechnology,SCMbecauseofitshighreliabilityandcost-effective,intheintelligenthomeappliances,instrumentationandmanyotherareashasbeenverywidelyused.TheSCMapplianceshowsthesimplisticappearance,functionaldiversification,superiorperformanceofthedevelopmenttrend.Infraredcommunicationisameansofcommunicationistheuseofmore.Infraredcommunicationdevicehastheadvantagesofsmallvolume,lowpowerconsumption,strongfunction,lowcost.Infamilylife,taperecorders,audioequipment,air-conditioningcolorTVusinginfraredcommunicationsystem.Inthispaper,theinfraredcommunicationequipmentbasedonsinglechipmicrocomputerinmodernsocietytopromotetheuseofthesituationanddevelopmentprospects,andthesystemismainlybasedontherealizationprincipleandtheprincipleofsingle-chipinfraredcommunicationequipmenttodesigntheemissionthatremotecontrolandreceiver.Thetransmitterincludesakeyinput,tocontroltheoperationofthemotorandtheliquidcrystaldisplaythereceivingendofthedisplay;andadetailedstudyonthefeasibility,comprehensivefunctions,makewholedesignprocess.Keywords:Infraredcommunicationtransmittingteminalreceivingterminalsystem1緒論紅外通訊就是通過(guò)紅外線傳輸數(shù)據(jù),是目前比較常用的一種無(wú)線數(shù)據(jù)傳輸手段,它具有無(wú)污、信息傳輸穩(wěn)定、信息傳輸安全性高以及使用方便等優(yōu)點(diǎn)。在電腦技術(shù)發(fā)展早期,數(shù)據(jù)都是通過(guò)線纜傳輸?shù)?,線纜傳輸連線麻煩,需要特制接口,頗為不便。自紅外通訊技術(shù)發(fā)明以來(lái),去多早期用線纜傳輸?shù)脑O(shè)備和通訊工具都改為利用外紅線來(lái)進(jìn)行通訊,如家電產(chǎn)品、工業(yè)控制、娛樂(lè)設(shè)施等領(lǐng)域。并且經(jīng)過(guò)多年的發(fā)展,有了今天以紅外通訊為核心技術(shù)的藍(lán)牙、紅外、802.11等無(wú)線數(shù)據(jù)傳輸技術(shù)[1]。1.1課題的研究意義信息時(shí)代,通信技術(shù)的發(fā)展總是走在各種技術(shù)的最前沿。隨著各種手持式信息終端設(shè)備在我們的工作中頻繁的使用出現(xiàn),就標(biāo)志著無(wú)線通信的時(shí)代已經(jīng)到來(lái),也意味著無(wú)線通信這種比傳統(tǒng)的有線通信更加的讓人接受。因?yàn)樗奖?,快捷,安全,穩(wěn)定,所以無(wú)線通信的方式更加容易被人們重視,從而催促著各種無(wú)線通信技術(shù)的研發(fā)。紅外通信是一種無(wú)線的傳輸方式,正在被日益廣泛的應(yīng)用,大的應(yīng)用范圍從軍用,醫(yī)療,超市,銀行等設(shè)備,小的應(yīng)用則小到家用電器,無(wú)一沒(méi)有涉及到紅外通信技術(shù),所以有不斷的新的紅外通信產(chǎn)品涌進(jìn)市場(chǎng),重而也推動(dòng)了對(duì)紅外通信技術(shù)的研究和發(fā)展。紅外發(fā)射裝置電路簡(jiǎn)單,易于實(shí)現(xiàn),并且對(duì)空氣污染小。在某些應(yīng)用場(chǎng)合,比無(wú)線電通信具有更好的綜合效果。紅外無(wú)線通信在我國(guó)古代已有應(yīng)用,只是比較簡(jiǎn)單。在第一次世界大戰(zhàn)中德國(guó)就研制并運(yùn)用了紅外通信。第二次世界大戰(zhàn)中美國(guó)、日本、蘇聯(lián)也都是用過(guò)紅外無(wú)線通信。但在這漫長(zhǎng)的時(shí)間里、由于紅外無(wú)線通信系統(tǒng)光源均為熱輻射源,調(diào)制困難,接收器又是光電池,內(nèi)部噪音很大,影響了通信距離和可靠性,所以發(fā)展被怠慢。近年來(lái)由于微電子技術(shù)發(fā)展,發(fā)射器件和接受器件已經(jīng)被半導(dǎo)體器件所代替,又由于它具有無(wú)需鋪設(shè)電路、保密性好、抗干擾能力強(qiáng)、價(jià)格低廉、設(shè)備簡(jiǎn)單等優(yōu)點(diǎn),再加上近年來(lái)各種市場(chǎng)應(yīng)用設(shè)備、家用設(shè)備的自動(dòng)化提高,紅外通信又重新被人們重視,從而得到發(fā)展。1.2紅外通信的國(guó)內(nèi)外現(xiàn)狀紅外線是由一位叫WilliamHerschel的天文學(xué)家于19世紀(jì)發(fā)現(xiàn)的,是一種點(diǎn)對(duì)點(diǎn)連接的高科技通訊方式,它要求兩個(gè)通訊端之間的紅外發(fā)射口對(duì)準(zhǔn)發(fā)射連接,并且不能相隔太遠(yuǎn),中間也不能有障礙物,即紅外。自1800年發(fā)現(xiàn)紅外線以來(lái),人們從沒(méi)停過(guò)對(duì)它的研究,以至于后人能夠利用紅外開(kāi)發(fā)出眾多應(yīng)用產(chǎn)品,在安防監(jiān)控領(lǐng)域,汽車(chē)夜視系統(tǒng),醫(yī)療器械行業(yè),家庭電子行業(yè),通訊領(lǐng)域等范圍都已經(jīng)被得到廣泛的應(yīng)用。而

隨著社會(huì)的不斷發(fā)展,人們的安全防范意識(shí)愈來(lái)愈強(qiáng)烈,通訊的必要性也越來(lái)越突出可見(jiàn),由于紅外線為不可見(jiàn)光,具有很強(qiáng)的隱藏性和保密性,因此紅外在安防和通訊領(lǐng)域大展身手,不論國(guó)內(nèi)外,目前正在市場(chǎng)掀起一股”紅外潮”。

傳統(tǒng)的紅外通訊應(yīng)用主要在與家電和汽車(chē)防盜遙控器方面,由于調(diào)制技術(shù)、相關(guān)收發(fā)器技術(shù)的快速發(fā)展,紅外傳輸應(yīng)用也發(fā)生了質(zhì)的飛躍。1993年國(guó)際紅外線協(xié)會(huì)在美國(guó)成立,積極整合建立紅外傳輸?shù)臉?biāo)準(zhǔn),極大地推動(dòng)了紅外產(chǎn)品的發(fā)展。2000年全球已有1.7億臺(tái)配有國(guó)際紅外線協(xié)會(huì)模組的電子產(chǎn)品進(jìn)入市場(chǎng),尤其在電子游戲機(jī)市場(chǎng)有極大的潛力。2001年,在信息收發(fā)模組方面,由于國(guó)際紅外線協(xié)會(huì)模組的價(jià)格已從早期的5美元降至2美元,國(guó)際大廠紛紛在亞太地區(qū)一些勞動(dòng)力相對(duì)低廉的地方尋求加工場(chǎng)所,估計(jì)年產(chǎn)值將有1億多美元的規(guī)模,當(dāng)時(shí)一些IC設(shè)計(jì)公司、系統(tǒng)與應(yīng)用軟件廠商已積極投入應(yīng)用產(chǎn)品的研究與生產(chǎn),目前已經(jīng)形成一定規(guī)模。但人們對(duì)她的研究仍然延續(xù),時(shí)不時(shí)出現(xiàn)的新發(fā)明新應(yīng)用,帶給我們驚訝與感嘆,人類(lèi)對(duì)這座寶藏的開(kāi)發(fā)還遠(yuǎn)遠(yuǎn)不夠,紅外產(chǎn)業(yè)還有廣闊的擴(kuò)張空間[2-7]。1.3目前紅外通信技術(shù)的應(yīng)用熱點(diǎn)紅外應(yīng)用產(chǎn)品種類(lèi)繁多,但是比較熱門(mén)的應(yīng)用的主要是紅外熱像、紅外攝像、紅外通訊、紅外光譜儀、紅外傳感器等幾個(gè)比較大的領(lǐng)域,但是我們做的是紅外通訊所以這里只介紹下紅外通訊應(yīng)用。紅外通訊傳統(tǒng)的紅外通訊應(yīng)用主要在與家電和汽車(chē)防盜遙控器方面,由于調(diào)制技術(shù)、相關(guān)收發(fā)器技術(shù)的快速發(fā)展,紅外傳輸應(yīng)用也發(fā)生了質(zhì)的飛躍。1993年國(guó)際紅外線協(xié)會(huì)在美國(guó)成立,積極整合建立紅外傳輸?shù)臉?biāo)準(zhǔn),極大地推動(dòng)了紅外產(chǎn)品的發(fā)展。1.4系統(tǒng)設(shè)計(jì)思路分析系統(tǒng)分為接收端和發(fā)射端兩部分,接收端采用4*4矩陣鍵盤(pán)用來(lái)接受用戶(hù)的輸入(0-9的數(shù)字輸入,A-F的字母輸入),經(jīng)過(guò)放大器放大后再通過(guò)載波信號(hào)的調(diào)制,把編碼信號(hào)的有用信號(hào)傳播出去;接收端接收到信號(hào)后,經(jīng)過(guò)解碼得到發(fā)射端用戶(hù)輸入的信號(hào),最后在數(shù)碼管或者LCD中顯示出來(lái)。因?yàn)楸鞠到y(tǒng)的功能都屬89C51單片機(jī)的應(yīng)用范疇,所以使用89C51單片機(jī)來(lái)完成設(shè)計(jì)。1.5系統(tǒng)設(shè)計(jì)需解決的難點(diǎn)要點(diǎn)整個(gè)系統(tǒng)設(shè)計(jì)中有幾個(gè)部分是難點(diǎn)也是系統(tǒng)正常運(yùn)行的關(guān)鍵核心。鍵盤(pán)輸入設(shè)計(jì)一個(gè)4*4的矩陣鍵盤(pán)來(lái)用接受用戶(hù)的輸入,利用8個(gè)IO口,在程序中對(duì)矩陣鍵盤(pán)進(jìn)行行列的高低電平的判斷,并在程序中對(duì)某個(gè)按鍵的按下返回預(yù)先設(shè)定的數(shù)字鍵或者字母鍵,從而完成用戶(hù)的輸入。紅外發(fā)射電路選擇基于通用UART紅外通信,是因?yàn)榭梢岳猛ㄓ肬ART成熟的硬件機(jī)制,實(shí)現(xiàn)紅外數(shù)據(jù)通信。這種設(shè)計(jì)模式實(shí)際上是紅外通信原理與串口通信機(jī)制的有機(jī)結(jié)合。且有實(shí)踐證明,這種紅外通信模式是可行可靠的[8]。載波信號(hào)電路紅外線的傳播不一定準(zhǔn)確而且不一定夠遠(yuǎn),所以利用89C51單片機(jī)定時(shí)器產(chǎn)生38KHz的方波輸出電路,在編碼信號(hào)輸出端加上一個(gè)高頻載波信號(hào),通過(guò)載波信號(hào)的調(diào)制,把編碼信號(hào)的有用信“攜帶著”傳播出去,這樣的紅外線信號(hào)能夠傳得更遠(yuǎn)而且也能更有效的避免干擾紅外接受器紅外接收器部分使用紅外專(zhuān)用接收集成電路HS0038來(lái)完成紅外信號(hào)的光電轉(zhuǎn)換及接收。HS0038是塑封一體化紅外線接收器,它是一種集紅外線接收、放大、整形于一體的集成電路,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號(hào)兼容的所有工作,沒(méi)有紅外遙控信號(hào)時(shí)為高電平,收到紅外信號(hào)時(shí)為低電平,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。

2系統(tǒng)方案設(shè)計(jì)2.1系統(tǒng)功能設(shè)計(jì)通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成[9]。故,系統(tǒng)設(shè)計(jì)應(yīng)該分為兩部分電路,發(fā)射和接收。系統(tǒng)所帶功能如下:-能通過(guò)發(fā)射端來(lái)控制接收端(用電機(jī)模擬的電風(fēng)扇)進(jìn)行實(shí)時(shí)的控制;-接收端(電機(jī)模擬的電風(fēng)扇)能夠分檔次的運(yùn)行在大、中、小三個(gè)檔次,并且能夠?qū)崿F(xiàn)定時(shí)功能,電風(fēng)扇的開(kāi)關(guān)。-接收端(電機(jī)模擬的電風(fēng)扇)能夠在LCD液晶顯示器上顯示風(fēng)扇實(shí)時(shí)運(yùn)轉(zhuǎn)的轉(zhuǎn)速檔次,定時(shí)的時(shí)間。2.2系統(tǒng)的總體方案設(shè)計(jì)2.2.1系統(tǒng)的總體設(shè)計(jì)思路本次的系統(tǒng)設(shè)計(jì)是采用AT89C51作為發(fā)射電路(控制器)和接受電路(電風(fēng)扇)以及38KHz的紅外信號(hào)載波調(diào)制電路的核心CPU,發(fā)射電路可以分為基本電路模塊、鍵盤(pán)接受模塊、紅外發(fā)射模塊三個(gè)模塊,接收電路可分為基本電路模塊、液晶顯示模塊、電機(jī)電路模塊三個(gè)模塊,單獨(dú)的紅外信號(hào)載波電路調(diào)制電路[8-9]。發(fā)射電路鍵盤(pán)采用四乘四矩陣鍵盤(pán)電路,通過(guò)程序檢索用戶(hù)的輸入,返回相應(yīng)的按鍵值到程序中;程序使用得到的按鍵值,得知用戶(hù)的輸入后取得相應(yīng)程序中預(yù)先設(shè)定的操作碼發(fā)送給紅外發(fā)射器;再通過(guò)紅外發(fā)射器發(fā)射出去的信號(hào)經(jīng)過(guò)載波電路38KHz方波調(diào)制后,由接收端的紅外接收器接受到操作碼后進(jìn)行解碼操作得操作碼從而得知發(fā)射端的按鍵輸入,從而改變接收端的電機(jī)運(yùn)轉(zhuǎn)情況和LCD液晶顯示情況,達(dá)到紅外通訊控制的目的?!せ倦娐纺K基本電路分為AT89C51正常運(yùn)行所需的晶振電路和復(fù)位電路,主要由硬件來(lái)控制和實(shí)現(xiàn)沒(méi)有采用軟件的控制?!ゆI盤(pán)接受模塊鍵盤(pán)接受模塊采用四乘四的外接矩陣鍵盤(pán),在程序中對(duì)矩陣鍵盤(pán)行和列的高低變換來(lái)得到用戶(hù)在鍵盤(pán)的輸入情況,需要用到單片機(jī)的8個(gè)管腳,系統(tǒng)中使用了發(fā)射端的P2口的八個(gè)管腳,若使用的是P0口的八個(gè)管腳則需要外接上拉電阻,阻值大約在5-10K之間?!ぜt外發(fā)射模塊紅外發(fā)射模塊采用SE303紅外發(fā)射裝置來(lái)發(fā)送信號(hào),發(fā)射的操作碼為程序中預(yù)先設(shè)定?!ひ壕э@示模塊液晶顯示模塊使用LM016L液晶顯示器來(lái)顯示電機(jī)的運(yùn)轉(zhuǎn)情況,如電機(jī)的運(yùn)轉(zhuǎn)的轉(zhuǎn)速檔次、電機(jī)定時(shí)時(shí)間?!る姍C(jī)電路模塊電機(jī)電路模塊用一個(gè)電機(jī)模擬電風(fēng)扇的運(yùn)轉(zhuǎn),電機(jī)可以改變轉(zhuǎn)速檔次,定時(shí)運(yùn)行,并且在相關(guān)的線路上接有LED指示燈,分為別為小檔指示燈,中檔指示燈,大檔指示燈,定時(shí)指示燈,停轉(zhuǎn)指示燈,用于提示用戶(hù)電機(jī)的運(yùn)轉(zhuǎn)狀態(tài)。進(jìn)行編碼操作通過(guò)發(fā)射器發(fā)送到接收端等待用戶(hù)輸入啟動(dòng)接收端等待發(fā)射端發(fā)送數(shù)據(jù)電機(jī)做出相應(yīng)的運(yùn)行電機(jī)停轉(zhuǎn)啟動(dòng)發(fā)射端2.2.2系統(tǒng)總體進(jìn)行編碼操作通過(guò)發(fā)射器發(fā)送到接收端等待用戶(hù)輸入啟動(dòng)接收端等待發(fā)射端發(fā)送數(shù)據(jù)電機(jī)做出相應(yīng)的運(yùn)行電機(jī)停轉(zhuǎn)啟動(dòng)發(fā)射端LCD顯示電機(jī)狀態(tài)

2.2.3系統(tǒng)總體結(jié)構(gòu)圖LCD顯示電機(jī)狀態(tài)最小系統(tǒng)最小系統(tǒng)按鍵電路載波信號(hào)調(diào)制電路最小系統(tǒng)發(fā)射電路接收電路解碼電路編碼電路顯示電路按鍵電路直流電機(jī)單位2.3系統(tǒng)設(shè)計(jì)所需用到的主要器件89C51單片機(jī)作為兩個(gè)電路的核心CPU,用M50462作為紅外發(fā)射器,HS0038作為紅外接收器,LM016L液晶顯示器,一個(gè)四乘四的矩陣鍵盤(pán),綠色和紅色的LED指示燈,電機(jī)。2.4系統(tǒng)設(shè)計(jì)技巧在系統(tǒng)仿真過(guò)程中沒(méi)有現(xiàn)成的SE303的紅外發(fā)射器和HS0038紅外接收器,所以本系統(tǒng)仿真時(shí)采用引用接收端和發(fā)射端的各自一個(gè)管腳相連通,中間裝一個(gè)LED指示燈來(lái)指示信號(hào)的傳遞;在發(fā)射的根據(jù)uPD6121的編碼發(fā)射原理,對(duì)發(fā)射端的管腳進(jìn)行,低電平脈寬為0.56ms高電平脈寬為0.56ms組成一個(gè)周期為1.12ms的位“0”,而低電平脈寬為0.56ms高電平脈寬為1.685ms組成一個(gè)周期為2.24ms的位“1”,發(fā)送接收端的管腳。每16位組成一個(gè)操作碼,在接收端解碼操作碼得到相應(yīng)的改變電機(jī)運(yùn)轉(zhuǎn)的動(dòng)作。

3系統(tǒng)硬件設(shè)計(jì)基于單片機(jī)的紅外通訊硬件方面的在本章介紹,根據(jù)系統(tǒng)的設(shè)計(jì)方案和功能要求介紹系統(tǒng)總體的構(gòu)成和各部分的硬件。系統(tǒng)兩大電路模塊都采用AT89C51單片機(jī)作為核心CPU,鍵盤(pán)部分采四乘四的矩陣鍵盤(pán);顯示部分使用LCD1602液晶顯示器;紅外發(fā)射器使用PH303紅外發(fā)光二極管;紅外遙控編碼芯片使用M50462;紅外接收器使HS003塑封一體化紅外線接收器,它是一種集紅外線接收、放大、整形于一體的集成電路;電機(jī)采用直流電機(jī)。3.1主要元器件的簡(jiǎn)單介紹和選擇·3.1.1單片機(jī)介紹及選擇單片機(jī)是微機(jī)控制的典型代表,它在一片硅片上集成了中央處理器、存儲(chǔ)器和各種輸入輸出接口,如I/O口,定時(shí)器/計(jì)數(shù)器接口,外部中斷接口,串口,讀/寫(xiě)接口等)。這樣的芯片因?yàn)榫哂泻陀?jì)算機(jī)一樣的功能,所以稱(chēng)之為單片微型計(jì)算機(jī),簡(jiǎn)稱(chēng)單片機(jī)。而單片機(jī)又主要應(yīng)用于實(shí)時(shí)控制,并通常作為其他系統(tǒng)的組成部分使用,故又稱(chēng)之為嵌入式控制器。自從20世紀(jì)70年代中期美國(guó)仙童公司推出第一臺(tái)F8單片機(jī)以來(lái),單片機(jī)已經(jīng)有30多年的發(fā)展歷史。直至今天,單片的生產(chǎn)廠家和型號(hào)已經(jīng)是各式各樣。紅外通訊系統(tǒng)的單片機(jī)中,采用AT89C51單片機(jī)作為中央處理器。89C51單片機(jī)帶有4K閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—FalshProgrammableandErasableReadOnlyMemory),128字節(jié)內(nèi)部RAM,32個(gè)I/O接口,2個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)5向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式。空閑方式停止CPU工作,但允許RAM、定時(shí)/計(jì)數(shù)器、串行通信口及中斷系統(tǒng)繼續(xù)工作,掉電方式保存RAM的數(shù)據(jù),但振蕩器停止工作并禁止其它所有部件工作指導(dǎo)下一個(gè)硬件復(fù)位。3.1.2紅外通訊編碼解碼芯片選擇紅外通訊電路若要將數(shù)據(jù)通過(guò)紅外發(fā)射頭和紅外接收頭發(fā)送出去,則需要在電路的發(fā)射端先進(jìn)行編碼操作編碼成操作碼,然后通過(guò)載波電路將編碼后的芯片進(jìn)行38KHz的調(diào)制后,才能更遠(yuǎn)更安全穩(wěn)定地發(fā)送出去;紅外接受電路在接收到信號(hào)后,則需要進(jìn)行解碼操作,還原發(fā)射端的最原始數(shù)據(jù),才能知道發(fā)射端是發(fā)送一個(gè)什么樣的請(qǐng)求。由于我個(gè)人在用Proteus進(jìn)行仿真時(shí),并沒(méi)有編碼和解碼芯片可以使用,所以程序中我全面模擬了編碼和解碼芯片的功能;我選定了uPD6121為編碼芯片,BC7210為解碼芯片;之所以選擇這兩個(gè)芯片分別作為發(fā)射端和接收端的編碼解碼芯片是因?yàn)锽C7210解碼芯片成本低,常見(jiàn),而且BC7210的輸出可以設(shè)置為并行輸出或者串行輸出,串行輸出方式兼容SPI和UART兩種接口,可以輕松完成與各種MCU、PC機(jī)的接口??梢匀〈鶶AA3049等芯片;而能夠與BC7210解碼芯片互相支持的多個(gè)芯片中又屬Upd6121編碼芯片最為合適[13]。uPD6121編碼芯片和BC7210解碼芯片如圖3-1所示圖3-13.1.3紅外發(fā)射頭和接收頭紅外發(fā)射二極管是紅外通信系統(tǒng)中用來(lái)發(fā)射信號(hào)的一個(gè)非常重要的元件,雖然它看起來(lái)比較小,不太顯眼,但是沒(méi)有它,紅外通信就只能是一句空話(huà)。它是實(shí)現(xiàn)紅外通信的橋梁,其重要性就好像燈泡在照明系統(tǒng)中的重要性一樣,是整個(gè)紅外通信系統(tǒng)的焦點(diǎn)。選用常用的紅外發(fā)光二極管SE303,外形類(lèi)似LED發(fā)光二極管,發(fā)出紅外光(近紅外線約0.93μm)。管壓降約1.4V,工作電流一般小于20mA。為了適應(yīng)不同的工作電壓,回路中常串有限流電阻。SE303實(shí)物圖如圖3-2所示圖3-2 紅外接收器是紅外發(fā)光二極管的受控裝置,其里面有相應(yīng)的紅外光電轉(zhuǎn)換電路。這里我們采用的接收器是一種紅外專(zhuān)用接收集成電路HS0038,用它來(lái)完成紅外信號(hào)的光電轉(zhuǎn)換及接收。接收方一般使用HS0038一體化紅外線接收器進(jìn)行接收解碼,當(dāng)HS0038接收到38kHz紅外信號(hào)時(shí),輸出端輸出低電平,否則為高電平。所以紅外遙控器發(fā)送紅外信號(hào)時(shí),參考上面遙控串行數(shù)據(jù)編碼波形圖,在低電平處發(fā)送38kHz紅外信號(hào),高電平處則不發(fā)送紅外信號(hào)。HS0038實(shí)物圖如圖3-3所示。圖3-33.2紅外通訊系統(tǒng)電路設(shè)計(jì)3.2.1最小系統(tǒng)電路單片機(jī)如果要能夠正常工作,那么最小系統(tǒng)是必不可少的。而所謂的最小系統(tǒng),就是單片機(jī)的XTAL1,XTAL2兩個(gè)IO口外接晶振電路,RST口外接復(fù)位電路,EA、VCC接5V電源,VSS接地,這樣組成的一個(gè)小系統(tǒng)成為最小系統(tǒng)。所以,紅外通訊系統(tǒng)中的發(fā)射端和接收端都需要有如下圖所示的基本電路模塊:圖3-4這里值得注意的是:仿真的時(shí)候VCC和VSS都默認(rèn)地接5V電源和接地,所以不需要再添加,但是繪制原理圖和制作PCB板時(shí),不能將VCC和VSS遺漏,否則單片機(jī)無(wú)法正常工作。3.2.3按鍵輸入電路用來(lái)接收用戶(hù)輸入的按鍵模塊,采用四乘四矩陣鍵盤(pán)與單片機(jī)的P0八個(gè)管腳相連,在程序中進(jìn)行行列檢測(cè),從而得出用戶(hù)對(duì)哪個(gè)按鍵進(jìn)行的單擊操作(具體算法實(shí)現(xiàn)在第四章軟件設(shè)計(jì)中詳解)。這里值得注意的是,使用P0口時(shí),單片機(jī)內(nèi)部是沒(méi)有接上拉電阻,所以我們需要外部添加上路電阻。按鍵輸入模塊電路如下圖所示: 圖3-5圖3-53.2.4紅外編碼電路及其紅外發(fā)射紅外編碼電路的編碼主要是由用戶(hù)碼和數(shù)據(jù)碼構(gòu)成,用戶(hù)碼和數(shù)據(jù)碼統(tǒng)稱(chēng)為傳送碼,通常為8位或16位的“0”“1”碼,為了避免出現(xiàn)差錯(cuò),每次發(fā)射的傳送碼中一般都包含兩次編碼:一次為原碼,一次為反碼;或相同的碼連續(xù)發(fā)兩次。本系統(tǒng)采用8位的傳送碼,并且再發(fā)送一次反補(bǔ)作為驗(yàn)證。采用uPD6121編碼芯片,KL/O0至KL/O7七個(gè)管腳接受未編碼的原始操作數(shù)據(jù);也可以用KI1至KI4四個(gè)管腳與KL/O0至O7組成矩陣鍵盤(pán)直接接受輸入數(shù)據(jù)。本系統(tǒng)采用第一種方案。(這里的編碼電路沒(méi)有經(jīng)過(guò)載波就發(fā)送,是因?yàn)檫@是單獨(dú)繪制的編碼和紅外發(fā)射電路,并沒(méi)有應(yīng)用到仿真。而本次系統(tǒng)設(shè)計(jì)仿真中并沒(méi)有編碼芯片,所以在仿真電路中單獨(dú)繪制解碼發(fā)射模塊,用于學(xué)習(xí)不參與程序運(yùn)行。)電路模塊電路圖如下圖所示:圖3-63.2.5載波信號(hào)電路在所有的高頻通信電路中,載波信號(hào)的存在是必不可少的。為使紅外信號(hào)能夠正確的傳送出去和傳送更長(zhǎng)的距離,我們也需要在編碼信號(hào)輸出的同端加上一個(gè)高頻載波信號(hào)。通過(guò)這個(gè)高頻載波信號(hào)的調(diào)制,把編碼信號(hào)的有用信息“攜帶”出去,這樣信號(hào)的傳送距離就能更長(zhǎng),而且能夠有效的避免其他信號(hào)的干擾,從而提高了信息傳送的準(zhǔn)確性。本系統(tǒng)采用89C51單片機(jī)內(nèi)部定時(shí)器產(chǎn)生38KHz信號(hào)的方波,與編碼后的傳送碼結(jié)合,調(diào)制后傳送出去。圖中的SendIO用于接收來(lái)自用戶(hù)輸入的數(shù)據(jù)編碼后得到的傳送碼(操作碼)。載波信號(hào)調(diào)制電路如下圖所示:圖3-73.2.6解碼電路及其紅外接圖3-8通過(guò)解碼電路后,得到用戶(hù)最原始的輸出數(shù)據(jù),從而控制LCD液晶顯示器顯示電機(jī)運(yùn)轉(zhuǎn)的相關(guān)信息,并且控制電機(jī)運(yùn)轉(zhuǎn)。3.2.7LCD液晶顯示電路和電機(jī)電路根據(jù)解碼后得到的用戶(hù)原始輸入數(shù)據(jù),通過(guò)程序控制液晶顯示器的顯示,和電機(jī)的運(yùn)轉(zhuǎn)。液晶顯示器使用LCD1602。RS,RW,E三個(gè)控制端口分別接單片機(jī)P0口的P0.5,P0.6,P0.7,外接上路電阻,而數(shù)據(jù)傳輸端口接單片機(jī)的P2口,因?yàn)閮?nèi)部已經(jīng)有上路電阻,所以不再需要外部接上拉電阻。這里電機(jī)采用直流電機(jī),而控制直流電機(jī)的轉(zhuǎn)速主要是通過(guò)控制其電壓實(shí)現(xiàn),所以電路中用三個(gè)2N3055三極管,三個(gè)三極管的基極分別接單片機(jī)的P11,P12,P13三個(gè)管腳,集電極接不同大小的電阻再接電源,然后通過(guò)程序來(lái)控制使用不同的三極管,從而控制不同的直流電機(jī)電壓,達(dá)到改變轉(zhuǎn)速的效果。液晶顯示模塊電路和電機(jī)電路分別如圖3-9所示圖3-9總體發(fā)射端綜合仿真電路圖總體接收端綜合仿真電路圖

4系統(tǒng)軟件設(shè)計(jì)4.1紅外通訊系統(tǒng)軟件設(shè)計(jì)的編程語(yǔ)言選擇現(xiàn)在程序編程語(yǔ)言很多如C語(yǔ)言,C++語(yǔ)言,匯編語(yǔ)言,機(jī)器語(yǔ)言等,這些語(yǔ)言主要都應(yīng)用于嵌入式開(kāi)發(fā)之中,但由于機(jī)器語(yǔ)言的難以閱讀,所以現(xiàn)在已經(jīng)基本不再使用。而在單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)過(guò)程中,程序設(shè)計(jì)有兩種方法:一種是基于匯編語(yǔ)言的程序設(shè)計(jì)方法,另一種是基于C語(yǔ)言的程序設(shè)計(jì)方法。匯編語(yǔ)言的機(jī)器代碼生成效率高但可讀性不強(qiáng),而C語(yǔ)言在大多數(shù)情況下,其機(jī)器代碼生成效率和匯編語(yǔ)言相當(dāng),而可讀性和可移植性卻遠(yuǎn)遠(yuǎn)超過(guò)匯編語(yǔ)言。此外,由于C語(yǔ)言有很好的層次結(jié)構(gòu),使其編寫(xiě)的程序更容易閱讀和維護(hù)。且C編寫(xiě)的程序比匯編更符合人們的思考習(xí)慣,開(kāi)發(fā)者能更專(zhuān)心的考慮程序設(shè)計(jì)而不是考慮些細(xì)節(jié)問(wèn)題,這樣就減少了開(kāi)發(fā)和調(diào)試的時(shí)間[10]。選用C語(yǔ)言設(shè)計(jì)程序具有一些特點(diǎn)[14]:C語(yǔ)言代碼簡(jiǎn)潔易讀,使用靈活方便,裝性好,代碼重用性高。C語(yǔ)言具有函數(shù),相對(duì)于匯編語(yǔ)言來(lái)說(shuō),代碼的封裝性遠(yuǎn)遠(yuǎn)高于匯編語(yǔ)言,代碼的重用性高,并且具有一定的模塊化。并且表達(dá)能力強(qiáng),豐富的數(shù)據(jù)結(jié)構(gòu)類(lèi)型,用戶(hù)根據(jù)需要,采用多種數(shù)據(jù)類(lèi)型來(lái)控制各種復(fù)雜的數(shù)據(jù);C語(yǔ)言還有多種運(yùn)算符,用戶(hù)可以靈活地進(jìn)行簡(jiǎn)單或者復(fù)雜的算術(shù)運(yùn)算,表達(dá)方式也很靈活。而且C語(yǔ)言是一種結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言。這一點(diǎn)很適合單片機(jī)的設(shè)計(jì),C語(yǔ)言以函數(shù)作為程序設(shè)計(jì)的基本單位,C語(yǔ)言程序中的函數(shù)相當(dāng)于一般語(yǔ)言中的子程序。還有很關(guān)鍵的一點(diǎn)是C語(yǔ)言擁有指針,直接操作計(jì)算機(jī)硬件。C語(yǔ)言具有直接訪問(wèn)機(jī)器物理地址的能力,Keil的C51編譯器和Franklin的C51編譯器都可以直接對(duì)單片機(jī)的內(nèi)部特殊功能寄存器和I/O端口進(jìn)行操作,可以直接訪問(wèn)片內(nèi)或片尾存儲(chǔ)器,還可以進(jìn)行各種位操作。4.2開(kāi)發(fā)環(huán)境,即編程軟件的選擇本次紅外通訊系統(tǒng)的程序編寫(xiě)的開(kāi)發(fā)環(huán)境,選擇使用KeiluVersion3。它是美國(guó)KeilSoftware公司出品的主要用于51系列單片機(jī)主要用于C語(yǔ)言軟件程序開(kāi)發(fā)工具。Keil還提供了包括C語(yǔ)言編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等完全的開(kāi)發(fā)方案。在KeiluVersion3上編寫(xiě)的C語(yǔ)言程序可以直接生成一個(gè).HEX文件在Proteus中直接將HEX文件調(diào)入到單片機(jī)中便可直接運(yùn)行程序,方便程序在單片機(jī)環(huán)境下的運(yùn)行和調(diào)試。而使用C編譯器在產(chǎn)生代碼的準(zhǔn)確性和效率方面達(dá)到了較高的水平,而且可以附加靈活地控制選項(xiàng),在開(kāi)發(fā)大型項(xiàng)目時(shí)非常理想,是目前應(yīng)用最廣泛的單片機(jī)開(kāi)發(fā)環(huán)境之一[15]。所以,如果是用C語(yǔ)言編寫(xiě)單片機(jī)程序沒(méi)那么Keil幾乎就是第一選擇。4.3軟件設(shè)計(jì)原則軟件是連接需求分析\硬件系統(tǒng)以及使得系統(tǒng)實(shí)現(xiàn)的橋梁,對(duì)軟件進(jìn)行編寫(xiě)設(shè)計(jì)之前應(yīng)該先了解軟件設(shè)計(jì)的原則?!ぼ浖幸欢ǖ目煽啃裕浖到y(tǒng)規(guī)模越大越復(fù)雜,可知這時(shí)候軟件的可靠性就越來(lái)越難保證。軟件的可靠性意味著該軟件在測(cè)試運(yùn)行過(guò)程中避免可能發(fā)生故障的能力,且一旦發(fā)生故障后,具有解脫和排除故障的能力。軟件可靠性和硬件可靠性本質(zhì)區(qū)別在于:后者為物理機(jī)理的衰變和老化所致,而前者是由于設(shè)計(jì)和實(shí)現(xiàn)的錯(cuò)誤所致。在進(jìn)行軟件設(shè)計(jì)之前的軟件的可靠性必須在設(shè)計(jì)階段就確定,在生產(chǎn)和測(cè)試階段再考慮就困難了。·軟件需要有健壯性,又稱(chēng)為魯棒性,是指軟件對(duì)于規(guī)范要求以外的輸入能夠判斷出這個(gè)輸入不符合規(guī)范要求,并能有合理的處理方式。但是它的健壯性是一個(gè)較模糊的概念,但是卻是非常重要的軟件外部量度標(biāo)準(zhǔn)。軟件設(shè)計(jì)的健壯與否直接反應(yīng)了分析設(shè)計(jì)和編碼人員的水平·軟件的可修改性,在軟件編寫(xiě)完成后,可能在后續(xù)部分根據(jù)用戶(hù)的需求反應(yīng),或者其他原因,可能需要修改軟件。這時(shí)候,就要求軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)時(shí)要編寫(xiě)完整的文檔和良好的結(jié)構(gòu),如模塊化。·軟件編寫(xiě)要容易理解,這個(gè)其實(shí)和可修改性是相關(guān)聯(lián)的。擁有良好的結(jié)構(gòu)、明朗的注釋?zhuān)阌谛薷臅r(shí)候的閱讀?!ぼ浖锌蓽y(cè)試性,就是設(shè)計(jì)一個(gè)適當(dāng)?shù)臄?shù)據(jù)集合,用來(lái)測(cè)試所建立的系統(tǒng),并保證系統(tǒng)得到全面的檢驗(yàn)?!ぼ浖行市?,效率性是指軟件在編寫(xiě)的時(shí)候應(yīng)該注意運(yùn)行時(shí),盡可能得少用計(jì)算機(jī)內(nèi)存,并且采用最優(yōu)的算法來(lái)處理數(shù)據(jù)結(jié)構(gòu),讓軟件在計(jì)算機(jī)中運(yùn)行時(shí)所占用的內(nèi)存達(dá)到最低,這點(diǎn)很考研開(kāi)發(fā)人員的水平。·軟件標(biāo)準(zhǔn)化原則,軟件編寫(xiě)要基于業(yè)界的一些規(guī)范、協(xié)議、接口、命名規(guī)則?!ぼ浖邢冗M(jìn)些和可擴(kuò)展性,軟件要能滿(mǎn)足客戶(hù)的要求,并且做好模塊化,便于日后對(duì)軟件的升級(jí)。4.4系統(tǒng)軟件設(shè)計(jì)4.4.1主程序功能的設(shè)計(jì)及其實(shí)現(xiàn)系統(tǒng)功能的要求決定了系統(tǒng)軟件設(shè)計(jì)的方向,本次系統(tǒng)程序設(shè)計(jì)流程圖如圖4-1所示。紅外通訊的數(shù)據(jù)發(fā)送是通過(guò)區(qū)別脈沖的低電平寬度來(lái)區(qū)分位0和位1,位0和位1的高電平均為0.56ms,而低電平位0為0.56ms,位1為1.685ms。對(duì)于發(fā)射端程序,運(yùn)行后先初始化定時(shí)器0用于后面程序編碼,然后開(kāi)始進(jìn)行對(duì)矩陣鍵盤(pán)的行和列進(jìn)行檢測(cè),等待用戶(hù)的輸入;若有用戶(hù)輸入,程序先判定用戶(hù)輸入的按鍵,然后用將指定的按鍵數(shù)字送入Transmit()編碼函數(shù)中進(jìn)行編碼。根據(jù)發(fā)射端和接收端的通信協(xié)議(在“CommunicationProtocol.h”頭文件中)在Transmit()編碼函數(shù)中發(fā)送按鍵數(shù)值指定的數(shù)據(jù)碼,依次先發(fā)送一次起始碼(9ms高電平,4.5ms低電平),然后發(fā)送兩次系統(tǒng)識(shí)別碼(0x55與0xAA),一次數(shù)據(jù)碼碼一次數(shù)據(jù)碼的反碼,最后再發(fā)送一次結(jié)束碼(9ms高電平,4.5ms低電平,22.5ms高電平),這樣一套順序組成一個(gè)完整操作碼,完全模擬編碼芯片。接收端程序啟動(dòng)后,先對(duì)LCD液晶顯示器,定時(shí)器0,定時(shí)器1,外部中斷1。顯示器顯示電機(jī)初始狀態(tài),主程序開(kāi)始停留在while(IsNewCode)的循環(huán)等待新的發(fā)射端用戶(hù)輸入。定時(shí)器0開(kāi)始計(jì)數(shù)50us中斷一次,定時(shí)器0的中斷函數(shù)time0內(nèi)部對(duì)Count進(jìn)行計(jì)數(shù)。外部中斷接受到下降沿的脈沖后將會(huì)進(jìn)入外部中斷函數(shù)recive,獲取Count的計(jì)數(shù),根據(jù)Count的次數(shù)來(lái)計(jì)算接受到的脈沖的寬度,如果脈沖的寬度不是合法的信號(hào),那么就去除。如果脈沖的寬度是合法的信號(hào)寬度即,20<Count<300。然后再進(jìn)行判斷,是否為起始碼,如果是則Count的次數(shù)應(yīng)該為250<Count>300因?yàn)?ms+4.5ms=13.5ms即,13500/50=275,這時(shí)候接受狀態(tài)ir_status=1,表示已經(jīng)接受過(guò)起始碼,那么接下來(lái)接受的應(yīng)該是系統(tǒng)識(shí)別碼。同起始碼一樣,判斷16位的數(shù)據(jù)是否接受完畢,如果完畢則common_code_count為大于等于15,ir_status為2表示系統(tǒng)碼也已經(jīng)接受完畢,接下來(lái)便開(kāi)始接受操作碼(數(shù)據(jù)碼)。根據(jù)位0和位1的脈沖寬度可知,如果40<Count<50則說(shuō)明接收到一個(gè)1,20<Count<30則說(shuō)明接收到一個(gè)0。每接收一位,key_bit_count就累加一次,加到8位后,IsNewCode=1,程序接下去運(yùn)行,根據(jù)不同的操作碼做出不同的電機(jī)操作和不同的顯示器電機(jī)狀態(tài)顯示。然后IsNewCode=0,繼續(xù)回到等待發(fā)射端用戶(hù)的操作。發(fā)射端和接收端的通信協(xié)議如下:按鍵值用于通信的操作碼值按鍵值用于通信的操作碼值10X6100X6020X62A‘A’(自動(dòng)轉(zhuǎn)換成二進(jìn)制)30X63B‘B’40X64C‘C’50X65D‘D’60X66E‘E’70X67F‘F’80X6890X69按鍵功能簡(jiǎn)介如下:按鍵值功能按鍵值功能0-9定時(shí)數(shù)字輸入(秒為單位)A(ON/C)啟動(dòng)電機(jī)B(=)定時(shí)開(kāi)啟C(+)增檔D(-)減檔F(÷)停止電機(jī)

發(fā)射端啟動(dòng)接收端啟動(dòng)初始化LCD液晶顯示器顯示初始信息初始化是否有用戶(hù)輸入?按鍵輸入檢測(cè)NY根據(jù)用戶(hù)輸入,得到相關(guān)的按鍵信息后,進(jìn)行編碼編碼后數(shù)據(jù)與38KHz的載波結(jié)合發(fā)射端啟動(dòng)接收端啟動(dòng)初始化LCD液晶顯示器顯示初始信息初始化是否有用戶(hù)輸入?按鍵輸入檢測(cè)NY根據(jù)用戶(hù)輸入,得到相關(guān)的按鍵信息后,進(jìn)行編碼編碼后數(shù)據(jù)與38KHz的載波結(jié)合將經(jīng)過(guò)載波調(diào)制后的編碼數(shù)據(jù)發(fā)送出去等待來(lái)自發(fā)射端的數(shù)據(jù)?啟動(dòng)定時(shí)器0,50us累計(jì)一次,BI技術(shù)送入外部中斷函數(shù),并且獲得定時(shí)器累計(jì)是否為8位傳送碼數(shù)據(jù)發(fā)送NY解碼傳送碼,得到用戶(hù)輸入數(shù)據(jù)控制電機(jī)運(yùn)行LCD液晶顯示器顯示電機(jī)相關(guān)信息串行數(shù)據(jù)傳送和并行數(shù)據(jù)傳送。本次設(shè)計(jì)采用并行數(shù)據(jù)傳送方式。8位并行數(shù)據(jù)傳送時(shí)序下圖如所示:?jiǎn)纹瑱C(jī)寫(xiě)數(shù)據(jù)到LCD1602顯示器的時(shí)序圖單片機(jī)從LCD1602讀數(shù)據(jù)時(shí)序圖RS為并行的指令/數(shù)據(jù)選擇信號(hào),RS=0表示并行指令選擇信號(hào),RS=1表示并行數(shù)據(jù)選擇信號(hào);E為L(zhǎng)CD1602的使能信號(hào),由時(shí)序圖可知,使能信號(hào)為高電有效;R/W為并行的讀寫(xiě)選擇信號(hào),邏輯“1”表示讀,邏輯“0”表示寫(xiě)。程序中WriteInstruction(uChardictate)用于寫(xiě)指令到顯示器中,形參表示要寫(xiě)入的指令;WriteData(uChardat)用于寫(xiě)數(shù)據(jù)到顯示器中,形參dat為要寫(xiě)入要顯示器的數(shù)據(jù)。而不管是寫(xiě)指令還是寫(xiě)數(shù)據(jù),都應(yīng)該注意LCD1602的延時(shí)時(shí)序,由于E為高脈沖的時(shí)候?qū)憯?shù)據(jù)和寫(xiě)指令,所以程序中在E為高脈沖后使用延時(shí)函數(shù)DelayNMS(1)讓其符合LCD1602的延時(shí)時(shí)序,讓指令和數(shù)據(jù)準(zhǔn)確讀入到顯示器中。LCD1602液晶顯示器內(nèi)部控制指令如下表所示:在寫(xiě)數(shù)據(jù)之前,應(yīng)該先指定數(shù)據(jù)在顯示器中的顯示地址;程序中用,WriteAddress(uCharx)來(lái)指定數(shù)據(jù)在顯示器中的顯示位置,參數(shù)x為顯示字符地址參數(shù),具體的地址映射表如下:DDRAM提供32個(gè)漢字的空間,當(dāng)寫(xiě)入文本顯示RAM時(shí),可以顯示中文字型:將兩字節(jié)編碼寫(xiě)入DDRAMK,范圍為A1A0H~F7FFH(國(guó)標(biāo)碼)。具體的中文字型編碼可參見(jiàn)ST7920GB中文字型碼表。4.4.3矩陣鍵盤(pán)行列檢測(cè)軟件設(shè)計(jì)發(fā)射端的單片機(jī)P0口外接一個(gè)四行四列的矩陣鍵盤(pán),由于使用的是P0口所以應(yīng)該在外部接上拉電阻,才能使P0口正常使用。四乘四矩陣鍵盤(pán)在仿真使用的是KEY-PAD仿真元件,其內(nèi)部的各按鍵之間的接線大致如下圖所示,C1至C4分別接P0至P3,R1至R4分別接P4至P7。程序中的鍵盤(pán)行列檢測(cè)主要由函數(shù)KeyCheck()和KeyValTranslate()函數(shù)來(lái)實(shí)現(xiàn),在主程序中對(duì)KeyCheck()函數(shù)不斷的循環(huán)檢測(cè)是否有新的按鍵輸入。KeyCheck()函數(shù)的開(kāi)始時(shí),先將P0口的低四位至高電平,高四位至低電平,即P0=0XF0;如果有鍵按下,根據(jù)則根據(jù)圖中可知,不可能為原本的低四位高電平,高四位低電平,則P0!=0XF0;然后再接下來(lái)分別判斷,是哪一行,如果是第一行則P0為0XFE,第二行P0為0XFD,第三行P0為0XFB,第四行P0為0XF7,程序中為每一行的判斷設(shè)置一個(gè)if判斷語(yǔ)句,若如何判斷則說(shuō)明是該行,進(jìn)入該行的if語(yǔ)句。得知哪一行后,這時(shí)候,通過(guò)表達(dá)式P0&0XF0得到列的狀態(tài)值,再將該值加上行值,如是第一行則加上該值加上0X0E,便可得到行和列的值。得到行和列的值后,將值返回給KeyValTranslate()的switch語(yǔ)句中,根據(jù)先前設(shè)定的矩陣鍵盤(pán)位置值,然后相應(yīng)的按鍵值后,完成鍵盤(pán)的行列檢測(cè)。

4.4.4模擬編碼芯片的編碼程序設(shè)計(jì)這里編碼程序模擬的是uPD6121編碼芯片。uPD6121芯片的工作原理和M50462、PT6221類(lèi)似,都是通過(guò)編碼后的串行數(shù)據(jù)對(duì)38~40kHz的方波進(jìn)行脈沖寬度調(diào)制。編碼主要是由用戶(hù)碼和數(shù)據(jù)碼構(gòu)成,通常還包括引導(dǎo)脈沖,引導(dǎo)脈沖總是出現(xiàn)在編碼脈沖的前頭,作為遙控接收的啟動(dòng)信號(hào);CPU只有在接收到引導(dǎo)脈沖之后,才可以對(duì)接收到的數(shù)據(jù)進(jìn)行解碼,以防止接收到不完整的發(fā)射信號(hào)。用戶(hù)碼和數(shù)據(jù)碼統(tǒng)稱(chēng)為傳送碼,通常為8位或16位的“0”“1”碼,為了避免出現(xiàn)差錯(cuò),每次發(fā)射的傳送碼中一般都包含兩次編碼:一次為原碼,一次為反碼;或相同的碼連續(xù)發(fā)兩次。程序中,采用的是模擬發(fā)送一次原碼后再發(fā)送一次反碼的形式。uPD6121的位”0”組合0.56ms的高電平和0.56ms的低電平為一個(gè)周期,波形圖為:位”1”組合0.56ms的高電平和1.685ms的低電平為一個(gè)周期,波形圖為:程序中用來(lái)模擬uPD6121編碼的函數(shù)主要有:StarCode()、DataCode(uCharSendCode)、OverCode()、Transmit(uCharSendCode)四個(gè)函數(shù)。而在這四個(gè)函數(shù)中用到的函數(shù)均有定時(shí)器0來(lái)延時(shí),做到100%的精確。StarCode()函數(shù)用于發(fā)送起始碼,先發(fā)送一段4.5ms的低電平,即讓P30出于4.5ms的低電平,用來(lái)濾去接收端運(yùn)行時(shí)就開(kāi)始累計(jì)計(jì)數(shù)的用來(lái)存儲(chǔ)發(fā)射端發(fā)送的脈寬寬度的Count.然后才開(kāi)始發(fā)送9.12ms的的高電平和4.5ms的低電平的起始碼,接收端接收到起始碼后便知道接下來(lái)開(kāi)始接受系統(tǒng)識(shí)別碼。DataCode()用于發(fā)送系統(tǒng)識(shí)別碼和操作碼,函數(shù)中將參數(shù)SendCode逐位分解,從低位開(kāi)始發(fā)送;如果該位是0,則發(fā)送位”0”,即先發(fā)送0.56ms的高電平再發(fā)送0.56ms的低電平;如果該位是1,則發(fā)送位”1”,即先發(fā)送0.56ms的高電平再發(fā)送1.685ms的低電平;連續(xù)發(fā)送八位這樣的位0和位1表示一個(gè)完整的操作碼。OverCode()用于發(fā)送結(jié)束碼,因?yàn)榻邮斩说耐獠恐袛嗍窍陆笛氐臅r(shí)候中斷,所以,之前的操作碼其實(shí)是在第二個(gè)位0或者位1才溢出外部中斷,開(kāi)始計(jì)算寬度,這樣的話(huà),最后一位似乎是沒(méi)有后續(xù)的一段0.56ms來(lái)提供下降沿用于外部中斷計(jì)算寬度。沒(méi)關(guān)系,這一步,我們要在結(jié)束碼中完成,所以O(shè)veCode函數(shù)中先發(fā)送一段0.56ms的高電平,用于操作碼最后一位的外部中斷溢出和寬度計(jì)算,隨后發(fā)送一段9.12ms的低電平和23ms的高電平用于結(jié)束這次的操作碼發(fā)送過(guò)程。Transmit()函數(shù)是用于整合這樣一個(gè)發(fā)送過(guò)程的函數(shù),原型如下:VoidTransmit(uCharSendCode){StarCode();DataCode(0X55);DataCode(0XAA);DataCode(SendCode);DataCode(~SendCode);OverCode();}可知,先發(fā)送一次起始碼,后發(fā)送兩個(gè)八位的系統(tǒng)碼,再根據(jù)參數(shù)SendCode發(fā)送一次操作碼原碼和一次操作碼反碼,最后發(fā)送結(jié)束碼,結(jié)束一個(gè)操作碼完整的發(fā)送過(guò)程。4.4.538KHz載波信號(hào)調(diào)制程序本次系統(tǒng)中的38KHz的載波信號(hào)調(diào)制使用外接單片機(jī)的內(nèi)部定時(shí)器0產(chǎn)生38KHz方波與編碼后的信號(hào)結(jié)合再送到紅外發(fā)射器發(fā)送出去。內(nèi)部的程序設(shè)計(jì)這部分較為簡(jiǎn)單,啟用定時(shí)中斷0,將定時(shí)器0的模式設(shè)置為工作方式2即TMOD=0X02;TH0設(shè)置為0XF3,TL0=0XF3;在定時(shí)器0的定時(shí)中斷函數(shù)中使用表達(dá)式T=!T(T為P3的0口)。這樣便產(chǎn)生一個(gè)38KHz的方波,輸出后在仿真中通過(guò)元件與編碼后的數(shù)據(jù)結(jié)合。4.4.6解碼程序設(shè)計(jì)可想而知解碼程序在紅外通訊系統(tǒng)的接收端中,編碼和解碼是一個(gè)可逆的過(guò)程,若要能解碼編碼過(guò)的數(shù)據(jù)那么解碼程序應(yīng)該知道編碼時(shí)對(duì)于位0和位1采用的是什么樣的波形。也就是說(shuō),解碼的關(guān)鍵是如何識(shí)別“0”和“1”,從對(duì)位的定義我們可以發(fā)現(xiàn)“0”、“1”均以0.56ms的高電平開(kāi)始,不同的是低電平的寬度不同,“0”為0.56ms,“1”為1.685ms,所以必須根據(jù)低電平的寬度區(qū)別“0”和“1”.而在接收端程序中,電平的寬度之前說(shuō)了,是使用定時(shí)器0中斷函數(shù)中的Count來(lái)計(jì)數(shù),定時(shí)器50us中斷一次。外部中斷函數(shù)中來(lái)判斷電平的寬度。用于解碼程序的變量和函數(shù)主要有:recive():外部中斷函數(shù);Count:計(jì)數(shù);buf_count:儲(chǔ)存Count計(jì)數(shù);ir_status:操作碼接收控制位;common_code_count:已接收系統(tǒng)識(shí)別碼計(jì)位key_bit_count:已接收操作碼計(jì)位buf_key_code:操作碼位存儲(chǔ)key_code:完全操作碼IsNewCode:是否有新操作碼傳送;部中斷接受到下降沿的脈沖后將會(huì)進(jìn)入外部中斷函數(shù)recive,獲取Count的計(jì)數(shù),將Count存入buf_count中,然后Count清零。buf_count來(lái)計(jì)算接受到的脈沖的寬度,如果脈沖的寬度不是合法的信號(hào),那么就去除。如果脈沖的寬度是合法的信號(hào)寬度即,buf_count符合判斷語(yǔ)句:if(buf_count>20&&buf_count<300)。然后再進(jìn)行判斷,是否為起始碼,如果是則buf_count的次數(shù)應(yīng)該為250<buf_count>300因?yàn)?ms+4.5ms=13.5ms即,13500/50=275,這時(shí)候接受狀態(tài)ir_status=1,表示已經(jīng)接受過(guò)起始碼,那么接下來(lái)接受的應(yīng)該是系統(tǒng)識(shí)別碼。同起始碼一樣,判斷16位的數(shù)據(jù)是否接受完畢,如果完畢則common_code_count為大于等于15,這里的系統(tǒng)識(shí)別碼主要是根據(jù)位數(shù)來(lái)識(shí)別而不是內(nèi)容,所以到達(dá)16位表示系統(tǒng)符合,ir_status為2表示系統(tǒng)碼也已經(jīng)接受完畢,接下來(lái)便開(kāi)始接受操作碼。根據(jù)位0和位1的脈沖寬度可知,如果40<buf_count<50則說(shuō)明接收到一個(gè)1,20<buf_count<30則說(shuō)明接收到一個(gè)0。每接收一位,key_bit_count就累加一次,key_code獲取一位數(shù)據(jù),加到8位后,key_code獲得完整的操作碼,IsNewCode=1,程序接下去運(yùn)行,根據(jù)不同的操作碼做出不同的電機(jī)操作和不同的顯示器電機(jī)狀態(tài)顯示。然后IsNewCode=0,繼續(xù)回到等待發(fā)射端用戶(hù)的操作。解碼程序流程圖:是否是合法信號(hào)?是否是合法信號(hào)?等待外部中斷接收到下降沿脈沖,進(jìn)入中斷Ybuf_count獲取Count的值,Count清零,再賦值2.是否合法信號(hào)?根據(jù)狀態(tài)控制位ir_status來(lái)判斷,接下來(lái)是什么數(shù)據(jù)。ir_status=0ir_status=2ir_status=1是否為起始碼?ir_status賦值為1,表示接收完起始碼。common_code_count>=15?ir_status賦值為2,表示接收完系統(tǒng)碼。key_bit_count<8?根據(jù)buf_count的次數(shù)來(lái)判斷是0還是1,再給buf_key_code賦值。最后添加到key_code中。YYY若接收完8位,則IsNewCode=1,key_code完整。

4.4.7發(fā)射端與接收端的通信協(xié)議設(shè)計(jì)如果想讓發(fā)射端能夠控制接收端,那么除了正確的編碼解碼之外,雙方之間必須要有一個(gè)通信協(xié)議。通信協(xié)議在“CommunicationProtocol.h“頭文件中。發(fā)射端程序中,在相關(guān)的按鍵case語(yǔ)句后面使用Transmit(uCharSendCode),發(fā)送協(xié)議代碼。如:用戶(hù)按鍵按下0,那么便將SENDCODE0作為操作碼拿去編碼,然后發(fā)送出去(SENDCODE的定義語(yǔ)句為:#defineSENDCODE00x60)。接收端解碼后,得到SENDCODE0的原碼,再用switch()語(yǔ)句來(lái)執(zhí)行caseSENDCODE0:后面的語(yǔ)句。這樣雙方達(dá)成共同的協(xié)議,變可以進(jìn)行通信。4.4.8電機(jī)控制軟件設(shè)計(jì)電視使用直流電機(jī),通過(guò)控制不同的電機(jī)電壓來(lái)達(dá)到改變轉(zhuǎn)速的效果。在仿真中,控制三個(gè)不同電壓的單片機(jī)管腳選用的是P10,P11,P12。所以程序中,通過(guò)對(duì)P1口賦予不同的值來(lái)改變電機(jī)轉(zhuǎn)速。電機(jī)P0口不同值對(duì)應(yīng)電機(jī)狀態(tài)如下表:P0口的值電機(jī)狀態(tài)0x00停止0x02電機(jī)低速檔運(yùn)行0x04電機(jī)中速檔運(yùn)行0x08電機(jī)高速檔運(yùn)行除了控制電機(jī)轉(zhuǎn)速外,程序還需要控制一個(gè)接與P37口的LED燈,用來(lái)指示電機(jī)是否定時(shí)運(yùn)行。電機(jī)的定時(shí)運(yùn)行,定時(shí)器使用的是定時(shí)器1,定時(shí)時(shí)間的長(zhǎng)度為50ms中斷一次,程序中有一個(gè)全局變量TimeCount用來(lái)計(jì)算中斷的次數(shù)。當(dāng)用戶(hù)定時(shí)開(kāi)啟后,LED指示燈亮,定時(shí)器1開(kāi)始計(jì)數(shù),中斷一次TimeCount自加一次,并且每次中斷都通過(guò)表達(dá)式來(lái)判斷是否達(dá)到用戶(hù)指定的中斷時(shí)間,表達(dá)式為:if((Time*1000)/90==TimeCount)。若達(dá)到中斷次數(shù)后,電機(jī)停轉(zhuǎn),LED指示燈關(guān)閉,TimeCount清零用于下一次定時(shí)。4.5軟件抗干擾技術(shù)隨著單片微機(jī)在各個(gè)領(lǐng)域中的應(yīng)用越來(lái)越廣泛,對(duì)其可靠性要求也越來(lái)越高。單片機(jī)系統(tǒng)的可靠性由多種因素決定,其中系統(tǒng)抗干擾性能是可靠性的重要指標(biāo)??垢蓴_措施有硬件措施和軟件措施。硬件措施如果得當(dāng),可將絕大部分干擾拒之門(mén)外,但仍然會(huì)有少數(shù)干擾進(jìn)入微機(jī)系統(tǒng),故軟件措施作為第二道防線必不可少。軟件抗干擾以其設(shè)計(jì)靈活。節(jié)省硬件資源、可靠性好的特點(diǎn)越來(lái)越受到重視。本文的汽車(chē)行駛記錄儀系統(tǒng)在設(shè)計(jì)時(shí)也使用了一些軟件抗干擾措施。4.6系統(tǒng)軟件設(shè)計(jì)注意事項(xiàng)早設(shè)計(jì)和編寫(xiě)系統(tǒng)軟件時(shí),有幾個(gè)方面需要注意:系統(tǒng)設(shè)計(jì)方面:在進(jìn)行程序編寫(xiě)之前,需要設(shè)計(jì)程序編寫(xiě)的大致方面。這個(gè)時(shí)候透徹分析程序該如何寫(xiě),是否切合實(shí)際至關(guān)重要。如果分析不到位,編寫(xiě)方向出錯(cuò)或者是用到了不切合實(shí)際的技術(shù),那有可能使整個(gè)系統(tǒng)設(shè)計(jì)停滯,甚至“流產(chǎn)”。編寫(xiě)代碼方面:很開(kāi)發(fā)人員有幾個(gè)通?。合茸鲇腥せ蛉菀椎墓δ?,然后再做無(wú)聊或者繁瑣的功能;對(duì)自己有興趣的功能投入精力多,對(duì)自己沒(méi)興趣的簡(jiǎn)單應(yīng)付。以上這些都是開(kāi)發(fā)的大忌。作為一個(gè)職業(yè)的開(kāi)發(fā)人員,不應(yīng)該以自己的興趣和喜好來(lái)決定開(kāi)發(fā)的輕重緩急。正確做法應(yīng)該如下:

你首先得用主要精力完成上述所說(shuō)的重點(diǎn)功能,而且要保證它們的代碼質(zhì)量盡可能好,盡可能方便維護(hù)(重點(diǎn)功能往往是經(jīng)常有需求變更,經(jīng)常被修改的)。對(duì)于重點(diǎn)功能中的“常用功能”,要保證時(shí)間性能夠好(能快速響應(yīng))。對(duì)于"用戶(hù)利益相關(guān)的功能",要保證bug盡可能少(尤其是安全性、穩(wěn)定性、健壯性的bug)。至于其它的非重點(diǎn)功能,只要不出明顯bug,有點(diǎn)小缺陷無(wú)傷大雅。測(cè)試方面:要把主要精力用于測(cè)試那些重點(diǎn)功能。對(duì)于"最核心功能",多進(jìn)行一些健壯性測(cè)試、穩(wěn)定性、安全性等測(cè)試。對(duì)于常用功能,主要進(jìn)行易用性和性能測(cè)試。至于其它功能,只要進(jìn)行普通的測(cè)試,保證它不出現(xiàn)明顯和嚴(yán)重bug即可。

5調(diào)試及其系統(tǒng)誤差分析5.1軟件編寫(xiě)及調(diào)試過(guò)程1、建立項(xiàng)目和源文件:在建立源文件之前,我們要先建立一個(gè)新的工程項(xiàng)目,所以選擇菜單”P(pán)roject-NewProject”彈出如圖5-1所示的“CreateNewProject”對(duì)話(huà)框。在文件名的框中填入項(xiàng)目的名稱(chēng)”紅外通訊系統(tǒng)”,然后保存。之后便可以選中單片機(jī)的類(lèi)型,我們選擇AT89C51。項(xiàng)目建立完成后,開(kāi)始建立源文件,使用菜單“File-New”或者點(diǎn)擊工具欄的新建文件按鈕,即可在項(xiàng)目窗口的右側(cè)打開(kāi)一個(gè)新的文本編輯窗口,在該窗口中輸入C語(yǔ)言源程序。保存該文件,加上擴(kuò)展名(.c),這里將文件保存為MainFlie.c。在工程窗口的文件頁(yè)中,出現(xiàn)了“Target1”,前面有“+”號(hào),點(diǎn)擊“+”展開(kāi),可以看到下一層的“SourceGroup1”,這時(shí)的工程還是一個(gè)空工程,里面什么文件也沒(méi)有,需要手動(dòng)把剛才編寫(xiě)好的源程序加入,點(diǎn)擊“SouceGroup”使其反白顯示,然后,點(diǎn)擊鼠標(biāo)右鍵,出現(xiàn)一個(gè)下拉菜單。選中其中的“AddfiletoGroup”SouceGroup1”,對(duì)話(huà)框,要求尋找源文件,注意該對(duì)話(huà)框下面的“文件類(lèi)型“默認(rèn)為CSoucefile(*.c),也就是以C為擴(kuò)展名的文件,我們的文件是以C為擴(kuò)展名的,所以在列表框中可以直接找到tlc2543.c,雙擊MainFile.c文件,將源文件加入到工程中,然后再用同樣的方法建立一個(gè)”CodeSend.h”文件和一個(gè)”CommunicationProtocol.h”,也加入到項(xiàng)目中。2、編譯調(diào)試程序完成好項(xiàng)目和源文件的建立后,便可以開(kāi)始編寫(xiě)代碼,代碼編寫(xiě)完成后編譯、連接:在設(shè)置好工程后,既可以進(jìn)行編譯、連接。選擇菜單Project-Buildtarget,對(duì)當(dāng)前工程進(jìn)行連接,如果當(dāng)前文件已修改軟件會(huì)先對(duì)該文件進(jìn)行覆蓋,然后在連接以產(chǎn)生目標(biāo)代碼。編譯過(guò)程中的信息將出現(xiàn)在輸出窗口中的Build頁(yè)中,如果源程序有語(yǔ)法錯(cuò)誤,會(huì)有錯(cuò)誤報(bào)告出現(xiàn),雙擊該行,可以定到出錯(cuò)的位置,對(duì)源程序反復(fù)修改后,最終會(huì)得到如圖所示的結(jié)果,提示獲得了名為紅外通訊系統(tǒng).hex的文件,該文件即可被編程器讀入并寫(xiě)到芯片中,同時(shí)還產(chǎn)生了一些其他相關(guān)文件可被用于KEIL的仿真與調(diào)試。其調(diào)試結(jié)果如下圖所示:與建立紅外通訊系統(tǒng)一樣的方法,再建立一個(gè)名稱(chēng)為”紅外通訊系統(tǒng)接收端”的項(xiàng)目(之前紅外通訊系統(tǒng)為發(fā)射端);同樣編寫(xiě)代碼進(jìn)行調(diào)試,然后生成“紅外通訊系統(tǒng)接收端.hex”的文件。編譯調(diào)試結(jié)果如下圖所示:這樣便完成紅外通訊系統(tǒng)軟件編寫(xiě)調(diào)試方面的內(nèi)容。5.2調(diào)試過(guò)程中遇到的問(wèn)題及其解決辦法在程序調(diào)試過(guò)程中遇到過(guò)許多的問(wèn)題,那些問(wèn)題需要一一去解決;這些問(wèn)題中,有的是程序編寫(xiě)過(guò)程中不小心造成的語(yǔ)法錯(cuò)誤,這些錯(cuò)誤往往容易于修改;也有一些問(wèn)題,是程序邏輯問(wèn)題或者算法問(wèn)題,這兩種問(wèn)題造成的后果往往比語(yǔ)法錯(cuò)誤要嚴(yán)重許多,它雖然能讓程序正常編譯,但是程序并不能像預(yù)先設(shè)計(jì)的一樣正確運(yùn)行,對(duì)于這樣的問(wèn)題,只有在不能正常實(shí)現(xiàn)功能的那部分代碼仔細(xì)推敲反復(fù)思考。下面就我編寫(xiě)過(guò)程中,遇到的幾個(gè)比較重大的問(wèn)題,并且如何發(fā)現(xiàn)及其解決進(jìn)行分析。①邏輯錯(cuò)誤:在紅外通訊系統(tǒng)接收端的代碼編寫(xiě)過(guò)程中,有一段代碼是用switch()..case語(yǔ)句來(lái)根據(jù)用戶(hù)輸入選擇操作碼的發(fā)送;在第一次編寫(xiě)時(shí),我由于大意,在每個(gè)case語(yǔ)句結(jié)束,遺漏了break;語(yǔ)句。這樣造成每次有用戶(hù)按鍵輸入,都發(fā)送這個(gè)按鍵的case語(yǔ)句后面的所有case語(yǔ)句。導(dǎo)致一次用戶(hù)輸入按鍵就發(fā)送多個(gè)操作碼。所以接收端每次都收到多個(gè)操作碼,造成多次有多次按鍵輸入的效果。后來(lái)我是根據(jù),接收端的反應(yīng)做出判斷,問(wèn)題出在接收端的用戶(hù)按鍵操作碼發(fā)送部分。正確的代碼如下:②算法錯(cuò)誤:編碼過(guò)程與解碼過(guò)程的不協(xié)調(diào),所謂編碼過(guò)程與解碼過(guò)程的不協(xié)調(diào)就是編寫(xiě)發(fā)送的過(guò)程包括起始碼,系統(tǒng)識(shí)別碼,操作碼原碼,操作碼反碼,結(jié)束碼的編碼方式和解碼方式不匹配。這個(gè)問(wèn)題之前有提到過(guò),我們解碼用的是接收端單片機(jī)的外部中斷1,中斷觸發(fā)方式是下降沿,但是編碼的位“0”和位“1”卻是同樣先一段0.56,s的高電平,再根據(jù)0.56ms和1.685的低電平來(lái)區(qū)別。所以解碼過(guò)程,始終是要等到第二位的數(shù)據(jù)的高電平變?yōu)榈碗娖讲拍芘袛嗲耙晃坏碗娖降膶挾龋坏莿傞_(kāi)始并沒(méi)有意識(shí)到這個(gè)問(wèn)題,所以接收端接收到的只有7位,最后一位被當(dāng)做結(jié)束碼濾掉。對(duì)于這個(gè)問(wèn)題,我是通過(guò)在紙上繪制出,編碼過(guò)程的所有方波波形發(fā)現(xiàn)的。解決辦法,就是在結(jié)束碼多一段0.56ms的高電平,用來(lái)計(jì)算前一位的低電平的寬度,從而區(qū)別前一位是位“0”還是位“1”。

結(jié)論紅外通訊應(yīng)用越來(lái)越廣泛,各種家用電器,電子產(chǎn)品,醫(yī)療設(shè)備等無(wú)一不用到紅外通訊,所以對(duì)于紅外通訊的研究設(shè)計(jì),是十分有必要的。本論文對(duì)紅外通訊系統(tǒng)進(jìn)行了細(xì)致的研究,從編碼解碼芯片,紅外發(fā)射接收器件開(kāi)始了解;隨后根據(jù)編碼解碼芯片的原理,自己在軟件設(shè)計(jì)上模擬了編碼解碼芯片的過(guò)程,并且運(yùn)用于仿真系統(tǒng)中,達(dá)到紅外通訊的效果,了解并且模擬運(yùn)用紅外通訊的核心技術(shù)。仿真系統(tǒng)中,主要使用的是89C51芯片為核心,分成紅外通訊的發(fā)射端和接收端兩部分電路,實(shí)現(xiàn)了利用紅外通訊技術(shù)對(duì)電機(jī)的控制,液晶顯示器的控制。在單片機(jī)仿真系統(tǒng)中使用了Proteus7.8,該仿真軟件元件庫(kù)齊全,使用方便,功能極其強(qiáng)大,應(yīng)用程序采用C語(yǔ)言編寫(xiě)。通過(guò)本論文對(duì)紅外通訊系統(tǒng)的研究發(fā)現(xiàn),紅外通訊的確是一種非常實(shí)用的遠(yuǎn)程控制技術(shù),成本低,點(diǎn)對(duì)點(diǎn)控制使用方便,資料及其技術(shù)成熟便于深入研究探討。當(dāng)然,紅外通訊技術(shù)還存在缺點(diǎn),但是我們可以不斷努力改進(jìn)它,讓它更好地造福于人類(lèi)。謝謝!

參考文獻(xiàn)[1]百度百科紅外通訊/view/169851.htm[2]激光網(wǎng)紅外技術(shù)的現(xiàn)狀和未來(lái)/2008-10/ART-240004-8400-23146001.html[3]蘇長(zhǎng)贊.紅外線與超聲波遙控.北京人民郵電出版社,1997[4]張玉香.新型遙控接收模塊.HS0038[J]無(wú)線電,1998,7[5]肖景和.實(shí)用遙控電路.北京人民郵電出版社,1998[6]JosephM.Kah,JohnR.Barry.WirelessInfraredCommunications.Junc19,1997.Dept.ofElectricalEngineeringandComputerSciencesUniversityofCaliforn.[7]高茹云.通訊電子線路.西安西安電子科技大學(xué)出版社,1999[8]劉振海.單片機(jī)原理及應(yīng)用技術(shù).北京高等教育出版社[9]沈紅衛(wèi).單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)實(shí)例與分析.北京北京航空航天大學(xué)出版社[10]原東昌.李晉炬.通信原理與電路實(shí)驗(yàn)指導(dǎo)書(shū).北京北京理工大學(xué)出版社[11]嚴(yán)天峰,王耀琦.紅外通信模塊設(shè)計(jì)例程.中京航空航天大學(xué)出版社[12]徐瑋,51單片機(jī)綜合學(xué)習(xí)系統(tǒng)—紅外線遙控篇.北京電子工業(yè)出版社[13]江世明.基于Proteus的單片機(jī)應(yīng)用技術(shù).北京電子工業(yè)出版社[14]黃迪明等.C語(yǔ)言程序設(shè)計(jì)教程.北京國(guó)防工業(yè)出版社[15]周立功等.增強(qiáng)型80C51單片機(jī)速成與實(shí)戰(zhàn).北京北京航空航天大學(xué)出版社

致謝經(jīng)過(guò)了這個(gè)學(xué)期不斷的努力學(xué)習(xí)和修改,我終于完成了畢業(yè)設(shè)計(jì)論文。這也意味著我大學(xué)本科的結(jié)束,大學(xué)四年,我成長(zhǎng)了許多,感謝老師們給予我的教育,同時(shí)也感謝我的同學(xué)在學(xué)習(xí)上對(duì)我的幫助。在整個(gè)畢業(yè)設(shè)計(jì)過(guò)程中,劉曉東老師對(duì)我細(xì)心指導(dǎo)和教育,讓我從中學(xué)到了很多有著長(zhǎng)遠(yuǎn)意義的東西,不勝感激。同時(shí)感謝其他等在畢業(yè)設(shè)計(jì)過(guò)程中給予我的莫大幫助的老師,這次也祝各位老師在以后的生活中心想事成,萬(wàn)事如意。最后,衷心感謝各位評(píng)委在百忙中對(duì)我的論文進(jìn)行仔細(xì)的審閱。

附錄“CommunicationProtocol.h”頭文件:發(fā)射端與接收端的通信協(xié)議/**發(fā)射端與接收端之間通信協(xié)議的定義.*用于定義發(fā)射端和接收端之間的通信協(xié)議.*//**通信操作碼的定義*紅外發(fā)射操作碼的宏定義,便于更直觀*地閱讀操作碼。*/ #defineSENDCODE0 0x60 /*數(shù)字鍵0的操作碼*/#defineSENDCODE1 0x61 /*數(shù)字鍵1的操作碼*/#defineSENDCODE2 0x62 /*數(shù)字鍵2的操作碼*/#defineSENDCODE3 0x63 /*數(shù)字鍵3的操作碼*/#defineSENDCODE40x64 /*數(shù)字鍵4的操作碼*/#defineSENDCODE50x65 /*數(shù)字鍵5的操作碼*/#defineSENDCODE60x66 /*數(shù)字鍵6的操作碼*/#defineSENDCODE7 0x67 /*數(shù)字鍵7的操作碼*/#defineSENDCODE80x68 /*數(shù)字鍵8的操作碼*/#defineSENDCODE90x69 /*數(shù)字鍵9的操作碼*/#defineSENDCODEA 'A' /*字母按鍵A的操作碼*/#defineSENDCODEB 'B' /*字母按鍵B的操作碼*/#defineSENDCODEC'C' /*字母按鍵C的操作碼*/#defineSENDCODED'D' /*字母按鍵D的操作碼*/#defineSENDCODEE'E' /*字母按鍵E的操作碼*/#defineSENDCODEF'F' /*字母按鍵F的操作碼*//**所需數(shù)據(jù)類(lèi)型定義*/#defineuCharunsignedchar#defineuIntunsignedint

CodeSend.h頭文件:發(fā)射端函數(shù)聲明頭文件/**頭文件CodeSend.h*聲明和定義用于紅外發(fā)射信息的函數(shù),*及其輔助紅外發(fā)射所需的函數(shù).*/#include<stdio.h>#include"CommunicationProtocol.h"http://////////////////////后面部分定義說(shuō)明//函數(shù)定義.////////////**函數(shù)功能:將字符串中的0和1轉(zhuǎn)換成數(shù)字0和1.*參數(shù):charToChangeChar(待轉(zhuǎn)換的字符)*//**函數(shù)功能:延時(shí).*參數(shù):intDelayTime(延時(shí)的時(shí)間)*/voidDelay(intDelayTime){ while(DelayTime);}/**微秒延時(shí)函數(shù)定義,以微秒為單位的參數(shù)*/voidDelayUs(uIntt) { while(--t);}/**毫秒延時(shí)函數(shù)定義,以毫秒為單位的參數(shù)*/voidDelayMs(uIntt) { while(t--) //大致延時(shí)2mS { DelayUs(245); DelayUs(245); }}/**函數(shù)功能:檢測(cè)矩陣鍵盤(pán)的輸入*參數(shù):無(wú)*該函數(shù)在MainFile.c中實(shí)現(xiàn)*/uCharKeyCheck();/**函數(shù)功能:鍵值碼轉(zhuǎn)換成數(shù)字值*參數(shù):無(wú)*該函數(shù)在MainFile.c中實(shí)現(xiàn)*/uCharKeyValTranslate();/**函數(shù)功能:發(fā)送紅外發(fā)射數(shù)據(jù)結(jié)束時(shí)的結(jié)束碼*參數(shù):無(wú)*該函數(shù)在MainFile.c中實(shí)現(xiàn)*/voidOverCode();/**函數(shù)功能:發(fā)送紅外發(fā)射數(shù)據(jù)開(kāi)始時(shí)的起始碼*參數(shù):無(wú)*該函數(shù)在MainFile.c中實(shí)現(xiàn)*/voidStartCode();/**函數(shù)功能:發(fā)送紅外發(fā)射數(shù)據(jù)過(guò)程中所需的數(shù)據(jù)碼*參數(shù):uChardata*該函數(shù)在MainFile.c中實(shí)現(xiàn)*/voidDataCode(uChardat);/**函數(shù)功能:發(fā)送數(shù)據(jù)*參數(shù):uCharSendCode*該函數(shù)在MainFile.C中實(shí)現(xiàn)*/voidTransmit(uCharSendCode);/**/MainFile.c運(yùn)行文件:發(fā)射端主程序文件/**主程序所需頭文件調(diào)用*/#include<stdio.h>#include<reg52.h>#include<absacc.h> #include"CodeSend.h" //函數(shù)聲明文件#include"CommunicationProtocol.h"http://通訊協(xié)議聲明文件#defineKEYPORTP0/**全

溫馨提示

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

評(píng)論

0/150

提交評(píng)論