畢業(yè)設(shè)計(jì)論文-紅外線控制電動(dòng)小車_第1頁
畢業(yè)設(shè)計(jì)論文-紅外線控制電動(dòng)小車_第2頁
畢業(yè)設(shè)計(jì)論文-紅外線控制電動(dòng)小車_第3頁
畢業(yè)設(shè)計(jì)論文-紅外線控制電動(dòng)小車_第4頁
畢業(yè)設(shè)計(jì)論文-紅外線控制電動(dòng)小車_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

摘要畢業(yè)設(shè)計(jì)論文畢業(yè)設(shè)計(jì)論文紅外線控制電動(dòng)小車PAGE34PAGE33目錄目錄 1摘要 2設(shè)計(jì)方案 31.1 總體設(shè)計(jì)原理圖 31.1.1萬能紅外遙控器 3萬能紅外遙控系統(tǒng) 3遙控發(fā)射器 4遙控信號(hào)接收 41.1.2單片機(jī)智能控制板的制作 61.1.3電動(dòng)小車車體及電機(jī)驅(qū)動(dòng)器的制作 9電動(dòng)小車車體的制作 9電動(dòng)小車電機(jī)驅(qū)動(dòng)器的制作 11參數(shù)說明 15注意事項(xiàng): 16控制系統(tǒng)軟件設(shè)計(jì) 172.1軟件設(shè)計(jì)思路及流程圖 172.2設(shè)計(jì)程序 17設(shè)計(jì)調(diào)試分析 343.1電動(dòng)小車的調(diào)試 343.1.1調(diào)試原理 343.1.2調(diào)試過程 343.2總體系統(tǒng)的調(diào)試 353.2.1調(diào)試原理 353.1.2調(diào)試過程 36總結(jié) 37致謝 38參考文獻(xiàn) 39附錄1:電路原理圖 40摘要本設(shè)計(jì)以ATMEL89S52單片機(jī)為核心,以超微型紅外線發(fā)射接收一體化管為數(shù)據(jù)采集器件,用三極管構(gòu)成的電子開關(guān)電路驅(qū)動(dòng)電機(jī),組成了一個(gè)比較完整的電動(dòng)小汽的控制系統(tǒng)。系統(tǒng)的設(shè)計(jì)充分體現(xiàn)了價(jià)廉物美、簡單實(shí)用的設(shè)計(jì)原則。關(guān)鍵詞:STC5412AD芯片遙控電路,紅外發(fā)射,紅外接收AbstractThedesignAT89C51microcontrollerasthecore,ultra-micro-integrationoftheinfraredtransmittingandreceivingtubesfordataacquisitiondevices,usingelectronicswitchingcircuitcomposedoftransistordrivemotortoformarelativelycompletemini-steamcontrolsystem.Systemdesignfullyreflectsthecheap,simpleandpracticaldesignprinciples.Keywords:STC5412ADchipcontrolcircuit,infraredemission,infraredreceiver設(shè)計(jì)方案畢業(yè)設(shè)計(jì)論文設(shè)計(jì)方案總體設(shè)計(jì)原理圖電動(dòng)小車總體設(shè)計(jì)原理圖(圖1)1.1.1萬能紅外遙控器萬能紅外遙控系統(tǒng)通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成。應(yīng)用編/解碼專用集成電路芯片來進(jìn)行控制操作,如圖1所示。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、LED紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路。萬能遙控系統(tǒng)原理圖(圖2)遙控發(fā)射器一般紅外電視遙控器的輸出都是用編碼后串行數(shù)據(jù)對38~40kHz的方波進(jìn)行脈沖幅度調(diào)制而產(chǎn)生的。

當(dāng)發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:

采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”。

上述“0”和“1”組成的32位二進(jìn)制碼經(jīng)38kHz的載頻進(jìn)行二次調(diào)制,然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射。一般電視遙控器的遙控編碼是連續(xù)的32位二進(jìn)制碼組,其中前16位為用戶識(shí)別碼,能區(qū)別不同的紅外遙控設(shè)備,防止不同機(jī)種遙控碼互相干擾。后16位為8位的操作碼和8位的操作反碼,用于核對數(shù)據(jù)是否接收準(zhǔn)確。

根據(jù)紅外編碼的格式,發(fā)送數(shù)據(jù)前需要先發(fā)送9ms的起始碼和4.5ms的結(jié)果碼。

遙控串行數(shù)據(jù)編碼波形如下圖所示:遙控串行數(shù)碼波形圖(圖3)遙控信號(hào)接收接收方一般使用SM0038一體化紅外線接收器進(jìn)行接收解碼,當(dāng)SM0038接收到38kHz紅外信號(hào)時(shí),輸出端輸出低電平,否則為高電平。所以紅外遙控器發(fā)送紅外信號(hào)時(shí),參考上面遙控串行數(shù)據(jù)編碼波形圖,在低電平處發(fā)送38kHz紅外信號(hào),高電平處則不發(fā)送紅外信號(hào)。SM0038接收管簡介:接收電路可以使用一種集紅外線接收和放大于一體的一體化紅外線接收器,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號(hào)兼容的所有工作,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。接收器對外只有3個(gè)引腳:Out、GND、Vcc與單片機(jī)接口非常方便,如圖7所示。SM0038外形圖(圖4)①脈沖信號(hào)輸出接,直接接單片機(jī)的IO口。②Vcc接系統(tǒng)的電源正極(+5V)③GND接系統(tǒng)的地線(0V);單片機(jī)紅外電視遙控器電路圖如下:遙控器電路原理圖(圖5)1.1.2單片機(jī)智能控制板的制作本設(shè)計(jì)采用ATMEL89S52(51板)作為單片機(jī)智能控制板。51板(如圖)是小車的核心部分,它負(fù)責(zé)整個(gè)小車控制信號(hào)的產(chǎn)生,以及信號(hào)接收和識(shí)別功能實(shí)現(xiàn)。51板又是以STC12C5412AD芯片作為內(nèi)部核心部分的。51板內(nèi)部原理圖(圖6)STC12C5412AD單片機(jī)部內(nèi)部結(jié)構(gòu)aSTC12CXX單片機(jī)部內(nèi)部結(jié)構(gòu),各功能部件如圖8。⑴有1280字節(jié)片內(nèi)RAM數(shù)據(jù)存儲(chǔ)器。⑵芯片內(nèi)有EEPROM功能。⑶有ISP在系統(tǒng)可編程功⑷8通道10位高速ADC模擬到數(shù)據(jù)轉(zhuǎn)換器。⑸可編程計(jì)數(shù)器陣列PCA和可編程脈寬調(diào)節(jié)器PWM,右實(shí)現(xiàn)時(shí)鐘和可調(diào)頻率的PWM輸出。⑹高速SPI通信端口。⑺全雙工異步串行口(UART)⑻32個(gè)通用寄存器。STC12CXX系列典型單片機(jī)內(nèi)部結(jié)構(gòu)圖(圖8)a系列單片機(jī)的引腳功能微型單片機(jī)的引腳(圖9)cI/O端口線輸入輸出引腳P0.0—P0.7(39—32):P0口是一個(gè)漏極開路型準(zhǔn)雙向I/O口。在訪問外部存儲(chǔ)器時(shí),它是分時(shí)多路轉(zhuǎn)換的地址(低8位)和數(shù)據(jù)總線,在訪問期間激活了內(nèi)部的上拉電阻。在EPROM編程時(shí),它接收指令字節(jié),而在驗(yàn)證程序時(shí),則輸出指令字節(jié)。驗(yàn)證時(shí),要求外接上拉電阻。P1.0—P1.7(1-8):P1口是帶內(nèi)部上拉電阻的8位雙向I/O口。在EPROM編程和程序驗(yàn)證時(shí),它接收低8位地址。P2.0—P2.7(21-28):P2口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口。在訪問外部存儲(chǔ)器時(shí),它送出高8位地址。在對EFROM編程和程序驗(yàn)證期間,它接收高8位地址。P3.0—P3.7(10-17):P3口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口。在MCS—5l中,這8個(gè)引腳還兼有專用功能,P3的8條口線都定義有第二功能,詳見表1-1-1P3口第二功能圖表(圖10)d控制線控制引腳ALE:(30腳)地址鎖存控制信號(hào)。在系統(tǒng)擴(kuò)展時(shí),ALE用于控制P0口輸出的低8位地址鎖存起來,以實(shí)現(xiàn)低位地址和數(shù)據(jù)的隔離。此外,由于ALE是以晶振1/6的固定頻率輸出的正脈沖,因此,可作為外部時(shí)鐘或外部定時(shí)脈沖使用。(29腳)外部程序存儲(chǔ)器讀選通信號(hào)。在讀外部ROM時(shí),有效(低電平),以實(shí)現(xiàn)外部ROM單元的讀操作。:(31腳)訪問程序存儲(chǔ)控制信號(hào)。當(dāng)信號(hào)為低電平時(shí),對ROM的讀操作限定在外部程序存儲(chǔ)器;當(dāng)信號(hào)為高電平時(shí),對ROM的讀操作是從內(nèi)部程序存儲(chǔ)器開始,并可延至外部程序存儲(chǔ)器。RST/VPP:(9腳)復(fù)位信號(hào)。當(dāng)輸入的復(fù)位信號(hào)延續(xù)兩個(gè)機(jī)器周期以上的高電平時(shí)即為有效,用以完成單片機(jī)的復(fù)位初始化操作。e外接晶體線XTAL1(19腳)和XTAL2(18腳)外接晶體引線端。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),此二引線端用于外接石英晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),用于接外部時(shí)鐘脈沖信號(hào)。F主電源引腳高VCC和低VSSVCC(40腳)+5V電源。VSS(20腳)地線(GND)。以上是MCS-51單片機(jī)芯片40條引腳的定義及簡單功能說明,讀者可以對照實(shí)訓(xùn)電路找到相應(yīng)引腳,在電路中查看每個(gè)引腳的連接使用。g51系列單片機(jī)的時(shí)序805l的基本時(shí)序周期一條指令譯碼產(chǎn)生的一系列微操作信號(hào)在時(shí)間上有嚴(yán)格的先后次序,這種次序就是計(jì)算機(jī)的時(shí)序。其基本時(shí)序周期有如下四種?!裾袷幹芷冢褐刚袷幵吹闹芷?,若為內(nèi)部產(chǎn)生方式,則為石英晶體的振蕩周期。T振蕩周期=1/fosc;●時(shí)鐘周期:(稱S周期)為振蕩周期的兩倍,時(shí)鐘周期=2倍的振蕩周期T時(shí)鐘周期=2*T振蕩周期;●機(jī)器周期:一個(gè)機(jī)器周期含6個(gè)時(shí)鐘周期(S周期)。T機(jī)器周期=6*T時(shí)鐘周期=12*T振蕩周期=12/fosc;STC12CXX系列單片機(jī)有1個(gè)時(shí)鐘周期/機(jī)器周期?!裰噶钪芷冢和瓿梢粭l指令占用的全部時(shí)間。805l的指令周期含1—4個(gè)機(jī)器周期,其中多數(shù)為單周期指令,還有2周期和4周期指令。1.1.3電動(dòng)小車車體及電機(jī)驅(qū)動(dòng)器的制作電動(dòng)小車車體的制作a.車體結(jié)構(gòu)電動(dòng)小車為薩那輪結(jié)構(gòu),車的結(jié)構(gòu)示意圖如圖8所示。其中左面車輪由左輪電機(jī)控制,在連桿和支點(diǎn)作用下控制左輪正反轉(zhuǎn)動(dòng)。在自然狀態(tài)下,前輪在彈簧作用下保持中間位置。右車輪由右輪電機(jī)驅(qū)動(dòng),左右兩電機(jī)為整個(gè)小車提供動(dòng)力,所以又稱前面的輪子為方向輪,后面的兩個(gè)輪子為驅(qū)動(dòng)輪,如圖11所示。小車側(cè)視圖與車體頂視圖(圖11)整個(gè)小車車體大體可以分為兩大部分:車體部分,控制板車體部分:小車車體主要為兩個(gè)電機(jī)驅(qū)動(dòng)裝置,分前輪(方向控制)和后輪(動(dòng)力驅(qū)動(dòng))。在車體的下面有一個(gè)可以安裝4節(jié)AA電池的電池盒,整個(gè)小車的電源就是由它來提供的。在小車的底部有一個(gè)小開關(guān),它負(fù)責(zé)控制整個(gè)小車的電源開通與關(guān)斷??刂瓢澹嚎刂瓢遑?fù)責(zé)將來自51板的控制信號(hào)轉(zhuǎn)化為能夠驅(qū)動(dòng)電動(dòng)機(jī)的信號(hào),(圖9中51板下面的黃色板子)由三極管組成的電子開關(guān)構(gòu)成。b.小車實(shí)物圖紅外線控制電動(dòng)小車實(shí)物圖(圖12)電動(dòng)小車電機(jī)驅(qū)動(dòng)器的制作a.硬件框圖:小車控制系統(tǒng)硬件結(jié)構(gòu)比較簡單,如圖所示,主要分為兩個(gè)部分:一個(gè)是ATMEL89S52精簡開發(fā)板(即“51”板),另外一個(gè)是電機(jī)控制板。電機(jī)控制板的工作就是根據(jù)51板的輸出信號(hào)去啟動(dòng)和停止相應(yīng)的電機(jī),以及調(diào)整電機(jī)的正反轉(zhuǎn)方向。正是通過開啟和關(guān)閉相應(yīng)的電機(jī)以及控制電機(jī)正反轉(zhuǎn),使電機(jī)在不同的組合狀態(tài)運(yùn)轉(zhuǎn),最終來實(shí)現(xiàn)小車的前進(jìn),倒退,左轉(zhuǎn),右轉(zhuǎn)等功能。系統(tǒng)硬件框圖(圖13)控制板主要包括:接口電路、電源電路和兩路電機(jī)的驅(qū)動(dòng)電路。接口電路:接口電路負(fù)責(zé)將51板的I/O接口信號(hào)傳送給控制電路板,I/O信號(hào)主要為控制電機(jī)需要的IOB8~IOB11這四路信號(hào),同時(shí)為了方便后續(xù)的開發(fā)和完善,預(yù)留了IOB12~IOB15以及IOA8~IOA15接口,可以在這些接口上添加一些傳感器。電源部分:整個(gè)小車有2個(gè)電源信號(hào):電池電源,控制板工作電源。系統(tǒng)供電由電池提供,控制板直接采用電池供電(VCC)。兩路電機(jī)驅(qū)動(dòng)電路:在設(shè)計(jì)電機(jī)驅(qū)動(dòng)模塊時(shí),沒有使用專用的大功率電子集成開關(guān),而是用三極管組成簡單的開關(guān)電路,實(shí)現(xiàn)了電機(jī)的驅(qū)動(dòng)控制。三極管主要有S9015,s8050,s8550。S9015簡介:s9015是非常常見的晶體三極管,在收音機(jī)以及各種放大電路中經(jīng)常看到它,應(yīng)用范圍很廣,它是npn型小功率三極管,s9015三極管參數(shù)集電極最大耗散功率PCM=0.4W(Tamb=25℃)集電極最大允許電流ICM=0.1A集電極基極擊穿電壓BVCBO=50V集電極發(fā)射極擊穿電壓BVCEO=45V發(fā)射極基極擊穿電壓BVEBO=5V基極發(fā)射極飽和壓降VBE(sat)=1V(IC=100mA;IB=5mA)特征頻率:fT=150MHzHFE:A=60~150;B=100~300;C=200~600;D=400~1000s8050簡介:晶體管類型:開關(guān)型晶體管類型:開關(guān)型主要參數(shù):最大集存器電流(A):0.5A;功耗:625mW;最大集存器發(fā)射電壓:25頻率:150KHs8550簡介:8550是一種常用的普通三極管,它是一種低電壓,大電流,小信號(hào)的PNP型硅三極管主要參數(shù):集電極-基極電壓Vcbo:-40V工作溫度:-55℃to+150℃b.小車的組要功能1.可以通過簡單的I/O輸出高低電平操作實(shí)現(xiàn)小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)功能;2.可以在行走過程中通過紅外線改變小車運(yùn)動(dòng)狀態(tài);3.在超出紅外線控制范圍時(shí)能夠自動(dòng)停車。c.小車功能的實(shí)現(xiàn)小車是由簡單三極管組成的開關(guān)電路做成,通過簡單的I/O輸出高低電平操作實(shí)現(xiàn)小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)功能;控制板電路原理圖(圖14)動(dòng)力電機(jī)驅(qū)動(dòng)電路:動(dòng)力驅(qū)動(dòng)由后輪驅(qū)動(dòng)實(shí)現(xiàn),負(fù)責(zé)小車的直線方向運(yùn)動(dòng),包括前進(jìn)和后退,后輪驅(qū)動(dòng)電路是一個(gè)全橋驅(qū)動(dòng)電路,下面介紹左輪功能的實(shí)現(xiàn)(右輪同理)如圖所示:Q1、Q2、Q3、Q4四個(gè)三極管組成四個(gè)橋臂,Q1和Q4組成一組,Q2和Q3組成一組,Q5控制Q2、Q3的導(dǎo)通與關(guān)斷,Q6控制Q1和Q4的導(dǎo)通與關(guān)斷,而Q5、Q6由IOB9和IOB8控制,這樣就可以通過IOB8和IOB9控制四個(gè)橋臂的導(dǎo)通與關(guān)斷控制后輪電機(jī)的運(yùn)行狀態(tài),使之正轉(zhuǎn)反轉(zhuǎn)或者停轉(zhuǎn),進(jìn)而控制小車的前進(jìn)和后退。電機(jī)驅(qū)動(dòng)電路圖(圖15)當(dāng)IOB8為高電平、IOB9為低電平時(shí)Q1和Q4導(dǎo)通,Q2和Q3截止,左輪電機(jī)正轉(zhuǎn),反之當(dāng)IOB8為低電平、IOB9為高電平時(shí)Q1和Q4截止,Q2和Q3導(dǎo)通,左輪電機(jī)反轉(zhuǎn)。而當(dāng)IOB8、IOB9同為低電平時(shí)Q1、Q2、Q3和Q4都截止,左輪電機(jī)停轉(zhuǎn)。注意:IOB8和IOB9不能同時(shí)置高電平,這樣會(huì)造成后輪驅(qū)動(dòng)全橋短路現(xiàn)象。直走的實(shí)現(xiàn)過程:只要讓小車的前輪保持自然狀態(tài)(即不左偏又不右偏),然后讓兩個(gè)后輪正傳即可實(shí)現(xiàn)小車的前進(jìn)。當(dāng)IOB10為高電平、IOB11為低電平時(shí)Q8和Q9導(dǎo)通,Q7和Q10截止,右輪電機(jī)正轉(zhuǎn),當(dāng)IOB8為高電平、IOB9為低電平時(shí)Q1和Q4導(dǎo)通,Q2和Q3截止,左輪電機(jī)正轉(zhuǎn),小車實(shí)現(xiàn)前進(jìn);反之當(dāng)IOB10為低電平、IOB11為高電平時(shí)Q8和Q9截止,Q7和Q10導(dǎo)通,右輪電機(jī)反轉(zhuǎn),當(dāng)IOB8為低電平、IOB9為高電平時(shí)Q1和Q4截止,Q2和Q3導(dǎo)通,左輪電機(jī)反轉(zhuǎn),小車實(shí)現(xiàn)后退;而當(dāng)IOB10、IOB11同為低電平時(shí)Q8和Q9截止,Q7和Q10也截止,右輪電機(jī)停轉(zhuǎn),IOB8、IOB9同為低電平時(shí)Q1、Q2、Q3和Q4都截止,左輪電機(jī)停轉(zhuǎn)。小車停止。對應(yīng)表所示:前進(jìn)對應(yīng)端口狀態(tài)表(圖16)倒退對應(yīng)端口狀態(tài)表(圖17)總功能表IOB11IOB10IOB9IOB8左電機(jī)右電機(jī)小車0000停轉(zhuǎn)停轉(zhuǎn)停0001正傳停轉(zhuǎn)左轉(zhuǎn)0100停轉(zhuǎn)正轉(zhuǎn)右轉(zhuǎn)0101正傳正傳前進(jìn)1010反傳反轉(zhuǎn)后退總功能表(圖18)注意:IOB10、IOB11不能同時(shí)為高電平,這樣會(huì)造成前輪驅(qū)動(dòng)全橋的橋臂短路。參數(shù)說明車體:雙電機(jī)兩輪驅(qū)動(dòng)供電:電池(四節(jié)1.5V×4)工作電壓:DC4V~6V工作電流:運(yùn)動(dòng)時(shí)約200mA尺寸:200mm×125mm×65mm(長×寬×高)(如果加上51板高再加15mm)注意事項(xiàng):a.一定要注意電池的正負(fù)極性,切勿裝反;b.長期不用請將電池取出電池盒;c.由于紅外信號(hào)的不確定性,紅外識(shí)別的過程會(huì)出現(xiàn)一定的誤差和不準(zhǔn)確性;d.由于小車行動(dòng)比較靈活,速度比較快,在使用時(shí)一定要注意保持場地足夠大,且保證不會(huì)對周圍的物體造成傷害;e.不要讓小車長時(shí)間運(yùn)行在堵轉(zhuǎn)狀態(tài)(堵轉(zhuǎn)狀態(tài):由于小車所受阻力過大,造成小車電機(jī)加電但并不轉(zhuǎn)動(dòng)的現(xiàn)象),這樣會(huì)造成很大的堵轉(zhuǎn)電流,有可能會(huì)損壞小車的控制電路??刂葡到y(tǒng)軟件設(shè)計(jì)畢業(yè)設(shè)計(jì)論文控制系統(tǒng)軟件設(shè)計(jì)2.1軟件設(shè)計(jì)思路及流程圖在系統(tǒng)結(jié)構(gòu)上,我們所設(shè)計(jì)實(shí)現(xiàn)的電動(dòng)小汽車的控制系統(tǒng)由四個(gè)模塊組成:單片機(jī)微型控制系統(tǒng)模塊、紅外遙控模塊,電機(jī)驅(qū)動(dòng)模塊、信息顯示模塊。紅外遙控模塊負(fù)責(zé)紅外線的發(fā)射與接收;單片機(jī)微型控制系統(tǒng)模塊負(fù)責(zé)對接收的信息進(jìn)行處理,并通過程序完成復(fù)雜的控制;電機(jī)驅(qū)動(dòng)模塊主要根據(jù)單片機(jī)傳入的信號(hào)控制小車的運(yùn)動(dòng);信息顯示模塊則顯示相應(yīng)的信息(如控制小車前進(jìn)后退的二進(jìn)制代碼等)軟件流程圖(圖19)2.2設(shè)計(jì)程序主要程序:#include<reg52.h>#include<intrins.h>#definesize_of_keybd_menu8#defineuintunsignedint#defineucharunsignedchar#defineWAIT_TIME0x01typedefunsignedchar INT8U; /*8bit無符號(hào)整型*/typedefunsignedintINT16U;/*16bit無符號(hào)整型*/#define DELAY_CONST60000#defineREAD_AP_and_Data_Memory_Command0x01/*字節(jié)讀數(shù)據(jù)存儲(chǔ)區(qū)*/#definePROGRAM_AP_and_Data_Memory_Command0x02/*字節(jié)編程數(shù)據(jù)存儲(chǔ)區(qū)*/#defineSECTOR_ERASE_AP_and_Data_Memory_Command0x03/*扇區(qū)擦除數(shù)據(jù)存儲(chǔ)區(qū)*/#defineMCU_CLOCK_20MHz#defineUSED_BYTE_QTY_IN_ONE_SECTOR64/***********************///fosc=22.1184MHz//#defineDLY_882US813//#defineDLY_882US1626#defineDLY_1000US922//#defineDLY_1000US1843#defineDLY_4740US4369//#defineDLY_4740US8737/***********************/sbitInfrare=P3^2;sbitSPK=P3^3;unsignedcharBufferCount;unsignedcharBuffer[2];sfrP0M0=0x93;sfrP0M1=0x94;sfrP1M0=0x91;sfrP1M1=0x92;sfrP2M0=0x95;sfrP2M1=0x96;sfrP3M0=0xb1;sfrP3M1=0xb2;sfrAUXR=0x8e;sfrIPH=0xb7;/*WatchdogTimerRegister*/sfrWDT_CONTR=0xe1;/*ISP_IAP_EEPROMRegister*/sfrISP_DATA=0xe2;sfrISP_ADDRH=0xe3;sfrISP_ADDRL=0xe4;sfrISP_CMD=0xe5;sfrISP_TRIG=0xe6;sfrISP_CONTR=0xe7;sfrSPSTAT=0x84;sfrSPCTL=0x85;sfrSPDAT=0x86;/*ADCRegister*/sfrADC_CONTR=0xc5;sfrADC_DATA=0xc6;sfrADC_LOW2=0xbe;/*PCASFR*/sfrCCON=0xD8;sfrCMOD=0xD9;sfrCCAPM0=0xDA;sfrCCAPM1=0xDB;sfrCCAPM2=0xDC;sfrCCAPM3=0xDD;sfrCCAPM4=0xDE;sfrCCAPM5=0xDF;sfrCL=0xE9;sfrCCAP0L=0xEA;sfrCCAP1L=0xEB;sfrCCAP2L=0xEC;sfrCCAP3L=0xED;sfrCCAP4L=0xEE;sfrCCAP5L=0xEF;sfrCH=0xF9;sfrCCAP0H=0xFA;sfrCCAP1H=0xFB;sfrCCAP2H=0xFC;sfrCCAP3H=0xFD;sfrCCAP4H=0xFE;sfrCCAP5H=0xFF;sfrPCA_PWM0=0xF2;sfrPCA_PWM1=0xF3;sfrPCA_PWM2=0xF4;sfrPCA_PWM3=0xF5;sfrPCA_PWM4=0xF6;sfrPCA_PWM5=0xF7;/*CCON*/sbitCF=CCON^7;sbitCR=CCON^6;sbitCCF5=CCON^5;sbitCCF4=CCON^4;sbitCCF3=CCON^3;sbitCCF2=CCON^2;sbitCCF1=CCON^1;sbitCCF0=CCON^0;/*SystemClockDivider*/sfrCLK_DIV=0xc7;sbitser=P2^1;//LED顯示595數(shù)據(jù)輸入sbitsrclk1=P2^2;//sbitrclk1=P2^3;sbitIOB8=P1^0;//高低電平輸出口定義sbitIOB9=P1^1;sbitIOB10=P1^2;sbitIOB11=P1^3;ucharcodeLED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xfe,0xbf,0xff};//共陽極段碼表說明uintidataff,i,j,k,m,n=0;//說明整數(shù)變量ucharidataaa,bb[]={12,12,12,12,12,6,7,8},cc=0xc0,dd,ee,flag;//8個(gè)數(shù)碼管顯示的數(shù)數(shù)組ucharcodezanhuanb[]={0,0,0,0,8,9,0,0,0,0,0,0,0,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,4,5,6,7};ucharbdataDATA=0x00;sbitBIT0=DATA^0;sbitBIT7=DATA^7;//******DS1302驅(qū)動(dòng)程序*************ucharidataDateTime0[8];//時(shí)ucharidataDateTime1[8];//日unsignedcharidatasecond,time_50ms;unsignedcharxdataset_reg[64]={0,0};ucharidatagetbyte=0x00;sbitDS1302_CLK=P3^7; //實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳sbitDS1302_IO=P2^7; //實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳sbitDS1302_RST=P2^6; //實(shí)時(shí)時(shí)鐘復(fù)位線引腳sbitACC0=ACC^0;sbitACC7=ACC^7;#defineAM(X) X#definePM(X) (X+12) //轉(zhuǎn)成24小時(shí)制#defineDS1302_SECOND 0x80#defineDS1302_MINUTE 0x82#defineDS1302_HOUR 0x84#defineDS1302_WEEK 0x8A#defineDS1302_DAY 0x86#defineDS1302_MONTH 0x88#defineDS1302_YEAR 0x8C#defineDS1302_RAM(X) (0xC0+(X)*2) //用于計(jì)算DS1302_RAM地址的宏//voiddelay(uinttime){ucharjj,hh; while(--time!=0) {for(jj==0;jj<255;jj++) {for(hh==0;hh<255;hh++); }}}//voiddelay_1(uchartime){while(--time!=0)delay(50000);}//voiddelayXms(unsignedintx)//延遲x毫秒函數(shù){unsignedinti,j;for(i=0;i<x;i++)for(j=0;j<130;j++);}//voidDS1302InputByte(unsignedchard) //實(shí)時(shí)時(shí)鐘寫入一字節(jié)(內(nèi)部函數(shù)){unsignedchari;ACC=d;for(i=8;i>0;i--){DS1302_IO=ACC0; //相當(dāng)于匯編中的RRCDS1302_CLK=1;DS1302_CLK=0;ACC=ACC>>1;}}//unsignedcharDS1302OutputByte(void) //實(shí)時(shí)時(shí)鐘讀取一字節(jié)(內(nèi)部函數(shù)){unsignedchari;for(i=8;i>0;i--){ACC=ACC>>1; //相當(dāng)于匯編中的RRCACC7=DS1302_IO;DS1302_CLK=1;DS1302_CLK=0;}return(ACC);}//voidWrite1302(unsignedcharucAddr,unsignedcharucData)//ucAddr:DS1302地址,ucData:要寫的數(shù)據(jù){DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr); //地址,命令DS1302InputByte(ucData); //寫1Byte數(shù)據(jù)DS1302_CLK=1;DS1302_RST=0;}//unsignedcharRead1302(unsignedcharucAddr) //讀取DS1302某地址的數(shù)據(jù){unsignedcharucData;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr|0x01);//地址,命令ucData=DS1302OutputByte();//讀1Byte數(shù)據(jù)DS1302_CLK=1;DS1302_RST=0;return(ucData);//voidDS1302_SetProtect(bitflag)//是否寫保護(hù){if(flag) Write1302(0x8E,0x80); else Write1302(0x8E,0x00);}//voidDS1302_SetTime(unsignedcharAddress,unsignedcharValue)//設(shè)置時(shí)間函數(shù){ DS1302_SetProtect(0); Write1302(Address,((Value/10)<<4|(Value%10)));}//voidDS1302_GetTime(){ unsignedcharReadValue; ReadValue=Read1302(DS1302_YEAR);//讀年 DateTime0[0]=(ReadValue&0x70)>>4; DateTime0[1]=ReadValue&0x0F; DateTime0[2]=11; ReadValue=Read1302(DS1302_MONTH);//讀月 DateTime0[3]=(ReadValue&0x70)>>4; DateTime0[4]=ReadValue&0x0F+0x30; DateTime0[5]=11; ReadValue=Read1302(DS1302_DAY);//讀日 DateTime0[6]=(ReadValue&0x70)>>4; DateTime0[7]=ReadValue&0x0F; ReadValue=Read1302(DS1302_HOUR);//讀時(shí) DateTime1[0]=(ReadValue&0x70)>>4; DateTime1[1]=ReadValue&0x0F; DateTime1[2]=11; ReadValue=Read1302(DS1302_MINUTE);//讀分 DateTime1[3]=(ReadValue&0x70)>>4; DateTime1[4]=ReadValue&0x0F; DateTime1[5]=11;delayXms(10); ReadValue=Read1302(DS1302_SECOND);//讀秒 DateTime1[6]=(ReadValue&0x70)>>4; DateTime1[7]=ReadValue&0x0F; //ReadValue=Read1302(DS1302_WEEK); //Time->Week=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);}//voidInitial_DS1302(void){unsignedcharSecond=Read1302(DS1302_SECOND);//秒寄存器的最高位為時(shí)鐘暫停位 DS1302_SetTime(DS1302_SECOND,0);}//voidIAR_Disable(){ISP_CONTR=0x00;ISP_CMD=0x00;ISP_TRIG=0x00;}//voidset_timer0_1T()//設(shè)置T0為1T模式{AUXR=AUXR|0x80;}//voidset_timer1_1T()//設(shè)置T1為1T模式{ AUXR=AUXR|0x40;}//voidset_timer0_12T()//設(shè)置T0為12T模式{ AUXR=AUXR&0x7f;}//voidset_timer1_12T()//設(shè)置T1為12T模式{ AUXR=AUXR&0xbf;}//ucharEEPROM_read(uintaddr)//EEPROM字節(jié)讀{ ISP_ADDRH=(addr&0xff00)>>8; ISP_ADDRL=addr&0x00ff; ISP_CONTR=0x81; ISP_CMD=1; ISP_TRIG=0x46; ISP_TRIG=0xb9; returnISP_DATA;}//voidEEPROM_write(uintaddr,uchardat)//EEPROM字節(jié)寫{ ISP_DATA=dat; ISP_ADDRH=(addr&0xff00)>>8; ISP_ADDRL=addr&0x00ff; ISP_CONTR=0x81; ISP_CMD=2; ISP_TRIG=0x46; ISP_TRIG=0xb9;}//voidEEPROM_ERASE(uintaddr)//EEPROM扇區(qū)擦除{ ISP_ADDRH=(addr&0xff00)>>8; ISP_ADDRL=addr&0x00ff; ISP_CONTR=0x81; ISP_CMD=3; ISP_TRIG=0x46; ISP_TRIG=0xb9;}//voidset_p3_tw(){ P3M0|=0x00; P3M1|=0x00;}//write_EP(){for(i=0;i<15;i++){EEPROM_write(i+0x2800,set_reg[i]);//delay(1);}}//read_EP(){for(i=0;i<15;i++){set_reg[i]=EEPROM_read(i+0x2800);//delay(1);}}voiddelay6(INT16Ucounter){INT16Utemp=0; for(temp=counter;temp>0;temp--) { _nop_(); _nop_(); _nop_(); }}//voidtime_up()interrupt3using1{ TH1=0x3c; TL1=0xb0; if(++m>=20) {m=0;flag=1;}}voidint0(void)interrupt0//遙控按鍵識(shí)別程序(中斷處理){unsignedchari,j;unsignedchartemp;EX0=0;for(i=5;i>0;i--){TH0=(65536-DLY_882US)/256;TL0=(65536-DLY_882US)%256;TF0=0;TR0=1;while(TF0==0);TF0=0;TR0=0;if(Infrare==1)gotoExit_Int0;}while(Infrare==0){TH0=(65536-DLY_4740US)/256;TL0=(65536-DLY_4740US)%256;TF0=0;TR0=1;while(TF0==0);TF0=0;TR0=0;}for(i=16;i>0;i--){while(Infrare==0);TH0=(65536-DLY_882US)/256;TL0=(65536-DLY_882US)%256;TF0=0;TR0=1;while(TF0==0);TF0=0;TR0=0;if(Infrare==1){TH0=(65536-DLY_1000US)/256;TL0=(65536-DLY_1000US)%256;TF0=0;TR0=1;while(TF0==0);TF0=0;TR0=0;}}BufferCount=0;for(j=2;j>0;j--){temp=0;for(i=8;i>0;i--){temp>>=1;while(Infrare==0);TH0=(65536-DLY_882US)/256;TL0=(65536-DLY_882US)%256;TF0=0;TR0=1;while(TF0==0);TF0=0;TR0=0;if(Infrare==1)temp+=0x80;if(Infrare==1){TH0=(65536-DLY_1000US)/256;TL0=(65536-DLY_1000US)%256;TF0=0;TR0=1;while(TF0==0);TF0=0;TR0=0;}}Buffer[BufferCount]=temp;BufferCount++;}if(Buffer[0]==~Buffer[1]){bb[5]=~Buffer[1]/100;bb[6]=~Buffer[1]/10%10;bb[7]=~Buffer[1]%10;bb[3]=zanhuanb[Buffer[0]];bb[4]=11;SPK=0;for(i=3;i>0;i--){TH0=(65536-DLY_4740US)/256;TL0=(65536-DLY_4740US)%256;TF0=0;TR0=1;while(TF0==0);TF0=0;TR0=0;}SPK=1;}Exit_Int0:EX0=1;}////voidmain(void)using0{SP=0x60; EA=0; P2M0=0x00;P2M1=0x0e;TMOD=0x11;TH1=0x3c;TL1=0xb0;ET1=1;TR1=1;IT0=1;EX0=1;EA=1;i=0;//初值k=0;//flag=0x00;//aa=0x7f;//位碼初值EA=1;//下面的程序是對DS1302寫時(shí)間日期Initial_DS1302(); Write1302(0x80,0x00); Write1302(DS1302_YEAR,0x09); Write1302(DS1302_MONTH,0x01);Write1302(DS1302_DAY,0x19);Write1302(DS1302_HOUR,0x23);Write1302(DS1302_MINUTE,0x04); Write1302(DS1302_SECOND,0x05);Write1302(0x8e,0x80);////ISP_IAP_enable();read_EP();ISP_IAP_disable();讀ISP--ROM中的數(shù)據(jù)while(1){if(flag){flag=0;DS1302_GetTime();}//如果一秒鐘時(shí)間到讀DS1302時(shí)間cc=LED[bb[n]];//取段碼dd=aa;//取位碼for(j=0;j<8;j++)//位碼移位串行輸出{if(dd&0x80)ser=1;elseser=0;dd=dd<<1;srclk1=0;srclk1=1;delay(5);}dd=cc;for(j=0;j<8;j++)//段碼移位串行輸出{if(dd&0x80)ser=1;elseser=0;dd=dd<<1;srclk1=0;srclk1=1;delay(5);}n++;//顯示位計(jì)數(shù)if(n>=8)//如果顯示了8個(gè)位碼初始{aa=0x7f;//位碼初始值11111110其中0為顯示1為不顯示n=0;//初始變量i}elseaa=(aa>>1)|0x80;//不是8位碼左移一位//WDT_CONTR=0x3c;rclk1=0;//595鎖存脈沖rclk1=1;delay(5);switch(bb[3]){case0:{IOB8=0;IOB9=0;IOB10=0;IOB11=0;}break;case1:{IOB8=1;IOB9=0;IOB10=0;IOB11=0;}break;case2:{IOB8=0;IOB9=1;IOB10=0;IOB11=0;}break;case3:{IOB8=1;IOB9=1;IOB10=0;IOB11=0;}break;case4:{IOB8=0;IOB9=0;IOB10=1;IOB11=0;}break;case5:{IOB8=1;IOB9=0;IOB10=1;IOB11=0;}break;case6:{IOB8=0;IOB9=1;IOB10=1;IOB11=0;}break;case7:{IOB8=1;IOB9=1;IOB10=1;IOB11=0;}break;case8:{IOB8=0;IOB9=0;IOB10=0;IOB11=1;}break;case9:{IOB8=1;IOB9=0;IOB10=0;IOB11=1;}break;}}}注:紅外遙控器信號(hào)通過P3.2口接收,由INT0的中斷完成信號(hào)接收與處理,通過終端處理將紅外脈沖轉(zhuǎn)化為二進(jìn)制代碼,而后通過p1.0—p1.3口將高低電平送給電動(dòng)小車輸入口。定時(shí)器T0產(chǎn)生精確定時(shí),通過P3.7口給出紅外遙控器解碼成功提示信號(hào)。設(shè)計(jì)調(diào)試分析畢業(yè)設(shè)計(jì)論文設(shè)計(jì)調(diào)試分析3.1電動(dòng)小車的調(diào)試3.1.1調(diào)試原理電動(dòng)小車制作完成后,先對照原理圖用萬用表仔細(xì)檢查一遍,注意千萬不要短路,三極管各個(gè)引腳順序不能顛倒;檢查完成后不要連接單片機(jī),先將小車負(fù)極接地,正極依次連接小車的輸出口IOB8,IOB9,IOB10,IOB11.同時(shí)觀察電動(dòng)小車的左右兩輪的轉(zhuǎn)動(dòng)情況,并做成表格。(如圖所示)IOB8IOB9IOB10IOB11左輪又輪1000正傳停轉(zhuǎn)0100反轉(zhuǎn)停轉(zhuǎn)0010停轉(zhuǎn)正傳0001停轉(zhuǎn)反轉(zhuǎn)0000停轉(zhuǎn)停轉(zhuǎn)小車調(diào)試功能表(圖20)對照小車功能圖發(fā)現(xiàn)小車正確。3.1.2調(diào)試過程1.先不給電動(dòng)小車通電,用萬用表對照小車原理圖檢查線路是否接錯(cuò),結(jié)果發(fā)現(xiàn)果然接錯(cuò)了,電路圖上三極管Q1應(yīng)接在電阻R2一端,Q2應(yīng)接在電阻R1一端,結(jié)果發(fā)現(xiàn)我把Q1接在了電阻R1的一端,而把Q2接在了R2的一端了。于是重新用電烙鐵把正確的接法接好,接好后在用萬用表重新檢查一遍,發(fā)現(xiàn)沒有其它的地方在接錯(cuò)了。2.在對照原理圖看是否將三極管接反或接錯(cuò),檢查幾遍后三極管接法無誤。3.經(jīng)電動(dòng)小車負(fù)極接地,正極先接在輸出口IOB8上,發(fā)現(xiàn)電動(dòng)小車的左輪不轉(zhuǎn),在將正極接在IOB9上發(fā)現(xiàn)小車左輪還是不轉(zhuǎn),接在IOB10上后右輪也不轉(zhuǎn),IOB11一樣右輪不轉(zhuǎn)。于是斷電,在用萬用表仔細(xì)檢查小車是否接錯(cuò),結(jié)果沒有。4這是突然想到是否是電沒有送進(jìn)小車呢?于是用萬用表測量電池槽輸出電壓,發(fā)現(xiàn)電壓居然為零。仔細(xì)檢查電池槽時(shí)發(fā)現(xiàn),電池槽中間連接線斷路,將電池槽中間連接線接好后在按照3步驟檢查,發(fā)現(xiàn)接在IOB8是小車左輪不轉(zhuǎn)。而其余都正常前傳反轉(zhuǎn),我猜想肯定是與IOB8連接的三極管壞掉了。5.用萬用表分別檢查三極管Q1,Q2,Q3,Q4,Q5,Q6得好壞,結(jié)果發(fā)現(xiàn)三極管Q6壞了,于是換了一個(gè)號(hào)的三極管,在重復(fù)3步驟,結(jié)果小車正常轉(zhuǎn)動(dòng),轉(zhuǎn)動(dòng)規(guī)律與原理表一致,于是認(rèn)定電動(dòng)小車制作完成。3.2總體系統(tǒng)的調(diào)試3.2.1調(diào)試原理將程序下載進(jìn)單片機(jī)后,用遙控器遙控,同時(shí)觀察開發(fā)板上LED數(shù)碼管顯示的數(shù)字并對照紅外遙控器鍵值表(如圖所示)看顯示的數(shù)值與按鍵的數(shù)值是否一致。******紅外遙控器鍵值表*******1614**00010203**04050607**08090A0B**0C0D191A**121510**131811**1E1C1D

溫馨提示

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

評論

0/150

提交評論