版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
重慶理工大學畢業(yè)論文 基于單片機的紅外通訊軟件設計PAGEPAGE581目錄摘要 IAbstract II1緒論 11.1課題的研究意義 11.2紅外通信的國內(nèi)外現(xiàn)狀 21.3目前紅外通信技術的應用熱點 21.4系統(tǒng)設計思路分析 31.5系統(tǒng)設計需解決的難點要點 32系統(tǒng)方案設計 52.1系統(tǒng)功能設計 52.2系統(tǒng)的總體方案設計 52.2.1系統(tǒng)的總體設計思路 52.2.2系統(tǒng)總體設計流程圖 62.2.3系統(tǒng)總體結構圖 62.2.3系統(tǒng)總體結構圖 72.3系統(tǒng)設計所需用到的主要器件 72.4系統(tǒng)設計技巧 73系統(tǒng)硬件設計 83.1主要元器件的簡單介紹和選擇 8·3.1.1單片機介紹及選擇 83.1.2紅外通訊編碼解碼芯片選擇 93.1.3紅外發(fā)射頭和接收頭 93.2紅外通訊系統(tǒng)電路設計 103.2.1最小系統(tǒng)電路 103.2.3按鍵輸入電路 113.2.4紅外編碼電路及其紅外發(fā)射 123.2.5載波信號電路 123.2.6解碼電路及其紅外接 133.2.7LCD液晶顯示電路和電機電路 134系統(tǒng)軟件設計 164.1紅外通訊系統(tǒng)軟件設計的編程語言選擇 164.2開發(fā)環(huán)境,即編程軟件的選擇 174.3軟件設計原則 174.4系統(tǒng)軟件設計 184.4.1主程序功能的設計及其實現(xiàn) 184.4.2LCD1602液晶顯示器軟件設計 214.4.3矩陣鍵盤行列檢測軟件設計 224.4.4模擬編碼芯片的編碼程序設計 244.4.538KHz載波信號調(diào)制程序 254.4.6解碼程序設計 254.4.7發(fā)射端與接收端的通信協(xié)議設計 284.4.8電機控制軟件設計 284.5軟件抗干擾技術 294.6系統(tǒng)軟件設計注意事項 295調(diào)試及其系統(tǒng)誤差分析 305.1軟件編寫及調(diào)試過程 305.2調(diào)試過程中遇到的問題及其解決辦法 32結論 34參考文獻 35致謝 36附錄 37摘要著科學技術的發(fā)展,單片機因其高可靠性和高性價比,在智能化家用電器、儀器儀表等諸多領域內(nèi)得到了極為廣泛的應用。當前單片機對家用電器控制呈現(xiàn)出外型簡單化、功能多樣化、性能優(yōu)越化的發(fā)展趨向。紅外通訊是目前使用較多的一種通訊方法。紅外線通訊裝置具有體積小、功耗低、功能強、成本低等特點。在家庭生活中,錄音機、音響設備、空調(diào)彩電都采用了紅外通訊系統(tǒng)。本文簡述基于單片機的紅外通訊設備在現(xiàn)代社會的推廣使用情況和發(fā)展前景,而系統(tǒng)方面主要基于紅外通訊設備的實現(xiàn)原理和單片機原理來設計發(fā)射即遙控器和接收端。發(fā)射端主要包含按鍵輸入,來控制接收端的電機運轉和液晶顯示器的顯示;并且對可行性進行細致研究,綜合功能用途,做出整體設計流程。關鍵字:紅外通訊發(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緒論紅外通訊就是通過紅外線傳輸數(shù)據(jù),是目前比較常用的一種無線數(shù)據(jù)傳輸手段,它具有無污、信息傳輸穩(wěn)定、信息傳輸安全性高以及使用方便等優(yōu)點。在電腦技術發(fā)展早期,數(shù)據(jù)都是通過線纜傳輸?shù)模€纜傳輸連線麻煩,需要特制接口,頗為不便。自紅外通訊技術發(fā)明以來,去多早期用線纜傳輸?shù)脑O備和通訊工具都改為利用外紅線來進行通訊,如家電產(chǎn)品、工業(yè)控制、娛樂設施等領域。并且經(jīng)過多年的發(fā)展,有了今天以紅外通訊為核心技術的藍牙、紅外、802.11等無線數(shù)據(jù)傳輸技術[1]。1.1課題的研究意義信息時代,通信技術的發(fā)展總是走在各種技術的最前沿。隨著各種手持式信息終端設備在我們的工作中頻繁的使用出現(xiàn),就標志著無線通信的時代已經(jīng)到來,也意味著無線通信這種比傳統(tǒng)的有線通信更加的讓人接受。因為它方便,快捷,安全,穩(wěn)定,所以無線通信的方式更加容易被人們重視,從而催促著各種無線通信技術的研發(fā)。紅外通信是一種無線的傳輸方式,正在被日益廣泛的應用,大的應用范圍從軍用,醫(yī)療,超市,銀行等設備,小的應用則小到家用電器,無一沒有涉及到紅外通信技術,所以有不斷的新的紅外通信產(chǎn)品涌進市場,重而也推動了對紅外通信技術的研究和發(fā)展。紅外發(fā)射裝置電路簡單,易于實現(xiàn),并且對空氣污染小。在某些應用場合,比無線電通信具有更好的綜合效果。紅外無線通信在我國古代已有應用,只是比較簡單。在第一次世界大戰(zhàn)中德國就研制并運用了紅外通信。第二次世界大戰(zhàn)中美國、日本、蘇聯(lián)也都是用過紅外無線通信。但在這漫長的時間里、由于紅外無線通信系統(tǒng)光源均為熱輻射源,調(diào)制困難,接收器又是光電池,內(nèi)部噪音很大,影響了通信距離和可靠性,所以發(fā)展被怠慢。近年來由于微電子技術發(fā)展,發(fā)射器件和接受器件已經(jīng)被半導體器件所代替,又由于它具有無需鋪設電路、保密性好、抗干擾能力強、價格低廉、設備簡單等優(yōu)點,再加上近年來各種市場應用設備、家用設備的自動化提高,紅外通信又重新被人們重視,從而得到發(fā)展。1.2紅外通信的國內(nèi)外現(xiàn)狀紅外線是由一位叫WilliamHerschel的天文學家于19世紀發(fā)現(xiàn)的,是一種點對點連接的高科技通訊方式,它要求兩個通訊端之間的紅外發(fā)射口對準發(fā)射連接,并且不能相隔太遠,中間也不能有障礙物,即紅外。自1800年發(fā)現(xiàn)紅外線以來,人們從沒停過對它的研究,以至于后人能夠利用紅外開發(fā)出眾多應用產(chǎn)品,在安防監(jiān)控領域,汽車夜視系統(tǒng),醫(yī)療器械行業(yè),家庭電子行業(yè),通訊領域等范圍都已經(jīng)被得到廣泛的應用。而
隨著社會的不斷發(fā)展,人們的安全防范意識愈來愈強烈,通訊的必要性也越來越突出可見,由于紅外線為不可見光,具有很強的隱藏性和保密性,因此紅外在安防和通訊領域大展身手,不論國內(nèi)外,目前正在市場掀起一股”紅外潮”。
傳統(tǒng)的紅外通訊應用主要在與家電和汽車防盜遙控器方面,由于調(diào)制技術、相關收發(fā)器技術的快速發(fā)展,紅外傳輸應用也發(fā)生了質(zhì)的飛躍。1993年國際紅外線協(xié)會在美國成立,積極整合建立紅外傳輸?shù)臉藴?,極大地推動了紅外產(chǎn)品的發(fā)展。2000年全球已有1.7億臺配有國際紅外線協(xié)會模組的電子產(chǎn)品進入市場,尤其在電子游戲機市場有極大的潛力。2001年,在信息收發(fā)模組方面,由于國際紅外線協(xié)會模組的價格已從早期的5美元降至2美元,國際大廠紛紛在亞太地區(qū)一些勞動力相對低廉的地方尋求加工場所,估計年產(chǎn)值將有1億多美元的規(guī)模,當時一些IC設計公司、系統(tǒng)與應用軟件廠商已積極投入應用產(chǎn)品的研究與生產(chǎn),目前已經(jīng)形成一定規(guī)模。但人們對她的研究仍然延續(xù),時不時出現(xiàn)的新發(fā)明新應用,帶給我們驚訝與感嘆,人類對這座寶藏的開發(fā)還遠遠不夠,紅外產(chǎn)業(yè)還有廣闊的擴張空間[2-7]。1.3目前紅外通信技術的應用熱點紅外應用產(chǎn)品種類繁多,但是比較熱門的應用的主要是紅外熱像、紅外攝像、紅外通訊、紅外光譜儀、紅外傳感器等幾個比較大的領域,但是我們做的是紅外通訊所以這里只介紹下紅外通訊應用。紅外通訊傳統(tǒng)的紅外通訊應用主要在與家電和汽車防盜遙控器方面,由于調(diào)制技術、相關收發(fā)器技術的快速發(fā)展,紅外傳輸應用也發(fā)生了質(zhì)的飛躍。1993年國際紅外線協(xié)會在美國成立,積極整合建立紅外傳輸?shù)臉藴?,極大地推動了紅外產(chǎn)品的發(fā)展。1.4系統(tǒng)設計思路分析系統(tǒng)分為接收端和發(fā)射端兩部分,接收端采用4*4矩陣鍵盤用來接受用戶的輸入(0-9的數(shù)字輸入,A-F的字母輸入),經(jīng)過放大器放大后再通過載波信號的調(diào)制,把編碼信號的有用信號傳播出去;接收端接收到信號后,經(jīng)過解碼得到發(fā)射端用戶輸入的信號,最后在數(shù)碼管或者LCD中顯示出來。因為本系統(tǒng)的功能都屬89C51單片機的應用范疇,所以使用89C51單片機來完成設計。1.5系統(tǒng)設計需解決的難點要點整個系統(tǒng)設計中有幾個部分是難點也是系統(tǒng)正常運行的關鍵核心。鍵盤輸入設計一個4*4的矩陣鍵盤來用接受用戶的輸入,利用8個IO口,在程序中對矩陣鍵盤進行行列的高低電平的判斷,并在程序中對某個按鍵的按下返回預先設定的數(shù)字鍵或者字母鍵,從而完成用戶的輸入。紅外發(fā)射電路選擇基于通用UART紅外通信,是因為可以利用通用UART成熟的硬件機制,實現(xiàn)紅外數(shù)據(jù)通信。這種設計模式實際上是紅外通信原理與串口通信機制的有機結合。且有實踐證明,這種紅外通信模式是可行可靠的[8]。載波信號電路紅外線的傳播不一定準確而且不一定夠遠,所以利用89C51單片機定時器產(chǎn)生38KHz的方波輸出電路,在編碼信號輸出端加上一個高頻載波信號,通過載波信號的調(diào)制,把編碼信號的有用信“攜帶著”傳播出去,這樣的紅外線信號能夠傳得更遠而且也能更有效的避免干擾紅外接受器紅外接收器部分使用紅外專用接收集成電路HS0038來完成紅外信號的光電轉換及接收。HS0038是塑封一體化紅外線接收器,它是一種集紅外線接收、放大、整形于一體的集成電路,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號兼容的所有工作,沒有紅外遙控信號時為高電平,收到紅外信號時為低電平,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。
2系統(tǒng)方案設計2.1系統(tǒng)功能設計通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成[9]。故,系統(tǒng)設計應該分為兩部分電路,發(fā)射和接收。系統(tǒng)所帶功能如下:-能通過發(fā)射端來控制接收端(用電機模擬的電風扇)進行實時的控制;-接收端(電機模擬的電風扇)能夠分檔次的運行在大、中、小三個檔次,并且能夠實現(xiàn)定時功能,電風扇的開關。-接收端(電機模擬的電風扇)能夠在LCD液晶顯示器上顯示風扇實時運轉的轉速檔次,定時的時間。2.2系統(tǒng)的總體方案設計2.2.1系統(tǒng)的總體設計思路本次的系統(tǒng)設計是采用AT89C51作為發(fā)射電路(控制器)和接受電路(電風扇)以及38KHz的紅外信號載波調(diào)制電路的核心CPU,發(fā)射電路可以分為基本電路模塊、鍵盤接受模塊、紅外發(fā)射模塊三個模塊,接收電路可分為基本電路模塊、液晶顯示模塊、電機電路模塊三個模塊,單獨的紅外信號載波電路調(diào)制電路[8-9]。發(fā)射電路鍵盤采用四乘四矩陣鍵盤電路,通過程序檢索用戶的輸入,返回相應的按鍵值到程序中;程序使用得到的按鍵值,得知用戶的輸入后取得相應程序中預先設定的操作碼發(fā)送給紅外發(fā)射器;再通過紅外發(fā)射器發(fā)射出去的信號經(jīng)過載波電路38KHz方波調(diào)制后,由接收端的紅外接收器接受到操作碼后進行解碼操作得操作碼從而得知發(fā)射端的按鍵輸入,從而改變接收端的電機運轉情況和LCD液晶顯示情況,達到紅外通訊控制的目的。·基本電路模塊基本電路分為AT89C51正常運行所需的晶振電路和復位電路,主要由硬件來控制和實現(xiàn)沒有采用軟件的控制?!ゆI盤接受模塊鍵盤接受模塊采用四乘四的外接矩陣鍵盤,在程序中對矩陣鍵盤行和列的高低變換來得到用戶在鍵盤的輸入情況,需要用到單片機的8個管腳,系統(tǒng)中使用了發(fā)射端的P2口的八個管腳,若使用的是P0口的八個管腳則需要外接上拉電阻,阻值大約在5-10K之間?!ぜt外發(fā)射模塊紅外發(fā)射模塊采用SE303紅外發(fā)射裝置來發(fā)送信號,發(fā)射的操作碼為程序中預先設定。·液晶顯示模塊液晶顯示模塊使用LM016L液晶顯示器來顯示電機的運轉情況,如電機的運轉的轉速檔次、電機定時時間?!る姍C電路模塊電機電路模塊用一個電機模擬電風扇的運轉,電機可以改變轉速檔次,定時運行,并且在相關的線路上接有LED指示燈,分為別為小檔指示燈,中檔指示燈,大檔指示燈,定時指示燈,停轉指示燈,用于提示用戶電機的運轉狀態(tài)。進行編碼操作通過發(fā)射器發(fā)送到接收端等待用戶輸入啟動接收端等待發(fā)射端發(fā)送數(shù)據(jù)電機做出相應的運行電機停轉啟動發(fā)射端2.2.2系統(tǒng)總體進行編碼操作通過發(fā)射器發(fā)送到接收端等待用戶輸入啟動接收端等待發(fā)射端發(fā)送數(shù)據(jù)電機做出相應的運行電機停轉啟動發(fā)射端LCD顯示電機狀態(tài)
2.2.3系統(tǒng)總體結構圖LCD顯示電機狀態(tài)最小系統(tǒng)最小系統(tǒng)按鍵電路載波信號調(diào)制電路最小系統(tǒng)發(fā)射電路接收電路解碼電路編碼電路顯示電路按鍵電路直流電機單位2.3系統(tǒng)設計所需用到的主要器件89C51單片機作為兩個電路的核心CPU,用M50462作為紅外發(fā)射器,HS0038作為紅外接收器,LM016L液晶顯示器,一個四乘四的矩陣鍵盤,綠色和紅色的LED指示燈,電機。2.4系統(tǒng)設計技巧在系統(tǒng)仿真過程中沒有現(xiàn)成的SE303的紅外發(fā)射器和HS0038紅外接收器,所以本系統(tǒng)仿真時采用引用接收端和發(fā)射端的各自一個管腳相連通,中間裝一個LED指示燈來指示信號的傳遞;在發(fā)射的根據(jù)uPD6121的編碼發(fā)射原理,對發(fā)射端的管腳進行,低電平脈寬為0.56ms高電平脈寬為0.56ms組成一個周期為1.12ms的位“0”,而低電平脈寬為0.56ms高電平脈寬為1.685ms組成一個周期為2.24ms的位“1”,發(fā)送接收端的管腳。每16位組成一個操作碼,在接收端解碼操作碼得到相應的改變電機運轉的動作。
3系統(tǒng)硬件設計基于單片機的紅外通訊硬件方面的在本章介紹,根據(jù)系統(tǒng)的設計方案和功能要求介紹系統(tǒng)總體的構成和各部分的硬件。系統(tǒng)兩大電路模塊都采用AT89C51單片機作為核心CPU,鍵盤部分采四乘四的矩陣鍵盤;顯示部分使用LCD1602液晶顯示器;紅外發(fā)射器使用PH303紅外發(fā)光二極管;紅外遙控編碼芯片使用M50462;紅外接收器使HS003塑封一體化紅外線接收器,它是一種集紅外線接收、放大、整形于一體的集成電路;電機采用直流電機。3.1主要元器件的簡單介紹和選擇·3.1.1單片機介紹及選擇單片機是微機控制的典型代表,它在一片硅片上集成了中央處理器、存儲器和各種輸入輸出接口,如I/O口,定時器/計數(shù)器接口,外部中斷接口,串口,讀/寫接口等)。這樣的芯片因為具有和計算機一樣的功能,所以稱之為單片微型計算機,簡稱單片機。而單片機又主要應用于實時控制,并通常作為其他系統(tǒng)的組成部分使用,故又稱之為嵌入式控制器。自從20世紀70年代中期美國仙童公司推出第一臺F8單片機以來,單片機已經(jīng)有30多年的發(fā)展歷史。直至今天,單片的生產(chǎn)廠家和型號已經(jīng)是各式各樣。紅外通訊系統(tǒng)的單片機中,采用AT89C51單片機作為中央處理器。89C51單片機帶有4K閃爍可編程可擦除只讀存儲器(FPEROM—FalshProgrammableandErasableReadOnlyMemory),128字節(jié)內(nèi)部RAM,32個I/O接口,2個16位定時器/計數(shù)器,一個5向量兩級中斷結構,一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。同時,AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU工作,但允許RAM、定時/計數(shù)器、串行通信口及中斷系統(tǒng)繼續(xù)工作,掉電方式保存RAM的數(shù)據(jù),但振蕩器停止工作并禁止其它所有部件工作指導下一個硬件復位。3.1.2紅外通訊編碼解碼芯片選擇紅外通訊電路若要將數(shù)據(jù)通過紅外發(fā)射頭和紅外接收頭發(fā)送出去,則需要在電路的發(fā)射端先進行編碼操作編碼成操作碼,然后通過載波電路將編碼后的芯片進行38KHz的調(diào)制后,才能更遠更安全穩(wěn)定地發(fā)送出去;紅外接受電路在接收到信號后,則需要進行解碼操作,還原發(fā)射端的最原始數(shù)據(jù),才能知道發(fā)射端是發(fā)送一個什么樣的請求。由于我個人在用Proteus進行仿真時,并沒有編碼和解碼芯片可以使用,所以程序中我全面模擬了編碼和解碼芯片的功能;我選定了uPD6121為編碼芯片,BC7210為解碼芯片;之所以選擇這兩個芯片分別作為發(fā)射端和接收端的編碼解碼芯片是因為BC7210解碼芯片成本低,常見,而且BC7210的輸出可以設置為并行輸出或者串行輸出,串行輸出方式兼容SPI和UART兩種接口,可以輕松完成與各種MCU、PC機的接口??梢匀〈鶶AA3049等芯片;而能夠與BC7210解碼芯片互相支持的多個芯片中又屬Upd6121編碼芯片最為合適[13]。uPD6121編碼芯片和BC7210解碼芯片如圖3-1所示圖3-13.1.3紅外發(fā)射頭和接收頭紅外發(fā)射二極管是紅外通信系統(tǒng)中用來發(fā)射信號的一個非常重要的元件,雖然它看起來比較小,不太顯眼,但是沒有它,紅外通信就只能是一句空話。它是實現(xiàn)紅外通信的橋梁,其重要性就好像燈泡在照明系統(tǒng)中的重要性一樣,是整個紅外通信系統(tǒng)的焦點。選用常用的紅外發(fā)光二極管SE303,外形類似LED發(fā)光二極管,發(fā)出紅外光(近紅外線約0.93μm)。管壓降約1.4V,工作電流一般小于20mA。為了適應不同的工作電壓,回路中常串有限流電阻。SE303實物圖如圖3-2所示圖3-2 紅外接收器是紅外發(fā)光二極管的受控裝置,其里面有相應的紅外光電轉換電路。這里我們采用的接收器是一種紅外專用接收集成電路HS0038,用它來完成紅外信號的光電轉換及接收。接收方一般使用HS0038一體化紅外線接收器進行接收解碼,當HS0038接收到38kHz紅外信號時,輸出端輸出低電平,否則為高電平。所以紅外遙控器發(fā)送紅外信號時,參考上面遙控串行數(shù)據(jù)編碼波形圖,在低電平處發(fā)送38kHz紅外信號,高電平處則不發(fā)送紅外信號。HS0038實物圖如圖3-3所示。圖3-33.2紅外通訊系統(tǒng)電路設計3.2.1最小系統(tǒng)電路單片機如果要能夠正常工作,那么最小系統(tǒng)是必不可少的。而所謂的最小系統(tǒng),就是單片機的XTAL1,XTAL2兩個IO口外接晶振電路,RST口外接復位電路,EA、VCC接5V電源,VSS接地,這樣組成的一個小系統(tǒng)成為最小系統(tǒng)。所以,紅外通訊系統(tǒng)中的發(fā)射端和接收端都需要有如下圖所示的基本電路模塊:圖3-4這里值得注意的是:仿真的時候VCC和VSS都默認地接5V電源和接地,所以不需要再添加,但是繪制原理圖和制作PCB板時,不能將VCC和VSS遺漏,否則單片機無法正常工作。3.2.3按鍵輸入電路用來接收用戶輸入的按鍵模塊,采用四乘四矩陣鍵盤與單片機的P0八個管腳相連,在程序中進行行列檢測,從而得出用戶對哪個按鍵進行的單擊操作(具體算法實現(xiàn)在第四章軟件設計中詳解)。這里值得注意的是,使用P0口時,單片機內(nèi)部是沒有接上拉電阻,所以我們需要外部添加上路電阻。按鍵輸入模塊電路如下圖所示: 圖3-5圖3-53.2.4紅外編碼電路及其紅外發(fā)射紅外編碼電路的編碼主要是由用戶碼和數(shù)據(jù)碼構成,用戶碼和數(shù)據(jù)碼統(tǒng)稱為傳送碼,通常為8位或16位的“0”“1”碼,為了避免出現(xiàn)差錯,每次發(fā)射的傳送碼中一般都包含兩次編碼:一次為原碼,一次為反碼;或相同的碼連續(xù)發(fā)兩次。本系統(tǒng)采用8位的傳送碼,并且再發(fā)送一次反補作為驗證。采用uPD6121編碼芯片,KL/O0至KL/O7七個管腳接受未編碼的原始操作數(shù)據(jù);也可以用KI1至KI4四個管腳與KL/O0至O7組成矩陣鍵盤直接接受輸入數(shù)據(jù)。本系統(tǒng)采用第一種方案。(這里的編碼電路沒有經(jīng)過載波就發(fā)送,是因為這是單獨繪制的編碼和紅外發(fā)射電路,并沒有應用到仿真。而本次系統(tǒng)設計仿真中并沒有編碼芯片,所以在仿真電路中單獨繪制解碼發(fā)射模塊,用于學習不參與程序運行。)電路模塊電路圖如下圖所示:圖3-63.2.5載波信號電路在所有的高頻通信電路中,載波信號的存在是必不可少的。為使紅外信號能夠正確的傳送出去和傳送更長的距離,我們也需要在編碼信號輸出的同端加上一個高頻載波信號。通過這個高頻載波信號的調(diào)制,把編碼信號的有用信息“攜帶”出去,這樣信號的傳送距離就能更長,而且能夠有效的避免其他信號的干擾,從而提高了信息傳送的準確性。本系統(tǒng)采用89C51單片機內(nèi)部定時器產(chǎn)生38KHz信號的方波,與編碼后的傳送碼結合,調(diào)制后傳送出去。圖中的SendIO用于接收來自用戶輸入的數(shù)據(jù)編碼后得到的傳送碼(操作碼)。載波信號調(diào)制電路如下圖所示:圖3-73.2.6解碼電路及其紅外接圖3-8通過解碼電路后,得到用戶最原始的輸出數(shù)據(jù),從而控制LCD液晶顯示器顯示電機運轉的相關信息,并且控制電機運轉。3.2.7LCD液晶顯示電路和電機電路根據(jù)解碼后得到的用戶原始輸入數(shù)據(jù),通過程序控制液晶顯示器的顯示,和電機的運轉。液晶顯示器使用LCD1602。RS,RW,E三個控制端口分別接單片機P0口的P0.5,P0.6,P0.7,外接上路電阻,而數(shù)據(jù)傳輸端口接單片機的P2口,因為內(nèi)部已經(jīng)有上路電阻,所以不再需要外部接上拉電阻。這里電機采用直流電機,而控制直流電機的轉速主要是通過控制其電壓實現(xiàn),所以電路中用三個2N3055三極管,三個三極管的基極分別接單片機的P11,P12,P13三個管腳,集電極接不同大小的電阻再接電源,然后通過程序來控制使用不同的三極管,從而控制不同的直流電機電壓,達到改變轉速的效果。液晶顯示模塊電路和電機電路分別如圖3-9所示圖3-9總體發(fā)射端綜合仿真電路圖總體接收端綜合仿真電路圖
4系統(tǒng)軟件設計4.1紅外通訊系統(tǒng)軟件設計的編程語言選擇現(xiàn)在程序編程語言很多如C語言,C++語言,匯編語言,機器語言等,這些語言主要都應用于嵌入式開發(fā)之中,但由于機器語言的難以閱讀,所以現(xiàn)在已經(jīng)基本不再使用。而在單片機應用系統(tǒng)開發(fā)過程中,程序設計有兩種方法:一種是基于匯編語言的程序設計方法,另一種是基于C語言的程序設計方法。匯編語言的機器代碼生成效率高但可讀性不強,而C語言在大多數(shù)情況下,其機器代碼生成效率和匯編語言相當,而可讀性和可移植性卻遠遠超過匯編語言。此外,由于C語言有很好的層次結構,使其編寫的程序更容易閱讀和維護。且C編寫的程序比匯編更符合人們的思考習慣,開發(fā)者能更專心的考慮程序設計而不是考慮些細節(jié)問題,這樣就減少了開發(fā)和調(diào)試的時間[10]。選用C語言設計程序具有一些特點[14]:C語言代碼簡潔易讀,使用靈活方便,裝性好,代碼重用性高。C語言具有函數(shù),相對于匯編語言來說,代碼的封裝性遠遠高于匯編語言,代碼的重用性高,并且具有一定的模塊化。并且表達能力強,豐富的數(shù)據(jù)結構類型,用戶根據(jù)需要,采用多種數(shù)據(jù)類型來控制各種復雜的數(shù)據(jù);C語言還有多種運算符,用戶可以靈活地進行簡單或者復雜的算術運算,表達方式也很靈活。而且C語言是一種結構化程序設計語言。這一點很適合單片機的設計,C語言以函數(shù)作為程序設計的基本單位,C語言程序中的函數(shù)相當于一般語言中的子程序。還有很關鍵的一點是C語言擁有指針,直接操作計算機硬件。C語言具有直接訪問機器物理地址的能力,Keil的C51編譯器和Franklin的C51編譯器都可以直接對單片機的內(nèi)部特殊功能寄存器和I/O端口進行操作,可以直接訪問片內(nèi)或片尾存儲器,還可以進行各種位操作。4.2開發(fā)環(huán)境,即編程軟件的選擇本次紅外通訊系統(tǒng)的程序編寫的開發(fā)環(huán)境,選擇使用KeiluVersion3。它是美國KeilSoftware公司出品的主要用于51系列單片機主要用于C語言軟件程序開發(fā)工具。Keil還提供了包括C語言編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等完全的開發(fā)方案。在KeiluVersion3上編寫的C語言程序可以直接生成一個.HEX文件在Proteus中直接將HEX文件調(diào)入到單片機中便可直接運行程序,方便程序在單片機環(huán)境下的運行和調(diào)試。而使用C編譯器在產(chǎn)生代碼的準確性和效率方面達到了較高的水平,而且可以附加靈活地控制選項,在開發(fā)大型項目時非常理想,是目前應用最廣泛的單片機開發(fā)環(huán)境之一[15]。所以,如果是用C語言編寫單片機程序沒那么Keil幾乎就是第一選擇。4.3軟件設計原則軟件是連接需求分析\硬件系統(tǒng)以及使得系統(tǒng)實現(xiàn)的橋梁,對軟件進行編寫設計之前應該先了解軟件設計的原則。·軟件要有一定的可靠性,軟件系統(tǒng)規(guī)模越大越復雜,可知這時候軟件的可靠性就越來越難保證。軟件的可靠性意味著該軟件在測試運行過程中避免可能發(fā)生故障的能力,且一旦發(fā)生故障后,具有解脫和排除故障的能力。軟件可靠性和硬件可靠性本質(zhì)區(qū)別在于:后者為物理機理的衰變和老化所致,而前者是由于設計和實現(xiàn)的錯誤所致。在進行軟件設計之前的軟件的可靠性必須在設計階段就確定,在生產(chǎn)和測試階段再考慮就困難了?!ぼ浖枰薪研?,又稱為魯棒性,是指軟件對于規(guī)范要求以外的輸入能夠判斷出這個輸入不符合規(guī)范要求,并能有合理的處理方式。但是它的健壯性是一個較模糊的概念,但是卻是非常重要的軟件外部量度標準。軟件設計的健壯與否直接反應了分析設計和編碼人員的水平·軟件的可修改性,在軟件編寫完成后,可能在后續(xù)部分根據(jù)用戶的需求反應,或者其他原因,可能需要修改軟件。這時候,就要求軟件開發(fā)人員在軟件開發(fā)時要編寫完整的文檔和良好的結構,如模塊化?!ぼ浖帉懸菀桌斫?,這個其實和可修改性是相關聯(lián)的。擁有良好的結構、明朗的注釋,便于修改時候的閱讀?!ぼ浖锌蓽y試性,就是設計一個適當?shù)臄?shù)據(jù)集合,用來測試所建立的系統(tǒng),并保證系統(tǒng)得到全面的檢驗?!ぼ浖行市?,效率性是指軟件在編寫的時候應該注意運行時,盡可能得少用計算機內(nèi)存,并且采用最優(yōu)的算法來處理數(shù)據(jù)結構,讓軟件在計算機中運行時所占用的內(nèi)存達到最低,這點很考研開發(fā)人員的水平?!ぼ浖藴驶瓌t,軟件編寫要基于業(yè)界的一些規(guī)范、協(xié)議、接口、命名規(guī)則?!ぼ浖邢冗M些和可擴展性,軟件要能滿足客戶的要求,并且做好模塊化,便于日后對軟件的升級。4.4系統(tǒng)軟件設計4.4.1主程序功能的設計及其實現(xiàn)系統(tǒng)功能的要求決定了系統(tǒng)軟件設計的方向,本次系統(tǒng)程序設計流程圖如圖4-1所示。紅外通訊的數(shù)據(jù)發(fā)送是通過區(qū)別脈沖的低電平寬度來區(qū)分位0和位1,位0和位1的高電平均為0.56ms,而低電平位0為0.56ms,位1為1.685ms。對于發(fā)射端程序,運行后先初始化定時器0用于后面程序編碼,然后開始進行對矩陣鍵盤的行和列進行檢測,等待用戶的輸入;若有用戶輸入,程序先判定用戶輸入的按鍵,然后用將指定的按鍵數(shù)字送入Transmit()編碼函數(shù)中進行編碼。根據(jù)發(fā)射端和接收端的通信協(xié)議(在“CommunicationProtocol.h”頭文件中)在Transmit()編碼函數(shù)中發(fā)送按鍵數(shù)值指定的數(shù)據(jù)碼,依次先發(fā)送一次起始碼(9ms高電平,4.5ms低電平),然后發(fā)送兩次系統(tǒng)識別碼(0x55與0xAA),一次數(shù)據(jù)碼碼一次數(shù)據(jù)碼的反碼,最后再發(fā)送一次結束碼(9ms高電平,4.5ms低電平,22.5ms高電平),這樣一套順序組成一個完整操作碼,完全模擬編碼芯片。接收端程序啟動后,先對LCD液晶顯示器,定時器0,定時器1,外部中斷1。顯示器顯示電機初始狀態(tài),主程序開始停留在while(IsNewCode)的循環(huán)等待新的發(fā)射端用戶輸入。定時器0開始計數(shù)50us中斷一次,定時器0的中斷函數(shù)time0內(nèi)部對Count進行計數(shù)。外部中斷接受到下降沿的脈沖后將會進入外部中斷函數(shù)recive,獲取Count的計數(shù),根據(jù)Count的次數(shù)來計算接受到的脈沖的寬度,如果脈沖的寬度不是合法的信號,那么就去除。如果脈沖的寬度是合法的信號寬度即,20<Count<300。然后再進行判斷,是否為起始碼,如果是則Count的次數(shù)應該為250<Count>300因為9ms+4.5ms=13.5ms即,13500/50=275,這時候接受狀態(tài)ir_status=1,表示已經(jīng)接受過起始碼,那么接下來接受的應該是系統(tǒng)識別碼。同起始碼一樣,判斷16位的數(shù)據(jù)是否接受完畢,如果完畢則common_code_count為大于等于15,ir_status為2表示系統(tǒng)碼也已經(jīng)接受完畢,接下來便開始接受操作碼(數(shù)據(jù)碼)。根據(jù)位0和位1的脈沖寬度可知,如果40<Count<50則說明接收到一個1,20<Count<30則說明接收到一個0。每接收一位,key_bit_count就累加一次,加到8位后,IsNewCode=1,程序接下去運行,根據(jù)不同的操作碼做出不同的電機操作和不同的顯示器電機狀態(tài)顯示。然后IsNewCode=0,繼續(xù)回到等待發(fā)射端用戶的操作。發(fā)射端和接收端的通信協(xié)議如下:按鍵值用于通信的操作碼值按鍵值用于通信的操作碼值10X6100X6020X62A‘A’(自動轉換成二進制)30X63B‘B’40X64C‘C’50X65D‘D’60X66E‘E’70X67F‘F’80X6890X69按鍵功能簡介如下:按鍵值功能按鍵值功能0-9定時數(shù)字輸入(秒為單位)A(ON/C)啟動電機B(=)定時開啟C(+)增檔D(-)減檔F(÷)停止電機
發(fā)射端啟動接收端啟動初始化LCD液晶顯示器顯示初始信息初始化是否有用戶輸入?按鍵輸入檢測NY根據(jù)用戶輸入,得到相關的按鍵信息后,進行編碼編碼后數(shù)據(jù)與38KHz的載波結合發(fā)射端啟動接收端啟動初始化LCD液晶顯示器顯示初始信息初始化是否有用戶輸入?按鍵輸入檢測NY根據(jù)用戶輸入,得到相關的按鍵信息后,進行編碼編碼后數(shù)據(jù)與38KHz的載波結合將經(jīng)過載波調(diào)制后的編碼數(shù)據(jù)發(fā)送出去等待來自發(fā)射端的數(shù)據(jù)?啟動定時器0,50us累計一次,BI技術送入外部中斷函數(shù),并且獲得定時器累計是否為8位傳送碼數(shù)據(jù)發(fā)送NY解碼傳送碼,得到用戶輸入數(shù)據(jù)控制電機運行LCD液晶顯示器顯示電機相關信息串行數(shù)據(jù)傳送和并行數(shù)據(jù)傳送。本次設計采用并行數(shù)據(jù)傳送方式。8位并行數(shù)據(jù)傳送時序下圖如所示:單片機寫數(shù)據(jù)到LCD1602顯示器的時序圖單片機從LCD1602讀數(shù)據(jù)時序圖RS為并行的指令/數(shù)據(jù)選擇信號,RS=0表示并行指令選擇信號,RS=1表示并行數(shù)據(jù)選擇信號;E為LCD1602的使能信號,由時序圖可知,使能信號為高電有效;R/W為并行的讀寫選擇信號,邏輯“1”表示讀,邏輯“0”表示寫。程序中WriteInstruction(uChardictate)用于寫指令到顯示器中,形參表示要寫入的指令;WriteData(uChardat)用于寫數(shù)據(jù)到顯示器中,形參dat為要寫入要顯示器的數(shù)據(jù)。而不管是寫指令還是寫數(shù)據(jù),都應該注意LCD1602的延時時序,由于E為高脈沖的時候寫數(shù)據(jù)和寫指令,所以程序中在E為高脈沖后使用延時函數(shù)DelayNMS(1)讓其符合LCD1602的延時時序,讓指令和數(shù)據(jù)準確讀入到顯示器中。LCD1602液晶顯示器內(nèi)部控制指令如下表所示:在寫數(shù)據(jù)之前,應該先指定數(shù)據(jù)在顯示器中的顯示地址;程序中用,WriteAddress(uCharx)來指定數(shù)據(jù)在顯示器中的顯示位置,參數(shù)x為顯示字符地址參數(shù),具體的地址映射表如下:DDRAM提供32個漢字的空間,當寫入文本顯示RAM時,可以顯示中文字型:將兩字節(jié)編碼寫入DDRAMK,范圍為A1A0H~F7FFH(國標碼)。具體的中文字型編碼可參見ST7920GB中文字型碼表。4.4.3矩陣鍵盤行列檢測軟件設計發(fā)射端的單片機P0口外接一個四行四列的矩陣鍵盤,由于使用的是P0口所以應該在外部接上拉電阻,才能使P0口正常使用。四乘四矩陣鍵盤在仿真使用的是KEY-PAD仿真元件,其內(nèi)部的各按鍵之間的接線大致如下圖所示,C1至C4分別接P0至P3,R1至R4分別接P4至P7。程序中的鍵盤行列檢測主要由函數(shù)KeyCheck()和KeyValTranslate()函數(shù)來實現(xiàn),在主程序中對KeyCheck()函數(shù)不斷的循環(huán)檢測是否有新的按鍵輸入。KeyCheck()函數(shù)的開始時,先將P0口的低四位至高電平,高四位至低電平,即P0=0XF0;如果有鍵按下,根據(jù)則根據(jù)圖中可知,不可能為原本的低四位高電平,高四位低電平,則P0!=0XF0;然后再接下來分別判斷,是哪一行,如果是第一行則P0為0XFE,第二行P0為0XFD,第三行P0為0XFB,第四行P0為0XF7,程序中為每一行的判斷設置一個if判斷語句,若如何判斷則說明是該行,進入該行的if語句。得知哪一行后,這時候,通過表達式P0&0XF0得到列的狀態(tài)值,再將該值加上行值,如是第一行則加上該值加上0X0E,便可得到行和列的值。得到行和列的值后,將值返回給KeyValTranslate()的switch語句中,根據(jù)先前設定的矩陣鍵盤位置值,然后相應的按鍵值后,完成鍵盤的行列檢測。
4.4.4模擬編碼芯片的編碼程序設計這里編碼程序模擬的是uPD6121編碼芯片。uPD6121芯片的工作原理和M50462、PT6221類似,都是通過編碼后的串行數(shù)據(jù)對38~40kHz的方波進行脈沖寬度調(diào)制。編碼主要是由用戶碼和數(shù)據(jù)碼構成,通常還包括引導脈沖,引導脈沖總是出現(xiàn)在編碼脈沖的前頭,作為遙控接收的啟動信號;CPU只有在接收到引導脈沖之后,才可以對接收到的數(shù)據(jù)進行解碼,以防止接收到不完整的發(fā)射信號。用戶碼和數(shù)據(jù)碼統(tǒng)稱為傳送碼,通常為8位或16位的“0”“1”碼,為了避免出現(xiàn)差錯,每次發(fā)射的傳送碼中一般都包含兩次編碼:一次為原碼,一次為反碼;或相同的碼連續(xù)發(fā)兩次。程序中,采用的是模擬發(fā)送一次原碼后再發(fā)送一次反碼的形式。uPD6121的位”0”組合0.56ms的高電平和0.56ms的低電平為一個周期,波形圖為:位”1”組合0.56ms的高電平和1.685ms的低電平為一個周期,波形圖為:程序中用來模擬uPD6121編碼的函數(shù)主要有:StarCode()、DataCode(uCharSendCode)、OverCode()、Transmit(uCharSendCode)四個函數(shù)。而在這四個函數(shù)中用到的函數(shù)均有定時器0來延時,做到100%的精確。StarCode()函數(shù)用于發(fā)送起始碼,先發(fā)送一段4.5ms的低電平,即讓P30出于4.5ms的低電平,用來濾去接收端運行時就開始累計計數(shù)的用來存儲發(fā)射端發(fā)送的脈寬寬度的Count.然后才開始發(fā)送9.12ms的的高電平和4.5ms的低電平的起始碼,接收端接收到起始碼后便知道接下來開始接受系統(tǒng)識別碼。DataCode()用于發(fā)送系統(tǒng)識別碼和操作碼,函數(shù)中將參數(shù)SendCode逐位分解,從低位開始發(fā)送;如果該位是0,則發(fā)送位”0”,即先發(fā)送0.56ms的高電平再發(fā)送0.56ms的低電平;如果該位是1,則發(fā)送位”1”,即先發(fā)送0.56ms的高電平再發(fā)送1.685ms的低電平;連續(xù)發(fā)送八位這樣的位0和位1表示一個完整的操作碼。OverCode()用于發(fā)送結束碼,因為接收端的外部中斷是下降沿的時候中斷,所以,之前的操作碼其實是在第二個位0或者位1才溢出外部中斷,開始計算寬度,這樣的話,最后一位似乎是沒有后續(xù)的一段0.56ms來提供下降沿用于外部中斷計算寬度。沒關系,這一步,我們要在結束碼中完成,所以OveCode函數(shù)中先發(fā)送一段0.56ms的高電平,用于操作碼最后一位的外部中斷溢出和寬度計算,隨后發(fā)送一段9.12ms的低電平和23ms的高電平用于結束這次的操作碼發(fā)送過程。Transmit()函數(shù)是用于整合這樣一個發(fā)送過程的函數(shù),原型如下:VoidTransmit(uCharSendCode){StarCode();DataCode(0X55);DataCode(0XAA);DataCode(SendCode);DataCode(~SendCode);OverCode();}可知,先發(fā)送一次起始碼,后發(fā)送兩個八位的系統(tǒng)碼,再根據(jù)參數(shù)SendCode發(fā)送一次操作碼原碼和一次操作碼反碼,最后發(fā)送結束碼,結束一個操作碼完整的發(fā)送過程。4.4.538KHz載波信號調(diào)制程序本次系統(tǒng)中的38KHz的載波信號調(diào)制使用外接單片機的內(nèi)部定時器0產(chǎn)生38KHz方波與編碼后的信號結合再送到紅外發(fā)射器發(fā)送出去。內(nèi)部的程序設計這部分較為簡單,啟用定時中斷0,將定時器0的模式設置為工作方式2即TMOD=0X02;TH0設置為0XF3,TL0=0XF3;在定時器0的定時中斷函數(shù)中使用表達式T=!T(T為P3的0口)。這樣便產(chǎn)生一個38KHz的方波,輸出后在仿真中通過元件與編碼后的數(shù)據(jù)結合。4.4.6解碼程序設計可想而知解碼程序在紅外通訊系統(tǒng)的接收端中,編碼和解碼是一個可逆的過程,若要能解碼編碼過的數(shù)據(jù)那么解碼程序應該知道編碼時對于位0和位1采用的是什么樣的波形。也就是說,解碼的關鍵是如何識別“0”和“1”,從對位的定義我們可以發(fā)現(xiàn)“0”、“1”均以0.56ms的高電平開始,不同的是低電平的寬度不同,“0”為0.56ms,“1”為1.685ms,所以必須根據(jù)低電平的寬度區(qū)別“0”和“1”.而在接收端程序中,電平的寬度之前說了,是使用定時器0中斷函數(shù)中的Count來計數(shù),定時器50us中斷一次。外部中斷函數(shù)中來判斷電平的寬度。用于解碼程序的變量和函數(shù)主要有:recive():外部中斷函數(shù);Count:計數(shù);buf_count:儲存Count計數(shù);ir_status:操作碼接收控制位;common_code_count:已接收系統(tǒng)識別碼計位key_bit_count:已接收操作碼計位buf_key_code:操作碼位存儲key_code:完全操作碼IsNewCode:是否有新操作碼傳送;部中斷接受到下降沿的脈沖后將會進入外部中斷函數(shù)recive,獲取Count的計數(shù),將Count存入buf_count中,然后Count清零。buf_count來計算接受到的脈沖的寬度,如果脈沖的寬度不是合法的信號,那么就去除。如果脈沖的寬度是合法的信號寬度即,buf_count符合判斷語句:if(buf_count>20&&buf_count<300)。然后再進行判斷,是否為起始碼,如果是則buf_count的次數(shù)應該為250<buf_count>300因為9ms+4.5ms=13.5ms即,13500/50=275,這時候接受狀態(tài)ir_status=1,表示已經(jīng)接受過起始碼,那么接下來接受的應該是系統(tǒng)識別碼。同起始碼一樣,判斷16位的數(shù)據(jù)是否接受完畢,如果完畢則common_code_count為大于等于15,這里的系統(tǒng)識別碼主要是根據(jù)位數(shù)來識別而不是內(nèi)容,所以到達16位表示系統(tǒng)符合,ir_status為2表示系統(tǒng)碼也已經(jīng)接受完畢,接下來便開始接受操作碼。根據(jù)位0和位1的脈沖寬度可知,如果40<buf_count<50則說明接收到一個1,20<buf_count<30則說明接收到一個0。每接收一位,key_bit_count就累加一次,key_code獲取一位數(shù)據(jù),加到8位后,key_code獲得完整的操作碼,IsNewCode=1,程序接下去運行,根據(jù)不同的操作碼做出不同的電機操作和不同的顯示器電機狀態(tài)顯示。然后IsNewCode=0,繼續(xù)回到等待發(fā)射端用戶的操作。解碼程序流程圖:是否是合法信號?是否是合法信號?等待外部中斷接收到下降沿脈沖,進入中斷Ybuf_count獲取Count的值,Count清零,再賦值2.是否合法信號?根據(jù)狀態(tài)控制位ir_status來判斷,接下來是什么數(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ù)來判斷是0還是1,再給buf_key_code賦值。最后添加到key_code中。YYY若接收完8位,則IsNewCode=1,key_code完整。
4.4.7發(fā)射端與接收端的通信協(xié)議設計如果想讓發(fā)射端能夠控制接收端,那么除了正確的編碼解碼之外,雙方之間必須要有一個通信協(xié)議。通信協(xié)議在“CommunicationProtocol.h“頭文件中。發(fā)射端程序中,在相關的按鍵case語句后面使用Transmit(uCharSendCode),發(fā)送協(xié)議代碼。如:用戶按鍵按下0,那么便將SENDCODE0作為操作碼拿去編碼,然后發(fā)送出去(SENDCODE的定義語句為:#defineSENDCODE00x60)。接收端解碼后,得到SENDCODE0的原碼,再用switch()語句來執(zhí)行caseSENDCODE0:后面的語句。這樣雙方達成共同的協(xié)議,變可以進行通信。4.4.8電機控制軟件設計電視使用直流電機,通過控制不同的電機電壓來達到改變轉速的效果。在仿真中,控制三個不同電壓的單片機管腳選用的是P10,P11,P12。所以程序中,通過對P1口賦予不同的值來改變電機轉速。電機P0口不同值對應電機狀態(tài)如下表:P0口的值電機狀態(tài)0x00停止0x02電機低速檔運行0x04電機中速檔運行0x08電機高速檔運行除了控制電機轉速外,程序還需要控制一個接與P37口的LED燈,用來指示電機是否定時運行。電機的定時運行,定時器使用的是定時器1,定時時間的長度為50ms中斷一次,程序中有一個全局變量TimeCount用來計算中斷的次數(shù)。當用戶定時開啟后,LED指示燈亮,定時器1開始計數(shù),中斷一次TimeCount自加一次,并且每次中斷都通過表達式來判斷是否達到用戶指定的中斷時間,表達式為:if((Time*1000)/90==TimeCount)。若達到中斷次數(shù)后,電機停轉,LED指示燈關閉,TimeCount清零用于下一次定時。4.5軟件抗干擾技術隨著單片微機在各個領域中的應用越來越廣泛,對其可靠性要求也越來越高。單片機系統(tǒng)的可靠性由多種因素決定,其中系統(tǒng)抗干擾性能是可靠性的重要指標??垢蓴_措施有硬件措施和軟件措施。硬件措施如果得當,可將絕大部分干擾拒之門外,但仍然會有少數(shù)干擾進入微機系統(tǒng),故軟件措施作為第二道防線必不可少。軟件抗干擾以其設計靈活。節(jié)省硬件資源、可靠性好的特點越來越受到重視。本文的汽車行駛記錄儀系統(tǒng)在設計時也使用了一些軟件抗干擾措施。4.6系統(tǒng)軟件設計注意事項早設計和編寫系統(tǒng)軟件時,有幾個方面需要注意:系統(tǒng)設計方面:在進行程序編寫之前,需要設計程序編寫的大致方面。這個時候透徹分析程序該如何寫,是否切合實際至關重要。如果分析不到位,編寫方向出錯或者是用到了不切合實際的技術,那有可能使整個系統(tǒng)設計停滯,甚至“流產(chǎn)”。編寫代碼方面:很開發(fā)人員有幾個通?。合茸鲇腥せ蛉菀椎墓δ?,然后再做無聊或者繁瑣的功能;對自己有興趣的功能投入精力多,對自己沒興趣的簡單應付。以上這些都是開發(fā)的大忌。作為一個職業(yè)的開發(fā)人員,不應該以自己的興趣和喜好來決定開發(fā)的輕重緩急。正確做法應該如下:
你首先得用主要精力完成上述所說的重點功能,而且要保證它們的代碼質(zhì)量盡可能好,盡可能方便維護(重點功能往往是經(jīng)常有需求變更,經(jīng)常被修改的)。對于重點功能中的“常用功能”,要保證時間性能夠好(能快速響應)。對于"用戶利益相關的功能",要保證bug盡可能少(尤其是安全性、穩(wěn)定性、健壯性的bug)。至于其它的非重點功能,只要不出明顯bug,有點小缺陷無傷大雅。測試方面:要把主要精力用于測試那些重點功能。對于"最核心功能",多進行一些健壯性測試、穩(wěn)定性、安全性等測試。對于常用功能,主要進行易用性和性能測試。至于其它功能,只要進行普通的測試,保證它不出現(xiàn)明顯和嚴重bug即可。
5調(diào)試及其系統(tǒng)誤差分析5.1軟件編寫及調(diào)試過程1、建立項目和源文件:在建立源文件之前,我們要先建立一個新的工程項目,所以選擇菜單”Project-NewProject”彈出如圖5-1所示的“CreateNewProject”對話框。在文件名的框中填入項目的名稱”紅外通訊系統(tǒng)”,然后保存。之后便可以選中單片機的類型,我們選擇AT89C51。項目建立完成后,開始建立源文件,使用菜單“File-New”或者點擊工具欄的新建文件按鈕,即可在項目窗口的右側打開一個新的文本編輯窗口,在該窗口中輸入C語言源程序。保存該文件,加上擴展名(.c),這里將文件保存為MainFlie.c。在工程窗口的文件頁中,出現(xiàn)了“Target1”,前面有“+”號,點擊“+”展開,可以看到下一層的“SourceGroup1”,這時的工程還是一個空工程,里面什么文件也沒有,需要手動把剛才編寫好的源程序加入,點擊“SouceGroup”使其反白顯示,然后,點擊鼠標右鍵,出現(xiàn)一個下拉菜單。選中其中的“AddfiletoGroup”SouceGroup1”,對話框,要求尋找源文件,注意該對話框下面的“文件類型“默認為CSoucefile(*.c),也就是以C為擴展名的文件,我們的文件是以C為擴展名的,所以在列表框中可以直接找到tlc2543.c,雙擊MainFile.c文件,將源文件加入到工程中,然后再用同樣的方法建立一個”CodeSend.h”文件和一個”CommunicationProtocol.h”,也加入到項目中。2、編譯調(diào)試程序完成好項目和源文件的建立后,便可以開始編寫代碼,代碼編寫完成后編譯、連接:在設置好工程后,既可以進行編譯、連接。選擇菜單Project-Buildtarget,對當前工程進行連接,如果當前文件已修改軟件會先對該文件進行覆蓋,然后在連接以產(chǎn)生目標代碼。編譯過程中的信息將出現(xiàn)在輸出窗口中的Build頁中,如果源程序有語法錯誤,會有錯誤報告出現(xiàn),雙擊該行,可以定到出錯的位置,對源程序反復修改后,最終會得到如圖所示的結果,提示獲得了名為紅外通訊系統(tǒng).hex的文件,該文件即可被編程器讀入并寫到芯片中,同時還產(chǎn)生了一些其他相關文件可被用于KEIL的仿真與調(diào)試。其調(diào)試結果如下圖所示:與建立紅外通訊系統(tǒng)一樣的方法,再建立一個名稱為”紅外通訊系統(tǒng)接收端”的項目(之前紅外通訊系統(tǒng)為發(fā)射端);同樣編寫代碼進行調(diào)試,然后生成“紅外通訊系統(tǒng)接收端.hex”的文件。編譯調(diào)試結果如下圖所示:這樣便完成紅外通訊系統(tǒng)軟件編寫調(diào)試方面的內(nèi)容。5.2調(diào)試過程中遇到的問題及其解決辦法在程序調(diào)試過程中遇到過許多的問題,那些問題需要一一去解決;這些問題中,有的是程序編寫過程中不小心造成的語法錯誤,這些錯誤往往容易于修改;也有一些問題,是程序邏輯問題或者算法問題,這兩種問題造成的后果往往比語法錯誤要嚴重許多,它雖然能讓程序正常編譯,但是程序并不能像預先設計的一樣正確運行,對于這樣的問題,只有在不能正常實現(xiàn)功能的那部分代碼仔細推敲反復思考。下面就我編寫過程中,遇到的幾個比較重大的問題,并且如何發(fā)現(xiàn)及其解決進行分析。①邏輯錯誤:在紅外通訊系統(tǒng)接收端的代碼編寫過程中,有一段代碼是用switch()..case語句來根據(jù)用戶輸入選擇操作碼的發(fā)送;在第一次編寫時,我由于大意,在每個case語句結束,遺漏了break;語句。這樣造成每次有用戶按鍵輸入,都發(fā)送這個按鍵的case語句后面的所有case語句。導致一次用戶輸入按鍵就發(fā)送多個操作碼。所以接收端每次都收到多個操作碼,造成多次有多次按鍵輸入的效果。后來我是根據(jù),接收端的反應做出判斷,問題出在接收端的用戶按鍵操作碼發(fā)送部分。正確的代碼如下:②算法錯誤:編碼過程與解碼過程的不協(xié)調(diào),所謂編碼過程與解碼過程的不協(xié)調(diào)就是編寫發(fā)送的過程包括起始碼,系統(tǒng)識別碼,操作碼原碼,操作碼反碼,結束碼的編碼方式和解碼方式不匹配。這個問題之前有提到過,我們解碼用的是接收端單片機的外部中斷1,中斷觸發(fā)方式是下降沿,但是編碼的位“0”和位“1”卻是同樣先一段0.56,s的高電平,再根據(jù)0.56ms和1.685的低電平來區(qū)別。所以解碼過程,始終是要等到第二位的數(shù)據(jù)的高電平變?yōu)榈碗娖讲拍芘袛嗲耙晃坏碗娖降膶挾?;但是剛開始并沒有意識到這個問題,所以接收端接收到的只有7位,最后一位被當做結束碼濾掉。對于這個問題,我是通過在紙上繪制出,編碼過程的所有方波波形發(fā)現(xiàn)的。解決辦法,就是在結束碼多一段0.56ms的高電平,用來計算前一位的低電平的寬度,從而區(qū)別前一位是位“0”還是位“1”。
結論紅外通訊應用越來越廣泛,各種家用電器,電子產(chǎn)品,醫(yī)療設備等無一不用到紅外通訊,所以對于紅外通訊的研究設計,是十分有必要的。本論文對紅外通訊系統(tǒng)進行了細致的研究,從編碼解碼芯片,紅外發(fā)射接收器件開始了解;隨后根據(jù)編碼解碼芯片的原理,自己在軟件設計上模擬了編碼解碼芯片的過程,并且運用于仿真系統(tǒng)中,達到紅外通訊的效果,了解并且模擬運用紅外通訊的核心技術。仿真系統(tǒng)中,主要使用的是89C51芯片為核心,分成紅外通訊的發(fā)射端和接收端兩部分電路,實現(xiàn)了利用紅外通訊技術對電機的控制,液晶顯示器的控制。在單片機仿真系統(tǒng)中使用了Proteus7.8,該仿真軟件元件庫齊全,使用方便,功能極其強大,應用程序采用C語言編寫。通過本論文對紅外通訊系統(tǒng)的研究發(fā)現(xiàn),紅外通訊的確是一種非常實用的遠程控制技術,成本低,點對點控制使用方便,資料及其技術成熟便于深入研究探討。當然,紅外通訊技術還存在缺點,但是我們可以不斷努力改進它,讓它更好地造福于人類。謝謝!
參考文獻[1]百度百科紅外通訊/view/169851.htm[2]激光網(wǎng)紅外技術的現(xiàn)狀和未來/2008-10/ART-240004-8400-23146001.html[3]蘇長贊.紅外線與超聲波遙控.北京人民郵電出版社,1997[4]張玉香.新型遙控接收模塊.HS0038[J]無線電,1998,7[5]肖景和.實用遙控電路.北京人民郵電出版社,1998[6]JosephM.Kah,JohnR.Barry.WirelessInfraredCommunications.Junc19,1997.Dept.ofElectricalEngineeringandComputerSciencesUniversityofCaliforn.[7]高茹云.通訊電子線路.西安西安電子科技大學出版社,1999[8]劉振海.單片機原理及應用技術.北京高等教育出版社[9]沈紅衛(wèi).單片機應用系統(tǒng)設計實例與分析.北京北京航空航天大學出版社[10]原東昌.李晉炬.通信原理與電路實驗指導書.北京北京理工大學出版社[11]嚴天峰,王耀琦.紅外通信模塊設計例程.中京航空航天大學出版社[12]徐瑋,51單片機綜合學習系統(tǒng)—紅外線遙控篇.北京電子工業(yè)出版社[13]江世明.基于Proteus的單片機應用技術.北京電子工業(yè)出版社[14]黃迪明等.C語言程序設計教程.北京國防工業(yè)出版社[15]周立功等.增強型80C51單片機速成與實戰(zhàn).北京北京航空航天大學出版社
致謝經(jīng)過了這個學期不斷的努力學習和修改,我終于完成了畢業(yè)設計論文。這也意味著我大學本科的結束,大學四年,我成長了許多,感謝老師們給予我的教育,同時也感謝我的同學在學習上對我的幫助。在整個畢業(yè)設計過程中,劉曉東老師對我細心指導和教育,讓我從中學到了很多有著長遠意義的東西,不勝感激。同時感謝其他等在畢業(yè)設計過程中給予我的莫大幫助的老師,這次也祝各位老師在以后的生活中心想事成,萬事如意。最后,衷心感謝各位評委在百忙中對我的論文進行仔細的審閱。
附錄“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ù)類型定義*/#defineuCharunsignedchar#defineuIntunsignedint
CodeSend.h頭文件:發(fā)射端函數(shù)聲明頭文件/**頭文件CodeSend.h*聲明和定義用于紅外發(fā)射信息的函數(shù),*及其輔助紅外發(fā)射所需的函數(shù).*/#include<stdio.h>#include"CommunicationProtocol.h"http://////////////////////后面部分定義說明//函數(shù)定義.////////////**函數(shù)功能:將字符串中的0和1轉換成數(shù)字0和1.*參數(shù):charToChangeChar(待轉換的字符)*//**函數(shù)功能:延時.*參數(shù):intDelayTime(延時的時間)*/voidDelay(intDelayTime){ while(DelayTime);}/**微秒延時函數(shù)定義,以微秒為單位的參數(shù)*/voidDelayUs(uIntt) { while(--t);}/**毫秒延時函數(shù)定義,以毫秒為單位的參數(shù)*/voidDelayMs(uIntt) { while(t--) //大致延時2mS { DelayUs(245); DelayUs(245); }}/**函數(shù)功能:檢測矩陣鍵盤的輸入*參數(shù):無*該函數(shù)在MainFile.c中實現(xiàn)*/uCharKeyCheck();/**函數(shù)功能:鍵值碼轉換成數(shù)字值*參數(shù):無*該函數(shù)在MainFile.c中實現(xiàn)*/uCharKeyValTranslate();/**函數(shù)功能:發(fā)送紅外發(fā)射數(shù)據(jù)結束時的結束碼*參數(shù):無*該函數(shù)在MainFile.c中實現(xiàn)*/voidOverCode();/**函數(shù)功能:發(fā)送紅外發(fā)射數(shù)據(jù)開始時的起始碼*參數(shù):無*該函數(shù)在MainFile.c中實現(xiàn)*/voidStartCode();/**函數(shù)功能:發(fā)送紅外發(fā)射數(shù)據(jù)過程中所需的數(shù)據(jù)碼*參數(shù):uChardata*該函數(shù)在MainFile.c中實現(xiàn)*/voidDataCode(uChardat);/**函數(shù)功能:發(fā)送數(shù)據(jù)*參數(shù):uCharSendCode*該函數(shù)在MainFile.C中實現(xiàn)*/voidTransmit(uCharSendCode);/**/MainFile.c運行文件:發(fā)射端主程序文件/**主程序所需頭文件調(diào)用*/#include<stdio.h>#include<reg52.h>#include<absacc.h> #include"CodeSend.h" //函數(shù)聲明文件#include"CommunicationProtocol.h"http://通訊協(xié)議聲明文件#defineKEYPORTP0/**全
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度防火門綠色建筑認證合同2篇
- 二零二五版海上貨物運輸合同適用范圍與船舶建造合同3篇
- 二零二五版全方位房產(chǎn)及土地使用權買賣合同3篇
- 二零二五年電商代運營用戶運營與社區(qū)建設合同3篇
- 二零二五年電子商務平臺店長勞動合同規(guī)定2篇
- 二零二五年電子商務平臺安全風險評估與管理咨詢合同3篇
- 二零二五版寄賣合同范本:電子產(chǎn)品寄賣代理合同2篇
- 二零二五版共有產(chǎn)權房買賣合同范本6篇
- 二零二五版文化創(chuàng)意產(chǎn)業(yè)合伙合同規(guī)范文本3篇
- 基于二零二五年度市場趨勢的產(chǎn)品研發(fā)合同2篇
- 骨科手術后患者營養(yǎng)情況及營養(yǎng)不良的原因分析,骨傷科論文
- GB/T 24474.1-2020乘運質(zhì)量測量第1部分:電梯
- GB/T 12684-2006工業(yè)硼化物分析方法
- 定崗定編定員實施方案(一)
- 高血壓患者用藥的注意事項講義課件
- 特種作業(yè)安全監(jiān)護人員培訓課件
- (完整)第15章-合成生物學ppt
- 太平洋戰(zhàn)爭課件
- 封條模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖漿
- 貨代操作流程及規(guī)范
評論
0/150
提交評論