版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
畢業(yè)設(shè)計闡明書自行車里程速度計的設(shè)計目錄序言 1第一章系統(tǒng)方案 21.1課題的重要任務(wù)及內(nèi)容 21.2任務(wù)分析與實現(xiàn) 21.3單片機選擇 31.4顯示模塊的選擇 41.5傳感器的選擇 41.6系統(tǒng)簡介 5第二章硬件設(shè)計 72.1單片機的簡介 72.1.1單片機原理簡介 72.1.2單片機的引腳功能簡介 82.2單片機外圍電路的設(shè)計 102.2.1時鐘電路 102.2.2復位電路的設(shè)計 102.2.3報警電路的設(shè)計 112.3傳感器 112.4顯示電路的設(shè)計 152.4.1顯示屏LCD1602的簡介 152.4.2顯示電路的設(shè)計電路 19第三章軟件設(shè)計 213.1軟件實現(xiàn)的功能 213.2主程序 213.3顯示子程序的設(shè)計 23第四章系統(tǒng)調(diào)試與仿真 254.1系統(tǒng)仿真調(diào)試 254.2protel99的簡介 254.3硬件調(diào)試 264.3.1常見的硬件故障 264.3.2調(diào)試措施 27 27結(jié)束語 28參照文獻 29致謝 30附錄 31附錄一元器件清單 31附錄二電路圖 32附錄三實物照片 34附錄四源程序 35附錄五中英文文獻 51序言傳感器,是一種檢測裝置,能感受到被測的信息,并能將檢測感受到的信息,按一定規(guī)律變換成為電信號或其他所需形式的信息輸出,以滿足信息的傳播、處理、存儲、顯示、記錄和控制等規(guī)定。它是實現(xiàn)自動檢測和自動控制的首要環(huán)節(jié)[1]。它的作用是將一種能量轉(zhuǎn)換成另一種能量的形式。英文名字為Sensor或Transducer,亦稱變換器、換能器。在科學技術(shù)迅速發(fā)展的當今社會,傳感器的應(yīng)用越來越廣泛,如在平常生活、航空、航天,常規(guī)武器、交通運送,機械制造、生物醫(yī)學工程、化工、自動化檢測工程及計量等各項領(lǐng)域[2]。單片微型計算機是制作在一塊集成電路芯片上的計算機,簡稱單片機,又稱微控制器。它包括中央處理器(CentralProcessingUnit,CPU)、用RAM構(gòu)成的數(shù)據(jù)存儲器、用ROM構(gòu)成的程序存儲器、定期器/計數(shù)器、多種輸入/輸出(I/O)接口和時鐘電路,可獨立地進行工作。尤其合用于控制領(lǐng)域。因此,單片機只要與合適的軟件及外部設(shè)備相結(jié)合,便可成為一種單片機控制系統(tǒng)[3]。單片機由于其體積小、功能強,可靠性高,靈活以便等長處,因此被廣泛的應(yīng)用于各個領(lǐng)域,并對各行各業(yè)的技術(shù)改造和產(chǎn)品的更新?lián)Q代起到重要的推進作用[4]。本設(shè)計簡介了一種基于單片機控制的簡易自行車速度以及里程計算系統(tǒng),包括自行車里程表的硬件構(gòu)成,軟件邏輯以及程序代碼。該里程測速系統(tǒng)以STC89C52作為系統(tǒng)控制關(guān)鍵,采用傳感器來檢測信號,通過一定期間間隔對信號的采集,結(jié)合自行車自身車輪參數(shù),通過單片機對采集信號進行分析計算,最終在液晶顯示屏LCD上顯示車輛行駛的里程和速度,具有超速報警[5]。本次的畢業(yè)設(shè)計過程中,有三個需要處理的關(guān)鍵問題:(1)5v電源怎么實現(xiàn)。(2)速度怎樣采樣。(3)速度顯示模塊采用何種方式,液晶還是數(shù)碼管。第一章系統(tǒng)方案1.1課題的重要任務(wù)及內(nèi)容本課題重要任務(wù)是運用霍爾元件、單片機等部件設(shè)計一種可用1602液晶顯示的實時顯示里程和速度的自行車的速度里程表。本文重要簡介了自行車的速度里程表的設(shè)計思想、電路原理、方案論證以及元件的選擇等內(nèi)容,整體上分為硬件部分設(shè)計和軟件部分設(shè)計。本文首先要對該課題的任務(wù)進行方案論證,包括硬件方案和軟件方案的設(shè)計;繼而詳細簡介了自行車的速度里程表的硬件設(shè)計,包括傳感器的選擇、單片機的選擇、顯示電路的設(shè)計;然后論述了該自行車的速度里程表的軟件設(shè)計,包括數(shù)據(jù)處理子程序的設(shè)計、顯示子程序的設(shè)計;最終對本次設(shè)計進行了系統(tǒng)的總結(jié)。詳細的硬件電路包括STC89C52單片機的外圍電路以及LCD液晶顯示電路、霍爾檢測電路等。軟件設(shè)計包括:芯片的初始化程序、定期中斷采樣子程序、顯示子程序等,軟件采用C語言編寫,軟件設(shè)計的思想重要是自頂向下,模塊化設(shè)計,各個子模塊逐一設(shè)計。1.2任務(wù)分析與實現(xiàn)本設(shè)計的任務(wù)是:以STC89C52單片機為處理關(guān)鍵,用傳感器將車輪的轉(zhuǎn)數(shù)轉(zhuǎn)換為電脈沖,進行處理后送入單片機。里程及速度的測量,是通過STC89C52的定期/計數(shù)器測出定期1s會計數(shù)幾種脈沖,再通過單片機的計算得出,其成果通過LCD液晶顯示屏顯示出來。測速,首先要處理是采樣的問題。使用單片機進行測速,可以使用簡樸的脈沖計數(shù)法。只要轉(zhuǎn)軸每旋轉(zhuǎn)一周,產(chǎn)生一種或固定的多種脈沖,將脈沖送入單片機中進行計算,即可獲得轉(zhuǎn)速的信息。常用的測速元件有霍爾傳感器、光電傳感器和光電編碼器。里程測量傳感器的選擇也有如下幾種方案:使用光敏電阻對里程進行測量、運用編碼器對車輪的圈數(shù)進行測量、運用霍爾傳感器對里程進行測量、運用干簧管型傳感器測量里程。規(guī)定到達的各項指標及實現(xiàn)措施如下:(1).上電后實時顯示速度(2).旅程實時記錄(掉電存儲)(3).半徑可設(shè)定(掉電存儲)(4).超速報警(5).掉電存儲實現(xiàn):運用軟件編程,對數(shù)據(jù)進行處理得到需要的數(shù)值。最終實現(xiàn)目的:自行車的速度里程表具有里程、速度測試與顯示功能,采用單片機作控制,顯示電路可顯示里程及速度。1.3單片機選擇伴隨微電子技術(shù)和超大規(guī)模集成電路技術(shù)的發(fā)展,單片微型計算機以其體積小、性價比高、功能強、可靠性高等獨有的特點,在各個領(lǐng)域(如工業(yè)控制、家電產(chǎn)品、汽車電子、智能儀器儀表)得到了廣泛的應(yīng)用。下面就簡要簡介具有代表性的幾款單片機[6]。1.8031單片機是Intel企業(yè)生產(chǎn)的MCS-51系列單片機中的一種,除無片內(nèi)ROM外,其他特性與MCS-51單片機基本同樣,內(nèi)部具有一種8位CPU、128個字節(jié)的RAM,21個特殊功能寄存器。而單片機8031要進行存儲器的擴展比較麻煩,外圍器件多,并且8031的功耗也大。2.單片機8032/8052/8752是增強型產(chǎn)品,而8032、80C32片內(nèi)是沒有ROM的,而89C51內(nèi)部具有4K字節(jié)的FLASH的ROM。52系列的單片機計數(shù)器為三個16位計數(shù)器,中斷源為8個。3.8051是最早最經(jīng)典的產(chǎn)品,是在8031的基礎(chǔ)上片內(nèi)又集成4KROM,作為程序存儲器。8051單片機與80C51單片機從外形看是完全同樣的,其指令系統(tǒng)、引腳信號、總線等完全一致(完全兼容),也就是說在8051下開發(fā)的軟件完全可以在80C51上應(yīng)用,反過來,在80C51下開發(fā)的軟件也可以在8051上應(yīng)用[7]。4.STC89C52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。在單片機芯片上,擁有機靈的8位CPU和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的處理方案。具有如下原則功能:8k字節(jié)Flash,512字節(jié)RAM,32位I/O口線,看門狗定期器,內(nèi)置4KBEEPROM,MAX810復位電路,三個16位定期器/計數(shù)器,一種6向量2級中斷構(gòu)造,全雙工串行口。另CPU停止工作,容許RAM、定期器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保留,振蕩器被凍結(jié),單片機一切工作停止,直到下一種中斷或硬件復位為止。最高運作頻率35Mhz,6T/12T可選[8]。在本次設(shè)計中,通過度析與比較,選擇了單片機STC89C52,這是由于:1.單片機STC89C52采用的是CHMOS工藝:高速度、高密度、低功耗。也就是說STC89C52單片機是一種低功耗單片機。2.可靠性高、便于擴展。3.控制功能強。4.單片機89C51片內(nèi)存儲容量較小,除此之外,單片機STC89C52還具有集成度高、體積小、性價比高、應(yīng)用廣泛、易于產(chǎn)品化等特點。1.4顯示模塊的選擇動態(tài)掃描LED數(shù)碼管顯示。里程表的顯示內(nèi)容以數(shù)字為主,運用LED數(shù)碼管可基本滿足使用規(guī)定,且成本較低。不過用動態(tài)掃描的方式驅(qū)動數(shù)碼管,亮度太低,在陽光下幾乎看不見顯示內(nèi)容,失去使用價值。串行靜態(tài)LED數(shù)碼管顯示。把單片機的串行口設(shè)置為方式0(同步移位寄存器),輸出顯示信息,可實現(xiàn)LED數(shù)碼管的靜態(tài)顯示,其亮度令人滿意。但由于要使用74HC164/74LS164串并轉(zhuǎn)換芯片驅(qū)動LED數(shù)碼管,因此會帶來體積大、成本高、功耗高等缺陷。LCD液晶顯示模塊。液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富等特點,目前字符型液晶顯示模塊已經(jīng)是單片機應(yīng)用設(shè)計中最常用的信息顯示屏件了[9]。在本次設(shè)計中,通過度析與比較使用LCD1602作為顯示模塊。1.5傳感器的選擇紅外光電傳感器。把紅外對管分別安裝在自行車車輪的兩側(cè),當車輪轉(zhuǎn)動時,輻條會阻擋紅外對管的光路,接受管輸出低電平,單片機根據(jù)此信號可計算里程、速度等。紅外對管的長處是測量精度高,缺陷是安裝比較復雜和輕易受外來光線、灰塵等的影響。開關(guān)型霍爾傳感器。霍爾傳感器是運用霍爾效應(yīng)把磁輸入信號轉(zhuǎn)換成電信號的器件。把開關(guān)型霍爾傳感器安裝在自行車貼近車輪的支架上,磁鋼安裝在輻條上,當磁鋼靠近霍爾傳感器的時候,傳感器輸出一種無抖動的低電平,單片機根據(jù)此信號可計算里程、速度等?;魻杺鞲衅鞯拈L處是穩(wěn)定和安裝簡易,缺陷是成本較高。干簧管。干簧管是一種磁敏的有觸點無源電子開關(guān)元件,應(yīng)用在里程表上的原理與開關(guān)型霍爾傳感器類似,把干簧管安裝在自行車貼近車輪的支架上,磁鋼安裝在輻條上,當磁鋼靠近霍爾傳感器的時候,干簧管閉合,單片機根據(jù)此信號可計算里程、速度等。干簧管的長處是成本低廉和安裝簡易,缺陷是比較脆弱和不夠穩(wěn)定。本里程表選用開關(guān)型霍爾傳感器,穩(wěn)定、安裝簡易。1.6系統(tǒng)簡介系統(tǒng)由霍爾傳感器脈沖檢測電路、LCD1602液晶顯示、數(shù)據(jù)存儲模塊、主控單片機系統(tǒng)構(gòu)成,霍爾傳感器把車輪的每周期信號轉(zhuǎn)換成脈沖傳送給單片機,單片機通過判斷脈沖周期計算出轉(zhuǎn)速及旅程,通過數(shù)據(jù)穩(wěn)定處理等程序,得出轉(zhuǎn)速穩(wěn)定近似值,通過LCD1602液晶屏顯示,并記錄總旅程于內(nèi)部掉電存儲,能保證掉電數(shù)據(jù)不丟失。系統(tǒng)方框圖如圖1-1所示。測量自行車的速度的原理有兩種:測量一定期間間隔t,自此時間段自行車車輪轉(zhuǎn)過的圈數(shù)q。假設(shè)車輪周長為c,則速度V=c*q/t;測量自行車車輪轉(zhuǎn)過一圈的時間t,則速度V=c/t。本里程表是根據(jù)前一種原理計算速度的。圖1-1系統(tǒng)方框圖工作原理:里程、速度等都是由霍爾元器件測量。通過頻率計輸出脈沖,代表車輪轉(zhuǎn)動圈數(shù),已知自行車輪胎的半徑為50cm,輪子每轉(zhuǎn)動一圈,安裝在車輪輻條上的磁鋼靠近霍爾傳感器一次,傳感器送一種脈沖信號給單片機的外部中斷計數(shù)器T0,產(chǎn)生一次中斷,圈數(shù)加一。圈數(shù)*2*π*0.5即為車前進距離,而通過單片機T0定期器記錄時間,間隔1秒,1秒內(nèi)的前進距離除以時間1秒,得到1秒內(nèi)的目前速度。而總里程L除以總時間t得到平均速度[10]。若速度不小于所設(shè)定的值,則P1.0口輸出低電平,LED警示燈亮,揚聲器發(fā)出聲音??梢酝ㄟ^按鍵來變化半徑和速度的上限值。第二章硬件設(shè)計2.1單片機的簡介2.1.1單片機原理簡介單片機是指集成在一種芯片上的微型計算機,也就是把構(gòu)成微型計算機的多種功能部件,包括CPU(CentralProcessingUnit)、隨機存儲器RAM(RandomAccessMemory)、只讀存儲器ROM(Read-onlyMemory)、基本輸入/輸出(Input/Output)接口電路。定期器/計數(shù)器等部件都制作在一塊集成芯片上,構(gòu)成一種完整的微型計算機從而實現(xiàn)微型計算機的基本功能。單片機內(nèi)部構(gòu)造示意圖如圖2-1所示[11]。定期/計數(shù)器定期/計數(shù)器中斷系統(tǒng)CPU存儲器并行I/O口串口I/O口TXD RXDTINTP0-P3圖2-1單片機內(nèi)部構(gòu)造示意圖1.中央處理器(CPU)中央處理器是單片機最關(guān)鍵的部分,重要完畢運算和控制功能。2.內(nèi)部存儲器內(nèi)部存儲器包括內(nèi)部數(shù)據(jù)存儲器(內(nèi)部RAM)和內(nèi)部程序存儲器。存儲器是由大量的寄存器所構(gòu)成,其中每一種寄存器就稱為一種存儲單元。3.定期/計數(shù)器單片機的定期器和計數(shù)器是同一構(gòu)造,只是計數(shù)器記錄的是單片機外部發(fā)生的事件,由單片機的外部電路提供計數(shù)信號;而定期器是由單片機內(nèi)部提供一種非常穩(wěn)定的計數(shù)信號。4.中斷系統(tǒng)中斷系統(tǒng)在計算機中起著十分重要的作用,是現(xiàn)代計算機系統(tǒng)中廣泛采用的一種實時控制技術(shù),能對突發(fā)事件進行及時處理,從而大大提高系統(tǒng)的實時性能。5.串行I/O接口串行I/O口的數(shù)據(jù)各位按次序傳播,其特點是需要一對傳播線,成本低;但速度慢,效率低,適合靜態(tài)顯示。6.并行I/O接口并行I/O接口的數(shù)據(jù)所有位同步傳送。其特點是傳播速度快,效率高;但傳送多少位就需要多少根傳播線,因此傳送成本高,適合動態(tài)顯示。2.1.2單片機的引腳功能簡介STC89C52是一種帶8K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM-FlashProgramableandErasableReadOnlyMemory)的低電壓,高性能COMOS8的微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)原則的MCS-51指令集和輸出管腳相兼容。引腳如圖2-2所示:圖2-2STC89C52引腳圖STC89C52詳細簡介如下:①主電源引腳(2根)VCC(Pin40):電源輸入,接+5V電源GND(Pin20):接地線②外接晶振引腳(2根)XTAL1(Pin19):片內(nèi)振蕩電路的輸入端XTAL2(Pin18):片內(nèi)振蕩電路的輸出端③控制引腳(4根)RST/VPP(Pin9):復位引腳,引腳上出現(xiàn)2個機器周期的高電平將使單片機復位。ALE/PROG(Pin30):地址鎖存容許信號PSEN(Pin29):外部存儲器讀選通信號EA/VPP(Pin31):程序存儲器的內(nèi)外部選通。接低電平,從外部程序存儲器讀指令,假如接高電平則從內(nèi)部程序存儲器讀指令。④可編程輸入/輸出引腳(32根)STC89C52單片機有4組8位的可編程I/O口,分別為P0、P1、P2、P3口,每個口有8位(8根引腳),共32根。PO口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7P1口(Pin1~Pin8):8位準雙向I/O口線,名稱為P1.0~P1.7P2口(Pin21~Pin28):8位準雙向I/O口線,名稱為P2.0~P2.7P3口(Pin10~Pin17):8位準雙向I/O口線,名稱為P3.0~P3.72.2單片機外圍電路的設(shè)計2.2.1時鐘電路STC89C52內(nèi)部有一種用于構(gòu)成振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。時鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。本文所用的是內(nèi)部方式的時鐘電路,如圖2-3所示,在XTAL1和XTAL2引腳上外接定期元件,內(nèi)部振蕩器就產(chǎn)生自激振蕩。定期元件一般采用石英晶體和電容構(gòu)成的并聯(lián)諧振回路。晶體振蕩頻率可以在1.2~12MHz之間選擇,電容值在5~30pF之間選擇,電容值的大小可對頻率起微調(diào)的作用。圖2-3時鐘電路2.2.2復位電路的設(shè)計本系統(tǒng)的復位電路是采用按鍵復位的電路,如圖2-4所示,是常用復位電路之一。單片機復位通過按鍵產(chǎn)生高電平復位稱手動復位。上電時,剛接通電源,電容C相稱于瞬間短路,+5V立即加到RET/VPD端,該高電平使89C52全機自動復位,這就是上電復位;若運行過程中需要程序從頭執(zhí)行,只需按下按鍵即可。按下按鍵,可直接把+5V加到了RET/VPD端從而復位稱為手動復位。復位后,P0到P3并行I/O口全為高電平,其他寄存器所有清零,只有SBUF寄存器狀態(tài)不確定。工作原理:通電瞬間,RC電路充電,RST引腳出現(xiàn)高電平,只要RST端保持10ms以上高電平,就能使單片機有效地復位。圖2-4按鍵復位電路2.2.3報警電路的設(shè)計本次報警電路采用蜂鳴器報警,當自行車行駛的速度超過本設(shè)計所設(shè)定的速度時,P1.0口輸出低電平,使三極管導通,蜂鳴器發(fā)出報警信號。報警電路如2-5所示:圖2-5報警電路2.3傳感器霍爾傳感器是一種磁傳感器。用它可以檢測磁場及其變化,可在多種與磁場有關(guān)的場所中使用?;魻杺鞲衅饕曰魻栃?yīng)為工作基礎(chǔ),是由霍爾元件和它的附屬電路構(gòu)成的集成傳感器?;魻杺鞲衅髟诠I(yè)生產(chǎn)、交通運送和平常生活中有著非常廣泛的應(yīng)用[12]。1.霍爾效應(yīng)霍爾元件-霍爾傳感器
由于霍爾元件產(chǎn)生的電勢差很小,故一般將霍爾元件與放大器電路、溫度賠償電路及穩(wěn)壓電源電路等集成在一種芯片上,稱之為霍爾傳感器.圖2-6霍爾傳感器霍爾傳感器也稱為霍爾集成電路,其外形較小,如圖2-6所示,是其中一種型號的外形圖。2.霍爾傳感器的分類霍爾傳感器分為線性型霍爾傳感器和開關(guān)型霍爾傳感器兩種。(1)線性型霍爾傳感器由霍爾元件、線性放大器和射極跟隨器構(gòu)成,它輸出模擬量。(2)開關(guān)型霍爾傳感器由穩(wěn)壓器、霍爾元件、差分放大器,斯密特觸發(fā)器和輸出級組成,它輸出數(shù)字量。3.霍爾傳感器的特性(1)線性型霍爾傳感器的特性如圖2-7所示:圖2-7線性霍爾傳感器的特性輸出電壓與外加磁場強度呈線性關(guān)系,如圖2-7所示,可見,在B1~B2的磁感應(yīng)強度范圍內(nèi)有很好的線性度,磁感應(yīng)強度超過此范圍時則展現(xiàn)飽和狀態(tài)。(2)開關(guān)型霍爾傳感器的特性
如圖2-8所示,其中BOP為工作點“開”的磁感應(yīng)強度,BRP為釋放點“關(guān)”的磁感應(yīng)強度。圖2-8開關(guān)型霍爾傳感器特性當外加的磁感應(yīng)強度超過動作點Bop時,傳感器輸出低電平,當磁感應(yīng)強度降到動作點Bop如下時,傳感器輸出電平不變,一直要降到釋放點BRP時,傳感器才由低電平躍變?yōu)楦唠娖?。Bop與BRP之間的滯后使開關(guān)動作更為可靠。此外尚有一種“鎖鍵型”(或稱“鎖存型”)開關(guān)型霍爾傳感器,其特性如圖2-9所示:圖2-9鎖鍵型開關(guān)型霍爾傳感器當磁感應(yīng)強度超過動作點Bop時,傳感器輸出由高電平躍變?yōu)榈碗娖?,而在外磁場撤銷后,其輸出狀態(tài)保持不變(即鎖存狀態(tài)),必須施加反向磁感應(yīng)強度到達BRP時,才能使電平產(chǎn)生變化。4.霍爾傳感器的應(yīng)用按被檢測對象的性質(zhì)可將它們的應(yīng)用分為:直接應(yīng)用和間接應(yīng)用。前者是直接檢測受檢對象自身的磁場或磁特性,后者是檢測受檢對象上人為設(shè)置的磁場,這個磁場是被檢測的信息的載體,通過它,將許多非電、非磁性物理量,例如速度、加速度、角度、轉(zhuǎn)數(shù)、轉(zhuǎn)速以及工作狀態(tài)發(fā)生變化的時間等,轉(zhuǎn)變成電學量來進行檢測和控制[11]。
(1)線性型霍爾傳感器重要用于某些物理量的測量。
①電流傳感器②位移測量(2)開關(guān)型霍爾傳感器重要用于測轉(zhuǎn)數(shù)、轉(zhuǎn)速、風速、流速、靠近開關(guān)、關(guān)門告知器、報警器、自動控制電路等。
如圖2-10所示,,在非磁性材料的圓盤邊上粘一塊磁鋼,霍爾傳感器放在靠近圓盤邊緣處,圓回旋轉(zhuǎn)一周,霍爾傳感器就輸出一種脈沖,從而可測出轉(zhuǎn)數(shù)(計數(shù)器),若接入頻率計,便可測出轉(zhuǎn)速[10]。圖2-10模擬測速
假如把開關(guān)型霍爾傳感器按預定位置有規(guī)律地布置在軌道上,當裝在運動車輛上的永磁體通過它時,可以從測量電路上測得脈沖信號。根據(jù)脈沖信號的分布可以測出車輛的運動速度。本設(shè)計采用的開關(guān)型霍爾傳感器尺寸小、工作電壓范圍寬,工作可靠,價格廉價,因此獲得極為廣泛的應(yīng)用。電路如圖2-11所示:圖2-11開關(guān)型霍爾傳感器傳感器的工作原理如圖2-12所示:圖2-12傳感器工作原理2.4顯示電路的設(shè)計在平常生活中,我們對液晶顯示屏并不陌生。液晶顯示模塊已作為諸多電子產(chǎn)品的通用器件,如在計算器、萬用表、電子表及諸多家用電子產(chǎn)品中都可以看到,顯示的重要是數(shù)字、專用符號和圖形。在單片機的人機交流界面中,一般的輸出方式有如下幾種:發(fā)光管、LED數(shù)碼管、液晶顯示屏。發(fā)光管和LED數(shù)碼管比較常用,軟件都比較簡樸,但硬件電路復雜。在單片機系統(tǒng)中應(yīng)用液晶顯示屏作為輸出器件有如下幾種長處:(1)顯示質(zhì)量高由于液晶顯示屏每一種點在收到信號后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示屏(CRT)那樣需要不停刷新新亮點。因此,液晶顯示屏畫質(zhì)高且不會閃爍。(2)數(shù)字式接口液晶顯示屏都是數(shù)字式的,和單片機系統(tǒng)的接口愈加簡樸可靠,操作愈加以便。(3)體積小、重量輕液晶顯示屏通過顯示屏上的電極控制液晶分子狀態(tài)來到達顯示的目的,在重量上比相似顯示面積的老式顯示屏要輕得多。(4)功耗低相對而言,液晶顯示屏的功耗重要消耗在其內(nèi)部的電極和驅(qū)動IC上,因而耗電量比其他顯示屏要少得多。2.4.1顯示屏LCD1602的簡介1.液晶顯示原理液晶顯示的原理是運用液晶的物理特性,通過電壓對其顯示區(qū)域進行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示屏具有厚度薄、合用于大規(guī)模集成電路直接驅(qū)動、易于實現(xiàn)全彩色顯示的特點,目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字攝像機、PDA移動通信工具等眾多領(lǐng)域。2.液晶顯示屏的分類液晶顯示的分類措施有諸多種,一般可按其顯示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示屏尚有多灰度有彩色顯示等。假如根據(jù)驅(qū)動方式來分,可以分為靜態(tài)驅(qū)動(Static)、單純矩陣驅(qū)動(SimpleMatrix)和積極矩陣驅(qū)動(ActiveMatrix)三種。3.液晶顯示屏多種圖形的顯示原理:①線段的顯示點陣圖形式液晶由M×N個顯示單元構(gòu)成,假設(shè)LCD顯示屏有64行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行有16字節(jié),共16×8=128個點構(gòu)成,屏上64×16個顯示單元與顯示RAM區(qū)1024字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和顯示屏上對應(yīng)位置的亮暗對應(yīng)。例如屏的第一行的亮暗由RAM區(qū)的000H——00FH的16字節(jié)的內(nèi)容決定,當(000H)=FFH時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(3FFH)=FFH時,則屏幕的右下角顯示一條短亮線;當(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H時,則在屏幕的頂部顯示一條由8段亮線和8條暗線構(gòu)成的虛線。這就是LCD顯示的基本原理。②字符的顯示用LCD顯示一種字符時比較復雜,由于一種字符由6×8或8×8點陣構(gòu)成,既要找到和顯示屏幕上某幾種位置對應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不一樣位為“1”,其他的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就構(gòu)成某個字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡樸了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)置光標,在此送上該字符對應(yīng)的代碼即可。③中文的顯示中文的顯示一般采用圖形的方式,事先從微機中提取要顯示的中文的點陣碼(一般用字模提取軟件),每個中文占32B,分左右兩半,各占16B,左邊為1、3、5……右邊為2、4、6……根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)可找出顯示RAM對應(yīng)的地址,設(shè)置光標,送上要顯示的中文的第一字節(jié),光標位置加1,送第二個字節(jié),換行按列對齊,送第三個字節(jié)……直到32B顯示完LCD就可以得到一種完整的中文。4.重要技術(shù)參數(shù)如表2-1所示:表2-1LCD1602重要技術(shù)參數(shù)顯示容量16×2個字符芯片工作電壓4.5~5.5工作電流2.0mA(5.0v)模塊最佳電壓5.0v字符尺寸2.95×4.35(WXH)mm5.引腳接口闡明如表2-2所示[13]:表2-2LCD1602引腳接口編號符號引腳闡明編號符號引腳闡明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極第1腳:VSS為地電源第2腳:VDD接5V電源第3腳:VL為液晶顯示屏對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一種10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:R/W為寄存器選擇,高電平時進行讀寫操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。LCD1602分為帶背光和不帶背光兩種,基本控制器大部分為HD44780,帶背光的比不帶背光的厚,與否帶背光在應(yīng)用中并無差異,兩者尺寸差異如下圖2-13所示:圖2-13LCD1602帶背光與不帶背光的外形尺寸差異6.LCD寄存器的選擇如表2-3所示:表2-3LCD寄存器的選擇ER/WRS功能闡明100寫入命令寄存器101寫入數(shù)據(jù)寄存器110讀取忙碌標志及RAM地址111讀取RAM數(shù)據(jù)0X不動作7.1602LCD的指令闡明及時序1602液晶模塊內(nèi)部的控制器共有11條控制指令,控制指令如表2-4所示:表2-41602控制指令序號指令RSR/WD7D6D5D4D3D2D1D01清除顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(闡明:1為高電平、0為低電平)指令1:清除顯示,指令碼01H,光標復位到地址00H位置。指令2:光標復位,光標返回到地址00H。指令3:光標和顯示模式設(shè)置I/D:光標移動方向,高電平右移,低電平左移S:屏幕上所有文字與否左移或者右移。高電平表達有效,低電平則無效。指令4:顯示開關(guān)控制。D:控制整體顯示的開與關(guān),高電平表達開顯示,低電平表達關(guān)顯示C:控制光標的開與關(guān),高電平表達有光標,低電平表達無光標B:控制光標與否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位S/C:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設(shè)置命令DL:高電平時為4位總線,低電平時為8位總線N:低電平時為單行顯示,高電平時雙行顯示F:低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀忙信號和光標地址BF:為忙標志位,高電平表達忙,此時模塊不能接受命令或者數(shù)據(jù),假如為低電平表達不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。2.4.2顯示電路的設(shè)計電路本設(shè)計中LCD1602的數(shù)據(jù)總線接STC89C52單片機的P0口,控制引腳RS接P2.7口,R/W接P2.6口,E接P2.5口。VL是對比控制引腳,電壓在0~5V之間,BLA和BLK是背光電源的正負極,使用時需要連接限流電阻,電流大小可以控制背光亮度。液晶顯示電路如圖2-14所示[14]:圖2-14液晶顯示電路第三章軟件設(shè)計3.1軟件實現(xiàn)的功能1.運用霍爾傳感器產(chǎn)生里程數(shù)的脈沖信號2.運用單片機自帶的計數(shù)器T0對霍爾傳感器脈沖信號進行計數(shù)3.對數(shù)據(jù)進行處理,規(guī)定用LCD顯示里程總數(shù)和即時速度4.自行車超速,系統(tǒng)發(fā)出報警信號。3.2主程序1.初始化程序重要工作:將T0設(shè)為外部控制定期器方式;外中斷0及外中斷1設(shè)為邊緣觸發(fā)方式;將部分內(nèi)存單元清零;設(shè)置輪子周長;開中斷及定期器;將EEPROM中的數(shù)據(jù)調(diào)入內(nèi)存等。2.輪圈大小的設(shè)計P1.5和P1.6兩個引腳分別接兩個開關(guān),通過調(diào)整這兩個開關(guān),可以變化輪圈的半徑。3.重要程序流程圖通過對按鍵和定期器的監(jiān)測,進行按鍵和顯示獨立執(zhí)行,當有按鍵按下根據(jù)按鍵的類型作對應(yīng)的處理,定期500ms進行一次顯示更新。程序流程圖如圖3-1所示:圖3-1軟件總體流程圖4.算法流程A44E輸出端OUT連到單片機外部中斷T0上,用磁鐵靠近A44E,輸出端產(chǎn)生一種低電平信號,使CPU產(chǎn)生一次中斷計一次數(shù)。假定輪圈的周長為L,在輪圈上安裝m個永久磁鐵,則測得的里程值最大誤差為L/m。本設(shè)計中取m=1。當輪子每轉(zhuǎn)一圈,通過霍爾元件傳感器采集到一種脈沖信號,并從引腳P3.2中斷0端輸入,可以采用兩種定期器,一種定期器定位1s,一種是計數(shù)器。計數(shù)器是用來計數(shù)1s鐘輪子的圈數(shù)。從而可以計算出它的里程與速度。速度V=周長L/t通過計數(shù)外部中斷的脈沖數(shù),每通過1s進行一次監(jiān)測,從而得出速度,并計算出旅程,再通過液晶1602顯示。程序流程圖如圖3-2所示:圖3-2算法流程3.3顯示子程序的設(shè)計本設(shè)計采用LCD液晶顯示屏接口電路,數(shù)據(jù)總線接STC89C52單片機的P0口,控制引腳RS接P2.7口,R/W接P2.6口。E接P2.5口。通過編輯軟件,先把所要顯示的數(shù)據(jù)放入存儲單元,然后把數(shù)據(jù)送入對應(yīng)的地址,完畢顯示。液晶屏每0.5s更新一次顯示。若發(fā)生報警,顯示屏上的值將會停留在近來一次的顯示值,直至復位按鈕按下或按鈕按下。顯示子程序的流程圖如圖3-3所示:圖3-3顯示程序框圖第四章系統(tǒng)調(diào)試與仿真系統(tǒng)調(diào)試包括硬件調(diào)試和軟件調(diào)試。硬件調(diào)試的任務(wù)是排除系統(tǒng)的硬件系統(tǒng)的硬件電路故障包括設(shè)計性錯誤和工藝故障。軟件調(diào)試是運用開發(fā)工具進行在線仿真調(diào)試,除發(fā)現(xiàn)和處理程序錯誤外,也可以發(fā)現(xiàn)硬件故障校時電路。本次設(shè)計中需要的調(diào)試如下:4.1系統(tǒng)仿真調(diào)試本次試驗采用的是uVision2件進行調(diào)試。它是KeilSoftware企業(yè)推出的一款可用于多種8051MCU的集成開發(fā)環(huán)境(IDE),該IDE同步也是PK51及其他開發(fā)套件的一種重要組件。除增長了源代碼、功能導航器、模板編輯以及改善的搜索功能外,uVision2提供了一種配置向?qū)Чδ?,加速了啟動代碼和配置文獻的生成。此外其內(nèi)置的仿真器可模擬目的MCU,包括指令集、片上外圍設(shè)備及外部信號等。uVision2提供邏輯分析器,可監(jiān)控基于MCUI/O引腳和外設(shè)狀態(tài)變化下的程序變量[15]。程序調(diào)試界面如圖4-1所示。4.2protel99的簡介初期的PROTEL重要作為印制板自動布線工具使用,運行在DOS環(huán)境,對硬件的規(guī)定很低,在無硬盤286機的1M內(nèi)存下就能運行,但它的功能也較少,只有電路原理圖繪制與印制板設(shè)計功能,其印制板自動布線的布通率也低,而現(xiàn)今的PROTEL已發(fā)展到DXP,是個龐大的EDA軟件,完全安裝有200多M,它工作在WINDOWS95環(huán)境下,是個完整的板級全方位電子設(shè)計系統(tǒng),它包括了電路原理圖繪制、模擬電路與數(shù)字電路混合信號仿真、多層印制電路板設(shè)計(包括印制電路板自動布線)、可編程邏輯器件設(shè)計、圖表生成、電子表格生成、支持宏操作等功能,并具有Client/Server(客戶/服務(wù)器)體系構(gòu)造,同步還兼容某些其他設(shè)計軟件的文獻格式,如ORCAD,PSPICE,EXCEL等,其多層印制線路板的自動布線可實現(xiàn)高密度PCB的100%布通率。在國內(nèi)PROTEL軟件較易買到,有關(guān)PROTEL軟件和使用闡明的書也有諸多,這為它的普及提供了基礎(chǔ)。因此本設(shè)計的原理圖用的軟件是protel99。圖見附錄2所示。圖4-1程序調(diào)試界面4.3硬件調(diào)試4.3.1常見的硬件故障(1)邏輯錯誤:樣機硬件的邏輯錯誤是由于設(shè)計錯誤或加工過程中的工藝性錯誤而導致的,包括錯線,開路和短路等等,其中短路是最常見的故障。(2)元器件失效:元器件失效的原因有兩個方面,一是器件自身已經(jīng)損壞或性能不符合規(guī)定;二是由于組裝錯誤導致的元器件失效,如電解電容,二極管的極性錯誤或集成塊安裝方向錯誤等。(3)性差:若樣機中存在電源故障,則加電后將導致器件損壞。電源故障包括電壓值不符合設(shè)計規(guī)定,電源引出線和插座不對應(yīng),電源功率局限性和負載能力差等。4.3.2調(diào)試措施脫機調(diào)試是在樣機加點之前,先用萬用表等工具,根據(jù)硬件電氣原理圖和裝配圖,仔細檢查樣機線路的對的性,并查對元器件型號,規(guī)格和安裝與否合規(guī)定。尤其注意電源的走線,防止電源之間的短路和極性錯誤,重點檢查系統(tǒng)的總線或其他信號線之間與否存在互相的短路。樣機所用的電源,事先必須單獨調(diào)試后才能加到系統(tǒng)中,在不插芯片的狀況下,加電檢測各底座上引腳的電位,仔細測量各點電位與否正常,尤其應(yīng)注意單片機底座上的各點電位與否正常。接通5v電源,液晶顯示屏會顯示速度為0,當磁鐵靠近霍爾元器件時,就會顯示速度的值,不停的靠近霍爾傳感器,速度的值就會越來越大。可以通過切換開關(guān)來查看此時的旅程和半徑??梢酝ㄟ^變化半徑變化旅程與速度。圖為附錄所示。結(jié)束語本設(shè)計是以STC89C52單片機為重要控制電路,通過霍爾傳感器傳送給單片機,運用單片機內(nèi)部的計時和中斷,計算里程速度并通過液晶顯示屏顯示。在本次設(shè)計中本人也碰到了諸多困難,開始拿到課題時還覺得很簡樸,可通過動手做之后,才發(fā)現(xiàn)自己的局限性,對單片機知識掌握的不牢,所有知識都只局限于書本上老師講過的,課外知識積累的太少。通過本次設(shè)計,本人學到了諸多老師課上沒教的知識,如霍爾元件,液晶顯示屏等的管腳及其功能,理解了它們的使用方法、原理、接口電路及其應(yīng)用程序,深入加強了本人的專業(yè)基礎(chǔ)知識和有關(guān)專業(yè)課程知識,提高了本人的動手能力,能將所學知識運用在實際生活中;培養(yǎng)獨立自主、綜合分析的思維與創(chuàng)新能力。在后來的學習中,本人要多閱讀課外書籍,不能只局限于書本,擴展本人的思緒,積累更多的知識,并將它應(yīng)用到實際生活中去。在本次的畢業(yè)設(shè)計過程中,三個需要處理的關(guān)鍵問題都得到了處理:第一、電源可以通過網(wǎng)上購置USB充電器5v電源適配器,更以便進行測試。第二、速度可以通過霍爾元器件進行模擬,再送進單片機進行計算。從而可以得出速度與里程。第三、顯示電路可以用液晶顯示屏,可以減少電路的復雜程度,使得電路愈加美觀。在此過程中也碰到了問題,液晶顯示屏的顯示屏顯示的字很模糊,因此在液晶顯示屏的3腳與地接了一種2K~5K的電阻。參照文獻[1]郁有文,常健,程繼紅.傳感器原理及工程應(yīng)用[M].西安:電子科技大學出版社,.[2]何希才.傳感器技術(shù)及應(yīng)用[M].北京:航空航天大學出版社,.[3]袁新燕.有關(guān)“單片機原理與應(yīng)用”教學的討論[J].電腦開發(fā)與應(yīng)用,1997,10(4):56-59.[4]唐煒.單片機原理與應(yīng)用課程教學改革探討[J].電氣電子教學學報,,24(3):21-23.[5]樓然苗,李光飛.51系列單片機設(shè)計實例[M].北京:航空航天大學出版社,.[6]張友德,趙志英,涂時亮.單片微型機原理、應(yīng)用與試驗[M].上海:復旦大學出版社,.[7]曾一江.單片機原理與接口技術(shù)[M].北京:科學出版社,.[8]QUJin-yu.MeasureofEngineSpeedBasedonC8052FChip[J].Tractor&FarmTransporter,,12(5):12-15.[9]趙亮.液晶顯示模塊LCD1602應(yīng)用[J].電子制作,,17(3):12-15.[10]王鎖弘.電子車速里程表的單片機實現(xiàn)方案[J].國外電子元器件,,14(5):7-8.[11]陳雪麗.單片機原理及接口技術(shù)[M].西安:化學工業(yè)出版社,.[12]LvQuan.Modernsensorprincipleandapplication[J].Thefirstedition.Beijing:tsinghuauniversitypress.,10(5):3-5.[13]鄧燕妮,常小科,劉輝琴等.基于51單片機控制的液晶顯示技術(shù)[J].工業(yè)控制計算機,,12(3):22-25.[14]蔡康松,段杏林.基于單片機字符型液晶顯示模塊控制設(shè)計[J].黃山學院學報,,5(6):10-15.[15]尹勇強.uVision2單片機應(yīng)用開發(fā)指南[M].北京:航空航天大學出版社,.致謝通過這幾種月來的忙碌和學習,本次畢業(yè)論文設(shè)計已靠近尾聲,作為一種大學生的畢業(yè)設(shè)計,由于經(jīng)驗的匱乏,難免有許多考慮不周全的地方,在這里衷心感謝指導老師的督促指導,以及一起學習的同學們的支持,讓本人準時完畢了這次畢業(yè)設(shè)計。在畢業(yè)論文設(shè)計過程中,本人碰到了許許多多的困難。在此要感謝本人的指導老師王老師的悉心協(xié)助和對本人耐心而細致的指導,本人的畢業(yè)論文較為復雜啰嗦,不過王老師仍細心地糾正圖中的錯誤。除了敬佩王老師的專業(yè)水平以外,他的治學嚴謹和科學研究的精神也是本人永遠學習的楷模,并將積極影響本人此后的學習和工作,本人才得以處理畢業(yè)設(shè)計中碰到的種種問題。同步感謝本院、系領(lǐng)導對學生們的教導和關(guān)注;感謝大學四年傳授學子專業(yè)知識的所有老師。謝謝你們嘔心瀝血的教導。尚有謝謝本人周圍的同學朋友,他們給了本人無數(shù)的關(guān)懷和鼓勵,也讓本人的大學生活充斥了溫暖和歡樂。假如沒有他們的協(xié)助,本次畢業(yè)論文的完畢將變得困難。他們在本人設(shè)計中給了許多寶貴的意見和提議。同步也要感謝自己碰到困難的時候沒有一蹶不振,取而代之的是找到了最佳的措施來處理問題。最終,感謝本人的父母。謝謝他們給本人無私的愛,為本人求學所付出的巨大犧牲和努力。附錄附錄一元器件清單序號名稱代號型號數(shù)量1電阻R251Ω12電阻R111.2K13貼片電阻R110KΩ14貼片電阻R61KΩ15排阻R54.7KΩ*816貼片電容C2,C322Pf27磁片電容C510418電解電容C40.1uF/25V19電解電容C14.7uF/25V110蜂鳴器BELL3V111按鍵S1,S2,S3,S4,S5SW-PB512液晶顯示屏1602LCD113PNPQ19012114霍爾傳感器R3A3144E115單片機U2STC89C52116發(fā)光二極管D3LED117晶振Y112MHZ1附錄二電路圖附錄三實物照片圖(1)顯示速度圖(2)顯示里程附錄四源程序Mainc#include<reg52.h>#include"1602.h" //液晶顯示驅(qū)動#include"key16.h" //按鍵頭文獻#include"tim0.h" //定期器0頭文獻#include"tim1.h" //定期器1頭文獻#include"stc_eeprom.h" //掉電存儲頭文獻#defineOPEN 0#defineCLOSE 1//模式定義#defineMODE_NUM 4#defineM_MAIN 0 //主模式#defineM_ROUTE 1 //主模式#defineM_RADIUS 2 //設(shè)置半徑模式#defineM_UP_SPD 3 //設(shè)置上限速度模式//ucharmode=0; //模式定義ucharb_radius=50; //半徑存儲變量cmuinttotal_dis=0; //總旅程Totaldistance,單位100muintb_speed=0; //自行車速度ucharup_speed=22; //超速設(shè)置sbitBELL=P1^0; //蜂鳴器報警externunsignedlongdistance; //總旅程//地址定義#defineH_ADD 0X20 //高位地址#defineS_ADD 0X00 //起始位地址#defineDIS_ADD 0X08 //旅程存儲地址#defineRADIUS_ADD 0X0C //半徑存儲地址#defineUP_SPD_ADD 0X10 //上限速度存儲地址//保留數(shù)據(jù)voidsaveData(void){ SectorErase(H_ADD,S_ADD); byte_write(total_dis/256,H_ADD,DIS_ADD); //保留距離 byte_write(total_dis%256,H_ADD,DIS_ADD+1); byte_write(b_radius/256,H_ADD,RADIUS_ADD); //保留半徑 byte_write(b_radius%256,H_ADD,RADIUS_ADD+1); byte_write(up_speed,H_ADD,UP_SPD_ADD); //保留上限速度}//讀數(shù)據(jù)voidreadData(void){ total_dis=byte_read(H_ADD,DIS_ADD)*256; total_dis+=byte_read(H_ADD,DIS_ADD+1); distance=total_dis*100; b_radius=byte_read(H_ADD,RADIUS_ADD)*256; b_radius+=byte_read(H_ADD,RADIUS_ADD+1); up_speed=byte_read(H_ADD,UP_SPD_ADD);} ////顯示總旅程voidshowTolDis(ucharx,uchary){ WrLcdS(x,y,"Route:km"); WrFloatNum(x,y+6,total_dis/10.0); }//顯示速度voidshowSpeed(ucharx,uchary){ WrLcdS(x,y,"Spd:km/h"); if(b_speed<10000) { WrFloatNum(x,y+4,b_speed/10.0); } else //超速 { WrLcdS(x,y,"Spd:*****km/h"); } }//寫半徑數(shù)值voidWrRadiusNum(ucharx,uchary,uintnum) //補零使得顯示位數(shù)相等{ if(num==0) { WrNum(x,y++,0); } if(num<100) { WrNum(x,y++,0); } WrNum(x,y,num); }//顯示半徑voidshowRadius(ucharx,uchary){ WrLcdS(x,y,"Radius:cm"); WrRadiusNum(x,y+7,b_radius);}//顯示上限設(shè)置速度voidshowUpSpd(ucharx,uchary){ WrLcdS(x,y,"Speed:km/h"); WrNum(x,y+6,up_speed);}//模式顯示voidshowMode(ucharmode){ WrLcdS(0,9,""); WrLcdS(1,0,""); switch(mode) { caseM_MAIN :WrLcdS(0,9,"MAIN");showSpeed(1,0);break; caseM_ROUTE :WrLcdS(0,9,"ROUTE");showTolDis(1,0);break; caseM_RADIUS :WrLcdS(0,9,"RADIUS");showRadius(1,0);break; caseM_UP_SPD :WrLcdS(0,9,"UP_SPD");showUpSpd(1,0);break; default:break; }}//加法函數(shù)voidPlusVar(uchar*var,ucharmax_num,ucharini_num){ (*var)++; //設(shè)置溫度加 if(*var>max_num) { *var=ini_num; } }//減法函數(shù)voidSubVar(uchar*var,ucharmin_num,ucharini_num){ if((*var)>min_num) { (*var)--; //設(shè)置溫度減 } else { (*var)=ini_num; } }//按鍵處理函數(shù)voidex_mode(void){ PlusVar(&mode,MODE_NUM-1,0);//模式變換}voidex_add(void){ if(mode==M_RADIUS) { PlusVar(&b_radius,255,1); //半徑減 } if(mode==M_UP_SPD) { PlusVar(&up_speed,100,1); //上限速度減 } if(mode==M_ROUTE) { distance=0; //旅程清零 } }voidex_sub(void){ if(mode==M_RADIUS) { SubVar(&b_radius,1,255);//半徑加 } if(mode==M_UP_SPD) { SubVar(&up_speed,1,100); //上限速度加 } if(mode==M_ROUTE) { distance=0; //旅程清零 }}//確認按鍵函數(shù)voidex_ok(void){ mode=M_MAIN;}////速度超速檢測voidCheckSpeed(void){ if((b_speed/10)>up_speed)//超速則蜂鳴器報警 { BELL=OPEN; //打開蜂鳴器 } else { BELL=CLOSE; //關(guān)閉蜂鳴器 } }voidmain(){ Ucharkeyv; //按鍵值返回 uchartcnt=0; //定期計數(shù) InitLcd(); //初始化液晶 InitTim0(); //初始化定期器0 InitTim1(); //初始化定期器1 ReadData(); //讀取掉電前數(shù)據(jù) EA=1;//開總中斷 while(1) { keyv=key_scan(); //按鍵掃描 if(keyv>0) { switch(keyv) //按鍵處理 { caseK_POWER :ex_ok() ;break; //確認按鍵處理 caseK_ADD :ex_add() ;break; //向下鍵處理 caseK_SUB :ex_sub() ;break; //向下鍵處理 caseK_MODE :ex_mode() ;break; //向上按鍵處理 default:break; } ShowMode(mode); //顯示目前模式的信息 saveData(); //保留變化的數(shù)據(jù),防止掉電 } if(tt1flag==1) //500ms到了 { tt1flag=0; tcnt++; if(tcnt>=4) //2s鐘保留一次 { tcnt=0; saveData(); //保留數(shù)據(jù) } ShowMode(mode); //顯示目前模式的信息 CheckSpeed(); //超速檢測 } }}Lcd1602.c#include"1602.h"voidDelay_1602(uintpostpone){ uinttmp; tmp=postpone*8; while(postpone--);}voidWriteCom(ucharLCD_COM){ RS_1602=0; DataPort=LCD_COM; EN_1602=1; Delay_1602(100); EN_1602=0;}voidWriteData(ucharLCD_DATA){ RS_1602=1; DataPort=LCD_DATA; EN_1602=1; Delay_1602(100); EN_1602=0;}#if0VoidWrS(ucharadd,ucharn,uchars[16]){ uchari; WriteCom(add); if(n<16) { for(i=0;i<n;i++) { WriteData(s[i]); } }}#endifvoidWrLcdS(uchary,ucharx,char*s){ ucharadd=x; if(y==0) add+=0x80; elseadd+=0xc0; WriteCom(add); while(*s) { WriteData(*s++); }}#if0voidWrNum(uchary,ucharx,uintnum){ ucharadd=x,i=1; if(y==0) add+=0x80; elseadd+=0xc0; WriteCom(add); WriteData(num/1000+48); WriteData(num%1000/100+48); WriteData(num%1000%100/10+48); WriteData(num%10+48); }#endifvoidWrNum(uchary,ucharx,uintnum){ uchartmp[5],i=0; ucharadd=x; uintxtmp; if(y==0) add+=0x80; elseadd+=0xc0; WriteCom(add); xtmp=num; while(xtmp/10) { tmp[i]=xtmp%10+'0'; xtmp=xtmp/10; i++; } tmp[i]=xtmp+'0'; i++; while(i) { WriteData(tmp[--i]); }}voidWrFloatNum(uchary,ucharx,floatfnum){ uintf,d; ucharadd=x; if(y==0) add+=0x80; else add+=0xc0; WriteCom(add); f=(uint)fnum; d=(fnum-f)*10; WrNum(y,x,f); WriteData('.'); WriteData(d%10+'0');}#if0voidWrLcdNum(uchary,ucharx,uintnum){ ucharadd=x,i=1; char*s; uintval=num; if(y==0) add+=0x80; elseadd+=0xc0; while(val/10) { *s++=val%10+48; val/=10; i++; } *s=val+48; WriteCom(add); while(i--) { WriteData((*s--)); }}#endifvoidInitLcd(){ RW_1602=0; EN_1602=0;// BLCD_1602=1; WriteCom(0x38); WriteCom(0x0c); WriteCom(0x06); WriteCom(0X01); WriteCom(0xc5);}//***************************************************************Key16.c#include"key16.h"http://延時 voiddelay_ms(uintxms){uinti,j;for(i=xms;i>0;i--)//i=xms即延時約xms毫秒for(j=110;j>0;j--);}ucharkey_scan(){ ucharkeyv=0; ucharport_tmp; KPORT|=0xf0; //注意只用到了P0--P3,因此高四位的值要保持不變 port_tmp=KPORT|0x0f; if(port_tmp!=0xff) { delay_ms(10); //消抖 port_tmp=KPORT|0x0f; if(port_tmp!=0xff) { switch(port_tmp) { caseL5:keyv=K_POWER ;break; //電源按鍵 caseL6:keyv=K_ADD ;break; //加按鍵 caseL7:keyv=K_SUB ;break; //減按鍵 caseL8:keyv=K_MODE ;break; //模式按鍵 default:keyv=0 ;break; //無按鍵 } while(port_tmp!=0xff)//等待松手 { port_tmp=KPORT|0x0f; } } } returnkeyv;}Tim0.c#include"tim0.h"voidInitTim0(void){ TMOD|=0X05; //00000101 TH0=0X00; TL0=0X00;// ET0=1; TR0=0; //臨時}voidt0(void)interrupt1//using0{ }Tim1.c#include"tim1.h"#defineOPEN 0#defineCLOSE 1externuintb_speed; //自行車速度externuinttotal_dis; //總旅程externucharb_radius; //自行車半徑unsignedlongdistance; //muchartt1=0,tt1_0;bittt1flag=0;uintrec_t0;externbitstart_flag;voidInitTim1(void){ TMOD|=0X10; //模式選擇 TH1=0XB8; //賦初值 TL1=0X00; ET1=1; //開定期器1中斷 TR1=1; //開計數(shù)器1中斷}voidt1(void)interrupt3//using0{ uintsp[3]={0,0,0}; staticuchari=0; TH1=0XB8; //20ms進一次中斷 TL1=0X00; tt1++; if(tt1==25) //500ms中到了 { tt1=0; tt1flag=1; } tt1_0++; if(tt1_0==50) //1s鐘到了 { tt1_0=0; TR0=0; rec_t0=TH0*256+TL0; //計算出定期器0的計數(shù)值 TH0=0; TL0=0; b_speed=2*3.14*b_radius*rec_t0/100.0;//m/s distance+=b_speed; total_dis=distance/100; b_speed=(2*3.14*b_radius*rec_t0)*36/100.0; //m/s sp[i++]=b_speed; if(i==3) { i=0; } b_speed=(sp[0]+sp[1]+sp[2])/3; //取平均 TR0=1; }} Stc_eeprom.c#include"stc_eeprom.h"/*================打開ISP,IAP功能=================*/voidISP_IAP_enable(void){EA=0;/*關(guān)中斷*/ISP_CONTR=ISP_CONTR&0x18;/*0001,1000*/ISP_CONTR=ISP_CONTR|WaitTime;/*寫入硬件延時*/ISP_CONTR=ISP_CONTR|0x80;/*ISPEN=1*/}/*===============關(guān)閉ISP,IAP功能==================*/voidISP_IAP_disable(void){ISP_CONTR=ISP_CONTR&0x7f;/*ISPEN=0*/ISP_TRIG=0x00;EA=1;/*開中斷*/}/*================公用的觸發(fā)代碼====================*/voidISPgoon(void){ISP_IAP_enable();/*打開ISP,IAP功能*/ISP_TRIG=0x46;/*觸發(fā)ISP_IAP命令字節(jié)1*/ISP_TRIG=0xb9;/*觸發(fā)ISP_IAP命令字節(jié)2*/_nop_();}/*====================字節(jié)讀========================*/unsignedcharbyte_read(ucharhigh_add,ucharlow_add){ISP_ADDRH=high_add;/*地址賦值*/ISP_ADDRL=low_add;ISP_Order=ISP_Order&0xf8;/*清除低3位*/ISP_Order=ISP_Order|RdCommand;/*寫入讀命令*/ISPgoon();/*觸發(fā)執(zhí)行*/ISP_IAP_disable();/*關(guān)閉ISP,IAP功能*/return(ISP_DATA);/*返回讀到的數(shù)據(jù)*/}/*==================扇區(qū)擦除========================*/voidSectorErase(ucharhigh_add,ucharlow_add){ISP_ADDRH=high_add;ISP_ADDRL=low_add;ISP_Order=ISP_Order&0xf8;/*清空低3位*/ISP_Order=ISP_Order|EraseCommand;/*擦除命令3*/ISPgoon();/*觸發(fā)執(zhí)行*/ISP_IAP_disable();/*關(guān)閉ISP,IAP功能*/}/*====================字節(jié)寫========================*/voidbyte_write(ucharstr,ucharhigh_add,ucharlow_add){ISP_ADDRH=high_add;/*取地址*/ISP_ADDRL=low_add;ISP_Order=ISP_Order&0xf8;/*清低3位*/ISP_Order=ISP_Order|PrgCommand;/*寫命令2*/ISP_DATA=str;/*寫入數(shù)據(jù)準備*/ISPgoon();/*觸發(fā)執(zhí)行*/ISP_IAP_disable();/*關(guān)閉IAP功能*/}附錄五中英文文獻一、外文原稿StructureandfunctionoftheMCS-51seriesone-chipcomputerMCS-51isanameofapieceofone-chipcomputerserieswhichIntelCompanyproduces.Thiscompanyintroduced8top-gradeone-chipcomputersofMCS-51seriesin1980afterintroducing8one-chipcomputersofMCS-48seriesin1976.Itbelongtoalotofkindsthislineofone-chipcomputerthechipshave,suchas8051,8031,8751,80C51BH,80C31BH,etc.,theirbasiccomposition,basicperformanceandinstructionsystemareallthesame.8051dailyrepresentatives-51serialone-chipcomputers.Anone-chipcomputersystemismadeupofseveralfollowingparts:(1)Onemicroprocessorof8(CPU).(2)AtslicedatamemoryRAM(128B/256B),itusenotdeposittingnotcanreading/datathatwrite,suchasresultnotmiddleofoperation,finalresultanddatawantedtoshow,etc.(3)ProcedurememoryROM/EPROM(4KB/8KB),isusedtopreservetheprocedure,someinitialdataandforminslice.ButdoesnottakeROM/EPROMwithinsomeone-chipcomputers,suchas8031,8032,80C,etc..(4)Four8runsidebysideI/OinterfaceP0fourP3,eachmouthcanuseasintroduction,mayuseasexportingtoo.(5)Twotimer/counter,eachtimer/countermaysetupandcountintheway,usedtocounttotheexternalincident,cansetupintoatimingwaytoo,andcanaccordingtocountorresultoftimingrealizethecontrolofthecomputer.(6)Fivecutoffcuttingoffthecontrolsystemofthesource.(7)OneallduplexingserialI/OmouthofUART(universalasynchronousreceiver/transmitter(UART)),isitrealizeone-chipcomputerorone-chipcomputerandserialcommunicationofcomputertousefor.(8)Stretchoscillatorandclockproducecircuit,quartzcrystalfinelytuneelectriccapacityneedouter.Allowoscillationfrequencyas12megahertasnowatmost.Everytheabove-mentionedpartwasjoinedthroughtheinsid
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 落實食品銷售者主體責任制度
- 2026山東青島市李滄區(qū)所屬事業(yè)單位招聘32人備考考試試題附答案解析
- 2026廣東廣州生物醫(yī)藥與健康研究院數(shù)字生物醫(yī)學研究中心招聘科研助理1人備考考試題庫附答案解析
- 2026新疆新業(yè)有資產(chǎn)經(jīng)營(集團)有限責任公司招聘參考考試試題附答案解析
- 2026天津市嘉誠中學教師招聘參考考試題庫附答案解析
- 2026浙江嘉興市嘉睿人力招聘1人備考考試題庫附答案解析
- 2026河南駐馬店市上蔡縣事業(yè)單位引進高層次人才59人備考考試試題附答案解析
- 2026山東事業(yè)單位統(tǒng)考濟寧市兗州區(qū)招聘初級綜合類崗位43人參考考試試題附答案解析
- 食品生產(chǎn)兩個責任制度
- 生產(chǎn)企業(yè)值班值宿制度
- 2026元旦主題班會:馬年猜猜樂馬年成語教學課件
- 礦山作業(yè)安全事故調(diào)查處理制度
- GB/T 45013-2024精細陶瓷基片的熱疲勞試驗方法
- 《管理學基礎(chǔ)》教學大綱
- 充電樁場地租賃協(xié)議(范本)
- T-CI 263-2024 水上裝配式鋼結(jié)構(gòu)棧橋(平臺)施工技術(shù)規(guī)程
- 云南省楚雄州2023-2024學年上學期期末教育學業(yè)質(zhì)量監(jiān)測九年級歷史試卷(含答案)
- 凝血功能檢測方法與臨床意義
- 人教版五年級數(shù)學用方程解決問題
- 架桿租賃合同
- 哈工大歷年電機學試卷及答案詳解
評論
0/150
提交評論