基于單片機(jī)的數(shù)字電流表的設(shè)計(jì)_第1頁(yè)
基于單片機(jī)的數(shù)字電流表的設(shè)計(jì)_第2頁(yè)
基于單片機(jī)的數(shù)字電流表的設(shè)計(jì)_第3頁(yè)
基于單片機(jī)的數(shù)字電流表的設(shè)計(jì)_第4頁(yè)
基于單片機(jī)的數(shù)字電流表的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本科生畢業(yè)論文〔設(shè)計(jì)〕題目:基于單片機(jī)的數(shù)字電流表的設(shè)計(jì)學(xué)院電子信息工程學(xué)院學(xué)科門(mén)類工學(xué)專業(yè)電子信息工程學(xué)號(hào)指導(dǎo)教師2023年05月30日摘要隨著時(shí)代的進(jìn)步,電子科學(xué)技術(shù)的日益更新,傳統(tǒng)電工電子測(cè)量?jī)x器——模擬測(cè)量?jī)x表即使可以直觀地從刻度盤(pán)讀出表針偏轉(zhuǎn)了多少格或占了滿刻度的百分之幾等,也滿足不了對(duì)測(cè)量數(shù)據(jù)的精確要求,那么就需要更高、更準(zhǔn)精度的儀器來(lái)替代。同時(shí)傳統(tǒng)的模擬測(cè)量?jī)x表在計(jì)算時(shí)需要對(duì)讀數(shù)加以換算和說(shuō)明,而且不同的觀察者會(huì)帶來(lái)不同的人為“視差〞,即使同一個(gè)觀察者處于不同的位置也可能會(huì)得到不同的結(jié)果和偏差。然而,數(shù)字電流表就能夠克服這些問(wèn)題,它的測(cè)量結(jié)果直接以數(shù)字的形式在顯示屏上顯示出來(lái)。數(shù)字電流表不僅具有讀數(shù)準(zhǔn)確,設(shè)計(jì)簡(jiǎn)單,隨身攜帶的優(yōu)點(diǎn),而且操作方法簡(jiǎn)單,人們使用起來(lái)也非常方便,這些優(yōu)點(diǎn)使數(shù)字電流表在近年來(lái)的電工電子的測(cè)量中應(yīng)用更加廣泛。本文基于AT89C51單片機(jī),論述數(shù)字電流表的工作原理及設(shè)計(jì)過(guò)程。利用Protel軟件設(shè)計(jì)、KeilC軟件和Proteus仿真軟件,根據(jù)所給數(shù)字電流表的技術(shù)指標(biāo)和要求,確定電流表所需的元器件和最正確設(shè)計(jì)方案,這種方法簡(jiǎn)單易行,最終得到比擬理想,符合設(shè)計(jì)要求的數(shù)字電流表。關(guān)鍵詞:C51單片機(jī);A/D轉(zhuǎn)換器;數(shù)字電流表AbstractWiththeprogressoftime,increasinglyupdatingelectronicscienceandtechnology,traditionalelectricandelectronicmeasuringinstruments-analoguemeasurementinstruments,evenintuitivelyreadfromthedialhandsdeflectedthenumberofcellsoraccountedforafewpercentoffullscale,alsocannotmeettheexactrequirementsofthemeasureddata,thenyouneedhigherprecisionandmoreaccurateinstrumentinstead.Whiletraditionalanalogmeasuringinstrumentsneedtobeconvertedinthecalculationanddescriptionofthereadings,anddifferentobserverswillbringadifferentman,"parallax",evenifthesameobserverindifferentlocationsmaygetdifferentresultsanderror.However,thedigitalmeterwillbeabletoovercometheseproblems,itsmeasurementresultsindigitalformdirectlyonthescreenout.Digitalammeterreadingisnotonlyaccurate,simpledesign,theadvantagesofportable,andsimplemethodofoperation,itisalsoveryeasytouse,theseadvantagesmakedigitalammeterinelectricandelectronicmeasuringmorewidelyinrecentyears.BasedonAT89C51microcontroller,digitalammeterdiscussedtheworkingprincipleanddesignprocess.UseProtelsoftwaredesign,KeilCsoftwareandProteussimulationsoftware,dependingonthedigitalammetertechnicalindicatorsandrequirements,determinetherequiredcomponentsandammeterbestdesign,thismethodissimple,andultimatelygettheideal,inlinewithDigitalammeterdesignrequirements.Keywords:C51microcontrollerdigitalammeter;A/Dconverter;digitalammeter目錄TOC\o"1-2"\f\h摘要IAbstractII目錄III1.引言11.1研究背景及意義11.2國(guó)內(nèi)外研究現(xiàn)狀21.3本文主要內(nèi)容安排22.?dāng)?shù)字電流表的理論22.1數(shù)字電流表的工作原理22.2A/D轉(zhuǎn)換器32.3AT89C51單片機(jī)52.4液晶顯示器83.?dāng)?shù)字電流表的設(shè)計(jì)93.1方案論證93.2任務(wù)指標(biāo)103.3整體電路圖104.軟件設(shè)計(jì)114.1軟件設(shè)計(jì)的主程序流程圖114.2編程語(yǔ)言介紹114.3Protel99SE軟件的介紹125.系統(tǒng)調(diào)試及實(shí)物制作135.1硬件系統(tǒng)的調(diào)試135.2系統(tǒng)軟件的調(diào)試135.3整體系統(tǒng)的調(diào)試145.4實(shí)際硬件制作結(jié)果146.總結(jié)與展望14參考文獻(xiàn)16致謝17附錄181.引言1.1研究背景及意義數(shù)字電流表〔Digitalammeter〕簡(jiǎn)稱AMP,它的測(cè)量原理是通過(guò)數(shù)字化測(cè)量技術(shù),把輸入的連續(xù)模擬量〔直流輸入電流〕轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式,然后通過(guò)液晶顯示屏來(lái)顯示的儀表。過(guò)去傳統(tǒng)的指針式電流表不僅功能單一,而且精確度低,無(wú)法滿足現(xiàn)今數(shù)字化時(shí)代的需求,然而基于單片機(jī)的數(shù)字電流表,不僅具有精確度高、抗干擾能力強(qiáng),可擴(kuò)展性強(qiáng)、集成方便的特點(diǎn),還可以與PC進(jìn)行當(dāng)前實(shí)時(shí)通信等信息的傳輸?,F(xiàn)今,基于各種型號(hào)單片機(jī)、A/D轉(zhuǎn)換器等設(shè)計(jì)成的數(shù)字電流表,已經(jīng)在電子電工測(cè)量、工業(yè)自動(dòng)化儀表、自動(dòng)檢測(cè)系統(tǒng)等許多智能化測(cè)量領(lǐng)域起到了舉足輕重的地位,得到了越來(lái)越多使用者的青睞,表達(dá)出數(shù)字電流表強(qiáng)大的生命力。與此同時(shí),各種基于AMP擴(kuò)展而成的通用及專用數(shù)字化儀表儀器,也把電量和非電量測(cè)量的技術(shù)水平提高到更高的位置。在進(jìn)行課題設(shè)計(jì)之前,我們要學(xué)會(huì)如何在互聯(lián)網(wǎng)和圖書(shū)館查找所需的資料,同時(shí)復(fù)習(xí)過(guò)去所學(xué)的課程知識(shí)并加深理解記憶,不僅為畢業(yè)設(shè)計(jì)打好良好根底,同時(shí)也為以后的工作做充分的準(zhǔn)備。通過(guò)對(duì)畢業(yè)設(shè)計(jì)題目的分析,了解數(shù)字電流表的組成特性和工作原理;學(xué)會(huì)如何使用數(shù)字電流表測(cè)量數(shù)據(jù)、調(diào)試、校準(zhǔn)的方法;學(xué)會(huì)如何進(jìn)行分流電路的連接設(shè)進(jìn)和計(jì)算;學(xué)習(xí)了解過(guò)載電路保護(hù)的工作原理和功用。最終,通過(guò)本課程設(shè)計(jì),我們掌握電子設(shè)計(jì)的根本步驟和方法,培養(yǎng)自己分析問(wèn)題、解決問(wèn)題和處理問(wèn)題的能力。數(shù)字電流表和傳統(tǒng)的指針式電流表相比,具有如下優(yōu)點(diǎn):1.可以直觀準(zhǔn)確的讀取數(shù)字;2.能夠顯示小數(shù)點(diǎn)后面的位數(shù);3.測(cè)量時(shí)數(shù)字分辨率高,準(zhǔn)確度高;4.可以測(cè)量的量程范圍較大;5.能夠擴(kuò)展;6.工作效率高;7.輸入阻抗高;8.電路集成度高,功率消耗少;9.抗干擾能力較強(qiáng)。綜上可知,數(shù)字型電流表代替?zhèn)鹘y(tǒng)指針電流表不僅是時(shí)代開(kāi)展的必然趨勢(shì),也是現(xiàn)今市場(chǎng)的迫切需求。而此次課題的選擇和設(shè)計(jì)正是基于AT89C51單片機(jī)來(lái)進(jìn)行設(shè)計(jì)的。1.2國(guó)內(nèi)外研究現(xiàn)狀數(shù)字電流表自問(wèn)世以來(lái),已經(jīng)經(jīng)過(guò)多年的開(kāi)展和改良,大體上可以概括為五代產(chǎn)品。第一代產(chǎn)品是電子管數(shù)字電流表,問(wèn)世于20世紀(jì)50年代,第二代產(chǎn)品是晶體管數(shù)字電流表,問(wèn)世于20世紀(jì)60年代,第三代產(chǎn)品是中、小規(guī)模集成電路的數(shù)字電流表,研制于20世紀(jì)70年代。第四代、第五代產(chǎn)品是近些年來(lái)由國(guó)內(nèi)外相繼研制推出的由大規(guī)模集成電路〔LSI〕或者超大規(guī)模集成電路〔VLSI〕組成的數(shù)字電流表、智能數(shù)字電流表。這些數(shù)字電流表的問(wèn)世不僅在電子測(cè)量的進(jìn)程中開(kāi)創(chuàng)了先河,更憑借著準(zhǔn)確度高、可靠性強(qiáng)、分辨力高、性價(jià)比高等優(yōu)良特性而備受人們的喜愛(ài)。1.3本文主要內(nèi)容安排前期通過(guò)查閱大量的雜志、期刊、論文等相關(guān)重要的資料、文獻(xiàn)之后,對(duì)基于單片機(jī)的數(shù)字電流表的設(shè)計(jì)思路進(jìn)行大體的把握,具體的行文章節(jié)安排如下。第一章:引言中介紹數(shù)字電流表的研究背景和意義,開(kāi)展現(xiàn)狀和取得的研究成果。第二章:詳細(xì)的介紹數(shù)字電流表的根本理論知識(shí)。第三章:詳細(xì)的介紹數(shù)字電流表的設(shè)計(jì)方案和數(shù)字電流表的任務(wù)指標(biāo)以及整體電路圖的設(shè)計(jì)。第四章:介紹Protel99SE軟件的使用和編程語(yǔ)言的學(xué)習(xí)。第五章:對(duì)數(shù)字電流表進(jìn)行硬件、軟件和整體系統(tǒng)的調(diào)試。第六章:對(duì)論文進(jìn)行總結(jié)和展望。2.?dāng)?shù)字電流表的理論2.1數(shù)字電流表的工作原理數(shù)字電流表是一個(gè)可以將輸入的連續(xù)模擬電流量經(jīng)過(guò)A/D轉(zhuǎn)換器轉(zhuǎn)變?yōu)椴贿B續(xù)、離散的數(shù)字形式,并通過(guò)液晶顯示屏顯示出電流讀數(shù)的儀表,和指針式電流表相比,數(shù)字式電流表有著測(cè)量數(shù)據(jù)準(zhǔn)確明了,顯示的讀數(shù)位數(shù)精度高等特點(diǎn),類似于常用的數(shù)字式萬(wàn)用表,其使用性能相當(dāng)廣泛實(shí)用。首先我們通過(guò)單片機(jī)和外部擴(kuò)展電路做成一個(gè)理想的電壓[1],硬件電路設(shè)計(jì)由7個(gè)局部組成:主控模塊AT89C51單片機(jī)系統(tǒng),A/D轉(zhuǎn)換電路,顯示系統(tǒng),驅(qū)動(dòng)電路,復(fù)位電路,晶振電路以及測(cè)量電壓輸入電路。硬件電路設(shè)計(jì)框圖如圖2-1所示:復(fù)位電路復(fù)位電路主控模塊AT89C51晶振電路A/D轉(zhuǎn)換器驅(qū)動(dòng)電路電壓信號(hào)顯示模塊圖2-1系統(tǒng)硬件設(shè)計(jì)框圖人們常說(shuō)的電流表指的是靈敏電流計(jì),由于其量程太小,不能直接測(cè)量電流,只能通過(guò)它檢測(cè)有無(wú)電流和電流的流向,所以需將一個(gè)理想電壓表改裝成一個(gè)多量程或者量程較大的數(shù)字電流表。本次課題設(shè)計(jì)是基于一個(gè)內(nèi)阻為無(wú)窮大數(shù)字電壓表的根底上,并聯(lián)上一個(gè)分流電阻來(lái)構(gòu)成的數(shù)字電流表,其工作原理如圖2-2所示,電路圖用G表示。當(dāng)待測(cè)電流流過(guò)電阻,電流表的量程就由G的滿量程電壓和電阻的阻值來(lái)決定,記U為G的滿量程電壓,根據(jù)歐姆定律U=RI,當(dāng)U和R,那么電流表的滿量程電流就是I的數(shù)值。圖2-2數(shù)字電流表的根本工作原理2.2A/D轉(zhuǎn)換器數(shù)模轉(zhuǎn)換器,又稱D/A轉(zhuǎn)換器,簡(jiǎn)稱DAC,它的主要功能是把數(shù)字量轉(zhuǎn)變成模擬量。D/A轉(zhuǎn)換器的組成根本上包括4個(gè)局部,即權(quán)電阻網(wǎng)絡(luò)、運(yùn)算放大器、基準(zhǔn)電源和模擬開(kāi)關(guān)。模數(shù)轉(zhuǎn)換器中一般都要用到數(shù)模轉(zhuǎn)換器,模數(shù)轉(zhuǎn)換器即A/D轉(zhuǎn)換器,簡(jiǎn)稱ADC,它的主要功能是把連續(xù)的模擬信號(hào)轉(zhuǎn)變?yōu)殡x散的數(shù)字信號(hào)[2]。通過(guò)對(duì)轉(zhuǎn)換器的了解與本設(shè)計(jì)的要求,同時(shí)考慮到具體轉(zhuǎn)換器的具有性能指標(biāo)等特點(diǎn),我們選擇PCF8591作為本設(shè)計(jì)的A/D轉(zhuǎn)換器。PCF8591轉(zhuǎn)換器是一個(gè)具有單片集成、能夠進(jìn)行獨(dú)立供電、功耗低、8-bitCMOS數(shù)據(jù)獲取的器件。PCF8591有著4個(gè)模擬輸入、1個(gè)模擬輸出和1個(gè)串行I2C總線接口。PCF8591的地址引腳有3個(gè),分別為A0、A1和A2,可用來(lái)進(jìn)行硬件地址的編程,可以在不添加額外硬件的情況下,在同一個(gè)I2C總線上接入8個(gè)PCF8591器件。在PCF8591器件上輸入地址、輸出地址、控制信號(hào)和數(shù)據(jù)信號(hào)通常都是通過(guò)雙線雙向的I2C總線以串行的方式進(jìn)行傳輸信息的[3]。PCF8591具有多路模擬量輸入、內(nèi)置跟蹤保持、8-bit模數(shù)和數(shù)模轉(zhuǎn)換等功能,而且I2C總線的最大速率決定了PCF8591的最大轉(zhuǎn)化速率。特征如下:[1]獨(dú)立的供電系統(tǒng)[2]PCF8591的電壓操作范圍是2.5V-6V[3]待機(jī)消耗電流低[4]通過(guò)I2C總線串行輸入/輸出[5]PCF8591通過(guò)3個(gè)硬件地址引腳尋址[6]PCF8591的采樣率由I2C總線速率決定[7]4個(gè)模擬輸入可以編程為單端型或差分輸入[8]自動(dòng)增量頻道選擇[9]PCF8591模擬電壓的范圍從VSS到VDD[10]PCF8591內(nèi)置跟蹤保持電路[11]8-bit逐次逼近A/D轉(zhuǎn)換器[12]實(shí)現(xiàn)DAC增益可以通過(guò)1路模擬輸出來(lái)實(shí)現(xiàn)原理圖如圖2-3所示:圖2-3PCF8591原理圖PCF8591引腳信息[4]如圖2-4所示:圖2-4PCF8591引腳AIN0~AIN3:模擬信號(hào)的輸入端。A0~A2:引腳地址端。VDD、VSS:電源端〔2.5V~6V〕。SDA、SCL:I2C總線的數(shù)據(jù)線、時(shí)鐘線。OSC:外部時(shí)鐘的輸入端,內(nèi)部時(shí)鐘的輸出端。EXT:內(nèi)部、外部時(shí)鐘的選擇線,EXT接地時(shí)使用內(nèi)部時(shí)鐘。AGND:模擬信號(hào)地。AOUT:A/D轉(zhuǎn)換輸出端。VREF:基準(zhǔn)電源端。2.3AT89C51單片機(jī)單片機(jī)〔Microcontrollers〕是一種集成電路芯片,通過(guò)超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器等功能〔可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路〕集成到一塊硅片上構(gòu)成的一個(gè)小而完善的微型計(jì)算機(jī)系統(tǒng),在工業(yè)控制領(lǐng)域得到廣泛應(yīng)用[5]。AT89C51是一種可以編程、可以擦除的只讀存儲(chǔ)器〔FPEROM—FalshProgrammableandErasableReadOnlyMemory〕的低電壓微型處理器,ATMEL生產(chǎn)的AT89C51是一種將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中的高效微控制器。采用其AT89C51單片機(jī)制作的很多嵌入式控制系統(tǒng)不僅靈活性高而且設(shè)計(jì)方案價(jià)廉,從而深受人們青睞。圖2-5AT89C51單片機(jī)AT89C51單片機(jī)各引腳結(jié)構(gòu)如圖2-5所示[6]。引腳功能介紹:[1]VCC——接電源引腳。[2]GND——接地引腳。[3]P0口:8位,漏極開(kāi)路的準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻,該引腳可驅(qū)動(dòng)8個(gè)LS型TTL負(fù)載。當(dāng)P0口的管腳第一次寫(xiě)入“1〞時(shí),被定義為高阻輸入。P0口能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FLASH編程時(shí),P0口作為原碼輸入口,當(dāng)FLASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0口外部必須被拉高。[4]P1口:8位,具有內(nèi)部上拉電阻的準(zhǔn)雙向I/O口,P1口緩沖器允許接收輸出4個(gè)LS型TTL負(fù)載。P1口管腳寫(xiě)入“1〞后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH進(jìn)行編程和校驗(yàn)時(shí),P1口作為第八位地址接收。[5]P2口:8位,具有內(nèi)部上拉電阻的準(zhǔn)雙向I/O口,P2口緩沖器允許接收輸出4個(gè)LS型TTL負(fù)載,當(dāng)P2口被寫(xiě)“1〞后,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。當(dāng)P2口用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1〞時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能存放器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。[6]P3口:8位,具有內(nèi)部上拉電阻的準(zhǔn)雙向I/O口,可接收輸出4個(gè)LS型TTL負(fù)載。當(dāng)P3口寫(xiě)入“1〞后,它被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流〔ILL〕,這是由于上拉的緣故。P3口也可作為AT89C52的一些特殊功能口,如下所示[7]:P3.0/RXD:8位準(zhǔn)雙向并行口,串行數(shù)據(jù)輸入口P3.1/TXD:8位準(zhǔn)雙向并行口,串行數(shù)據(jù)輸出口P3.2/:8位準(zhǔn)雙向并行口,外部中斷0申請(qǐng)信號(hào)輸入端P3.3/:8位準(zhǔn)雙向并行口,外部中斷1申請(qǐng)信號(hào)輸入端P3.4—T0:8位準(zhǔn)雙向并行口,定時(shí)器/計(jì)數(shù)器0外部脈沖的輸入端P3.5—T1:8位準(zhǔn)雙向并行口,定時(shí)器/計(jì)數(shù)器1外部脈沖的輸入P3.6/:8位準(zhǔn)雙向并行口,外部數(shù)據(jù)存儲(chǔ)器〔RAM〕寫(xiě)選通P3.7/:8位準(zhǔn)雙向并行口,外部數(shù)據(jù)存儲(chǔ)器〔RAM〕讀選通P3口同時(shí)也為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。[7]RST——復(fù)位輸入口。當(dāng)振蕩器處于復(fù)位器件時(shí),要保持RST腳的兩個(gè)機(jī)器周期的高電平時(shí)間。[8]ALE/——當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許輸出電平用于鎖存地址的低位字節(jié)。在FLASH進(jìn)行編程期間,其引腳能夠用于輸入編程脈沖。在平時(shí),ALE端口以恒定不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6,所以它可用作外部輸出的脈沖或用于定時(shí)目的。但要注意的是:當(dāng)作為外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如果想要禁止ALE的輸出可以在SFR8EH地址上置0。這時(shí),ALE只有在執(zhí)行MOVX,MOVC指令時(shí)才起作用。另外,該引腳略微被拉高。微處理器在外部執(zhí)行狀態(tài)如果ALE被禁止,那么置位無(wú)效。[9]——外部程序存儲(chǔ)器的選通信號(hào)。當(dāng)處于外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次有效。但處于訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的信號(hào)將不會(huì)出現(xiàn)。[10]/VPP——當(dāng)保持低電平時(shí),那么在此期間外部程序存儲(chǔ)器〔0000H-FFFFH〕,不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),EA將內(nèi)部鎖定為RESET;當(dāng)EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH進(jìn)行編程的時(shí)候,此引腳也可以用于施加12V編程電源〔VPP〕。2.4液晶顯示器LCD〔LiquidCrystalDisplay〕是液晶顯示器名稱的縮寫(xiě),我們?cè)谌粘I钪须S處可見(jiàn)。液晶顯示器不僅具有顯示圖像質(zhì)量高,而且采用數(shù)字式接口、體積小、質(zhì)量輕、功耗低等優(yōu)點(diǎn),所以在生活中得到廣泛應(yīng)用。LCD1602是專門(mén)用來(lái)顯示數(shù)字、字母、符號(hào)等點(diǎn)陣式字符型液晶顯示模塊,常見(jiàn)的幾種規(guī)格主要有16*1,16*2,20*2和40*2等,常見(jiàn)的有字符型、點(diǎn)陣型和筆段型。模塊內(nèi)部元器件的主要構(gòu)成有LCD顯示屏、控制器、列驅(qū)動(dòng)器和偏壓產(chǎn)生電路[8]。本課題設(shè)計(jì)以長(zhǎng)沙太陽(yáng)人電子生產(chǎn)制造的1602液晶顯示器為例來(lái)簡(jiǎn)單介紹其用法。常見(jiàn)的1602字符型液晶顯示器引腳如圖2-6所示:圖2-6LCD1602引腳LCD1602引腳采用的是標(biāo)準(zhǔn)16腳接口,其各引腳的功能如下[9]:引腳1:GND為接地電源。引腳2:VCC接5V正極電源。引腳3:VO為調(diào)整液晶顯示器的比照度端口,當(dāng)正電源接在其端口時(shí),比照度處于最弱狀態(tài);當(dāng)?shù)仉娫唇釉谄涠丝跁r(shí),比照度處于最高狀態(tài)〔當(dāng)比照度過(guò)高時(shí)就會(huì)產(chǎn)生“鬼影〞,在使用時(shí),可以通過(guò)一個(gè)10K的電位器來(lái)調(diào)整比照度〕。引腳4:RS是選擇存放器,當(dāng)其處于高電平1時(shí),選擇數(shù)據(jù)存放器;當(dāng)其處于低電平0時(shí),選擇指令存放器。引腳5:RW是讀寫(xiě)信號(hào)線,當(dāng)其是高電平1時(shí),進(jìn)行讀操作;當(dāng)其處于低電平時(shí),進(jìn)行寫(xiě)操作。引腳6:E(或EN)端是使能(enable)端口,當(dāng)其處于高電平1時(shí),讀取信息;負(fù)跳變時(shí)執(zhí)行此指令。引腳7~14:DB0~DB7是8位的雙向數(shù)據(jù)端。引腳15~16:空腳或背燈電源端。15引腳是背光正極端口,16引腳是背光負(fù)極[10]端口。3.?dāng)?shù)字電流表的設(shè)計(jì)3.1方案論證〔一〕設(shè)計(jì)方案該數(shù)字電流表的設(shè)計(jì)主要由電壓信號(hào)采樣電路、A/D〔PCF8591)轉(zhuǎn)換電路以及LCD顯示電路構(gòu)成,其中采樣電路局部包括采樣電阻和差分放大電路,以及芯片電路三個(gè)模塊。數(shù)字電流表的設(shè)計(jì)方案如圖3-1所示。電壓信號(hào)電壓信號(hào)采樣電路A/D轉(zhuǎn)換器AT89C51處理數(shù)字信號(hào)LCD液晶顯示圖3-1數(shù)字電流表設(shè)計(jì)方案〔二〕硬件電路描述首先通過(guò)對(duì)論文題目的分析,根據(jù)題目要求考慮所用到的單片機(jī),鑒于合理選取及實(shí)例的具體分解,同時(shí)考慮到本課題的單片機(jī)需求,選取AT89C51單片機(jī)作為本課題設(shè)計(jì)的單片機(jī)。AT89C51不僅可以按照常規(guī)編程方法進(jìn)行,而且還可以實(shí)現(xiàn)在線編程。它能夠?qū)⑼ㄓ玫奈⑻幚砥骱虵lash存儲(chǔ)器結(jié)合在一起,同時(shí)Flash存儲(chǔ)器具有可反復(fù)擦寫(xiě)功能,有效地降低開(kāi)發(fā)本錢(qián)。AT89C51是一種功耗低、性能高的CMOS8位微控制器,具有4K系統(tǒng)可編程Flash存儲(chǔ)器,由Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造。片上的Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,也適用于常規(guī)的編程器。在單芯片上,AT89C51擁有靈巧的8位CPU和可在系統(tǒng)編程Flash,眾多的嵌入式控制應(yīng)用系統(tǒng)都采用其作為核心部件,并且得到廣泛應(yīng)用。再次,在進(jìn)行電流測(cè)量時(shí),電流輸入的是模擬量,而單片機(jī)只能處理數(shù)字信號(hào),所以需要通過(guò)A/D轉(zhuǎn)換芯片進(jìn)行轉(zhuǎn)換,通過(guò)篩選和分析,本課題采用PCF8591作為A/D轉(zhuǎn)換芯片。A/D轉(zhuǎn)換器的概念:即模數(shù)轉(zhuǎn)換〔AnalogtoDigitalConversion〕,當(dāng)輸入端輸入模擬量〔比方電壓信號(hào)〕時(shí),會(huì)相應(yīng)輸出一個(gè)與模擬量相對(duì)應(yīng)的數(shù)字量〔通常以二進(jìn)制形式表示〕。例如在參考電壓VREF為5V,8位的模數(shù)轉(zhuǎn)換器情況下,當(dāng)輸入的電壓為0V時(shí),輸出的數(shù)字量為00000000,當(dāng)輸入的電壓為5V時(shí),輸出的數(shù)字量為11111111。當(dāng)輸入的電壓在0V到5V之間變化時(shí),輸出的數(shù)字量會(huì)在00000000到11111111之間變化。這樣每次輸入的電壓值都會(huì)對(duì)應(yīng)輸出一個(gè)數(shù)字量,從而實(shí)現(xiàn)了模數(shù)轉(zhuǎn)換功能。最后,電路顯示屏局部采用的是LCD1602液晶顯示。3.2任務(wù)指標(biāo)本課題設(shè)計(jì)要求以單片機(jī)為根底制作出數(shù)字電流表。通過(guò)該設(shè)計(jì)了解A/D轉(zhuǎn)換器的原理、51系列單片機(jī)的使用和LCD液晶顯示器的使用方法、顯示過(guò)程。功能要求為:〔1〕三位直流數(shù)字電流表;〔2〕量程范圍為0-100mA;〔3〕通過(guò)LCD顯示屏顯示待測(cè)電流的數(shù)值;〔4〕8通道進(jìn)行電流值采集。本設(shè)計(jì)系統(tǒng)主要通過(guò)硬件設(shè)計(jì)、軟件編程的手段來(lái)實(shí)現(xiàn)相應(yīng)的要求功能。第一,根據(jù)題目設(shè)計(jì)的要求制作出能相應(yīng)功能的電路圖。第二,根據(jù)電路圖編寫(xiě)程序控制單片機(jī)〔可以使用C語(yǔ)言或者VB語(yǔ)言,本課題采用的是C語(yǔ)言〕,使單片機(jī)能夠控制A/D轉(zhuǎn)換器進(jìn)行模數(shù)轉(zhuǎn)換,并通過(guò)LCD顯示屏直接顯示出來(lái)相對(duì)應(yīng)的電流值。3.3整體電路圖整體電路圖設(shè)計(jì)如圖3-2所示。圖3-2數(shù)字電流表整體電路圖4.軟件設(shè)計(jì)4.1軟件設(shè)計(jì)的主程序流程圖主程序設(shè)計(jì)流程圖如圖4-1所示:開(kāi)始開(kāi)始調(diào)用LCD初始化子程序A/D轉(zhuǎn)換值清零設(shè)置LCDDDRAM地址,調(diào)用寫(xiě)入指令數(shù)據(jù)到LCD調(diào)用子程序LCD上顯示圖4-1主程序設(shè)計(jì)流程圖4.2編程語(yǔ)言介紹C語(yǔ)言是一門(mén)通用計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,美國(guó)貝爾實(shí)驗(yàn)室的DennisM.Ritchie在1972年推出的,它的工作單元是由高級(jí)語(yǔ)言的根本語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合而成的,它不僅具有高級(jí)語(yǔ)言的特點(diǎn),還具有匯編語(yǔ)言的特點(diǎn)。1978年后,C語(yǔ)言先后被移植到大、中、小及微型機(jī)上,它不僅可以作為工作系統(tǒng)設(shè)計(jì)語(yǔ)言,編寫(xiě)系統(tǒng)的應(yīng)用程序,還可以作為應(yīng)用程序設(shè)計(jì)語(yǔ)言,編寫(xiě)不依賴計(jì)算機(jī)硬件的應(yīng)用程序。它有著廣泛的應(yīng)用范圍,超強(qiáng)的數(shù)據(jù)處理能力,不僅在軟件開(kāi)發(fā)上,而且各類科研工作上都需要用到C語(yǔ)言,可以用來(lái)編寫(xiě)系統(tǒng)軟件,三維、二維圖形和動(dòng)畫(huà),具體應(yīng)用表達(dá)在單片機(jī)以及嵌入式系統(tǒng)開(kāi)發(fā)。單片機(jī)C語(yǔ)言的優(yōu)點(diǎn)[11]:1.語(yǔ)言簡(jiǎn)潔緊湊、使用靈活方便。C語(yǔ)言總共只有32個(gè)關(guān)鍵字,9種控制語(yǔ)句,程序書(shū)寫(xiě)形式自由,區(qū)分大小寫(xiě)。2.豐富的運(yùn)算符。C語(yǔ)言有著廣泛的運(yùn)算符范圍,總共有34種運(yùn)算符。在C語(yǔ)言中,賦值符號(hào)、括號(hào)、強(qiáng)制類型轉(zhuǎn)換等都會(huì)當(dāng)作運(yùn)算符處理,這樣使得C語(yǔ)言的運(yùn)算類型極其豐富,表達(dá)式類型也呈現(xiàn)多樣化。3.豐富的數(shù)據(jù)類型。C語(yǔ)言的數(shù)據(jù)類型有整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能夠?qū)崿F(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的運(yùn)算,同時(shí)引入指針概念,使其具有更高的程序效率。4.靈活使用的表達(dá)方式。C語(yǔ)言具有多種運(yùn)算符和表達(dá)式值的方法,可通過(guò)多種途徑對(duì)問(wèn)題的表達(dá),其程序設(shè)計(jì)更主動(dòng)、靈活。5.可以直接訪問(wèn)物理地址,對(duì)硬件進(jìn)行操作。6.生成的目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。7.具有很好的移植性能。8.很強(qiáng)的表達(dá)力。C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)和運(yùn)算符非常豐富,包含整型、數(shù)組類型、指針類型和聯(lián)合類型等,可以實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。230824.3Protel99SE軟件的介紹Protel99SE是澳大利亞ProtelTechnology公司研制開(kāi)發(fā)的,是一個(gè)全32位的電路板設(shè)計(jì)軟件,在電子行業(yè)的CAD軟件中,是一款常用的電子電路設(shè)計(jì)軟件,也是電子設(shè)計(jì)者的首選軟件。早期的Protel主要作為印制板自動(dòng)布線工具使用,對(duì)運(yùn)行的環(huán)境要求很低,但它的功能也較少,只有電路原理圖繪制與印制板設(shè)計(jì)功能,其印制板自動(dòng)布線的布通率也低,而現(xiàn)今的Protel安裝于Windows9X/2000/NT操作系統(tǒng)下,采用設(shè)計(jì)庫(kù)管理模式,可以進(jìn)行聯(lián)網(wǎng)設(shè)計(jì),具有很強(qiáng)的數(shù)據(jù)交換能力和開(kāi)放性及3D模擬功能,可以用于設(shè)計(jì)原理圖、設(shè)計(jì)印制電路板、設(shè)計(jì)可編程邏輯器件和電路仿真等,可以設(shè)計(jì)32個(gè)信號(hào)層,16個(gè)電源--地層和16個(gè)機(jī)加工層,同時(shí)還兼容一些其它設(shè)計(jì)軟件的文件格式,如ORCAD,PSPICE,EXCEL等,其多層印制線路板的自動(dòng)布線可實(shí)現(xiàn)高密度PCB的100%布通率[12]。用戶如果需要進(jìn)行軟件升級(jí)或獲取更詳細(xì)的資料,可以到公司查詢。Protel99SE中主要功能模塊如下:〔1〕AdvancedSchematic99SE〔原理圖設(shè)計(jì)系統(tǒng)〕該模塊包括電路圖編輯器、電路圖元器件編輯器和各種文本編輯器,主要用于電路原理圖的設(shè)計(jì)、原理圖元件的設(shè)計(jì)和生成各種原理圖報(bào)表等。〔2〕AdvancedPCB99SE〔印刷電路板設(shè)計(jì)系統(tǒng)〕該模塊提供了一個(gè)功能強(qiáng)大,可以交互友好的PCB設(shè)計(jì)環(huán)境,主要用來(lái)進(jìn)行PCB設(shè)計(jì)、元器件封裝設(shè)計(jì)、報(bào)表的生成及PCB輸出。〔3〕AdvancedRoute99SE〔自動(dòng)布線系統(tǒng)〕該模塊是一個(gè)集成無(wú)網(wǎng)格自動(dòng)進(jìn)行布線的系統(tǒng),有著高效的布線效率?!?〕AdvancedIntegrity99SE〔PCB信號(hào)完整性分析〕該模塊能夠進(jìn)行精確的板級(jí)物理信號(hào)分析,可以檢查串?dāng)_、過(guò)沖、下沖、延時(shí)和阻抗等問(wèn)題,并自動(dòng)給出相應(yīng)的具體解決方案?!?〕AdvancedSIM99SE〔電路仿真系統(tǒng)〕該模塊是一個(gè)基于最新的Spice3.5標(biāo)準(zhǔn)仿真器,給用戶的設(shè)計(jì)前端提供了完整、直觀的問(wèn)題解決方案?!?〕AdvancedPLD99SE〔可編程邏輯器件設(shè)計(jì)系統(tǒng)〕該模塊是一個(gè)集成性PLD開(kāi)發(fā)環(huán)境,可通過(guò)原理圖或者CUPL硬件描述語(yǔ)言來(lái)作為設(shè)計(jì)前端,能夠提供工業(yè)標(biāo)準(zhǔn)的JEDEC輸出。5.系統(tǒng)調(diào)試及實(shí)物制作5.1硬件系統(tǒng)的調(diào)試〔一〕元器件焊接在進(jìn)行焊接前先要對(duì)整個(gè)電路板進(jìn)行詳細(xì)的檢查。首先用萬(wàn)用表對(duì)印制的電路板進(jìn)行檢查,主要是檢測(cè)電路板是否存在斷路等情況,然后對(duì)照著電路原理圖與PCB圖將相應(yīng)的元器件進(jìn)行焊接?!捕畴娐窚y(cè)試電路板焊接完成后,在進(jìn)行通電測(cè)試之前先對(duì)元器件的引腳主要進(jìn)行兩個(gè)方面的檢查:第一檢查引腳是否出現(xiàn)虛焊或者其他信號(hào)線是否存在短路情況;第二是針對(duì)引腳功能的檢查。5.2系統(tǒng)軟件的調(diào)試在硬件調(diào)試進(jìn)行一切正常之后,接下來(lái)我們需要做的就是軟件調(diào)試。具體調(diào)試步驟如下:1.調(diào)試存儲(chǔ)模塊。確保存儲(chǔ)模塊能夠進(jìn)行讀寫(xiě)信息。2.調(diào)試單片機(jī)和數(shù)模轉(zhuǎn)換模塊。3.調(diào)試顯示模塊。5.3整體系統(tǒng)的調(diào)試在進(jìn)行完硬件和軟件局部的調(diào)試和檢測(cè)之后,最后我們需要將程序捎入單片機(jī)中。提供3V的電壓源,使整個(gè)模塊均處于正常的工作狀態(tài),對(duì)電流表分別進(jìn)行最大值和最小值的檢測(cè)。在大致估計(jì)的電流數(shù)值的情況下,如果數(shù)字電流表顯示屏測(cè)試的數(shù)值沒(méi)有較大的偏差,那么整體調(diào)試成功。5.4實(shí)際硬件制作結(jié)果根據(jù)電路圖自己制作出實(shí)物,其測(cè)試結(jié)果:能正常測(cè)量0——100mA電流,到達(dá)畢業(yè)設(shè)計(jì)的大局部設(shè)計(jì)要求。實(shí)物測(cè)試結(jié)果如圖5-1所示:圖5-1實(shí)際制作效果圖6.總結(jié)與展望至此為止,本課題設(shè)計(jì)論文的整體內(nèi)容已經(jīng)根本完成,本章主要講述對(duì)前面內(nèi)容的撰寫(xiě)以及實(shí)物制作的總結(jié),并在此根底上,提出對(duì)以后的工作建議和設(shè)想。隨著電子科學(xué)技術(shù)的快速開(kāi)展,未來(lái)的數(shù)字電流表需要向更精準(zhǔn),更智能方向開(kāi)展。數(shù)字電流表由于其讀數(shù)準(zhǔn)確,精度高,測(cè)量量程大,效率快等優(yōu)點(diǎn),在日常生活中得到較為廣泛的應(yīng)用。本設(shè)計(jì)是以單片機(jī)AT89C51芯片為核心的數(shù)字電流表,介紹了51單片機(jī)和A/D轉(zhuǎn)換器的結(jié)構(gòu),從而更深層次地分析數(shù)字電流表的設(shè)計(jì)原理、軟件仿真及其檢測(cè)調(diào)試等一系列的內(nèi)容。先從數(shù)字電流表理論入手結(jié)合數(shù)字電壓表的設(shè)計(jì)原理,利用取電阻上的電流來(lái)到達(dá)測(cè)試相應(yīng)電流的目的。同時(shí)給出了使用Protel軟件來(lái)設(shè)計(jì)原理圖的步驟以及實(shí)物制作的流程。當(dāng)今社會(huì)是信息化的時(shí)代,而數(shù)字電流的測(cè)量又在其中占據(jù)著一個(gè)非常重要的地位,電流表作為測(cè)量?jī)x器中非常關(guān)鍵的器件,有著非常廣闊的應(yīng)用前景。研究出精度高、性能優(yōu)的電流表有重大的實(shí)際價(jià)值和更深遠(yuǎn)的意義。參考文獻(xiàn)[1]胡紅博.基于單片機(jī)控制的新型交流電壓表系統(tǒng)[C].貴州:遵義師范學(xué)院,2023.[2]康華光.模擬電子技術(shù)根底〔第五版〕[M].北京:高等教育出版社,2006.[3]康華光.數(shù)字電子技術(shù)根底〔第五版〕[M].北京:高等教育出版社,2006.[4]萬(wàn)文略.單片機(jī)原理及應(yīng)用技術(shù)[M].重慶:重慶大學(xué)出版社,2004.[5]張毅剛.單片機(jī)原理及接口技術(shù)[M].北京:人民郵電出版社,2023.[6]王彥朋.大學(xué)生電子設(shè)計(jì)與應(yīng)用[M].北京:中國(guó)電力出版社,2007.[7]張毅剛,彭喜元,董繼成.單片機(jī)原理及應(yīng)用[M].北京:高等教育出版社,2003.[8]先鋒工作室.單片機(jī)程序設(shè)計(jì)實(shí)例[M].北京:清華大學(xué)出版社,2003.[9]萬(wàn)福君,淵松峰.單片微機(jī)原理系統(tǒng)設(shè)計(jì)與應(yīng)用[M].合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社,2001.[10]戴佳,陳斌.51單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)典型實(shí)例[M].北京:中國(guó)電力出版社,2005.[11]紀(jì)綱.C程序設(shè)計(jì)實(shí)用教程[G].北京:中國(guó)鐵道出版社,2023.[12]關(guān)健.電子CAD技術(shù)[S].北京:電子工業(yè)出版社出版社,2006.致謝光陰似箭,歲月如梭。經(jīng)過(guò)幾個(gè)月的時(shí)間終于把畢業(yè)論文撰寫(xiě)完成,在寫(xiě)作畢業(yè)論文的過(guò)程中遇到了許多問(wèn)題,讓我也發(fā)現(xiàn)了自己的很多缺乏之處,未能深刻理解以前學(xué)習(xí)的理論知識(shí),比方未能熟練掌握Protel軟件的使用、對(duì)單片機(jī)C語(yǔ)言匯編程序掌握得不嫻熟,但都在老師和同學(xué)的大力幫助下順利解決。經(jīng)過(guò)本次設(shè)計(jì)過(guò)程,我不僅把以前所學(xué)的知識(shí)重新溫故一遍,而且也學(xué)到了許多課外理論知識(shí),更重要是把所學(xué)的知識(shí)學(xué)以致用,提高了動(dòng)手能力,最終完成了本次設(shè)計(jì)。在此特別感謝我的指導(dǎo)老師-王**老師,她對(duì)我無(wú)私的指導(dǎo)和幫助。在論文撰寫(xiě)過(guò)程中王老師給我提供了很多有使用價(jià)值的建議和指導(dǎo),王老師嚴(yán)謹(jǐn)?shù)膽B(tài)度,一絲不茍的作風(fēng)讓我深受感動(dòng)。如果沒(méi)有王老師的大力幫助我不可能單獨(dú)完成整個(gè)畢業(yè)論文的設(shè)計(jì)。在此向王老師深深的感謝和敬意。同時(shí)感謝這篇論文所涉及的各位學(xué)者和研究者。本文借鑒了數(shù)位學(xué)者的研究成果,如果沒(méi)有這些學(xué)者的學(xué)術(shù)研究成果啟發(fā)和幫助,我也很難獨(dú)立完本錢(qián)篇論文的撰寫(xiě)。感謝我的同學(xué)和朋友,在我寫(xiě)撰論文過(guò)程中給予我了很多資料支持和珍貴的意見(jiàn),還在論文的撰寫(xiě)提供意見(jiàn)和排版的難題過(guò)程中提供幫助。在此我一一表示衷心的感謝!由于我的水平有限,所寫(xiě)的論文中肯定會(huì)有缺乏之處,望請(qǐng)各位老師批評(píng)和指正!附錄//////////////////////////////////////////////////////////////////顯示函數(shù)#include"MAIN_HEADER.h"#include"LCD1602.h"#include"KEY.h"/*******************************************************************//**//*延時(shí)函數(shù)*//**//*******************************************************************/voidDelayms(uinta){ uchari; while(a--) { for(i=0;i<120;i++); }}/*******************************************************************//**//*LCD初始化設(shè)定*//**//*******************************************************************/voidLcd_Init(){ LCD_RS=0;LCD_RW=0;LCD_EN=0; Lcd_Wcmd(0x01);Lcd_Wcmd(0x38);Lcd_Wcmd(0x0c);Lcd_Wcmd(0x06); Lcd_Wcmd(0xd0);}/*******************************************************************//**//*清屏函數(shù) *//**//*******************************************************************/voidLcd_Clear(){ Lcd_Wcmd(0x01); Delayms(1);}/*******************************************************************//**//*寫(xiě)指令數(shù)據(jù)到LCD*//*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。*//**//*******************************************************************/voidLcd_Wcmd(ucharcmd){LCD_RS=0;LCD_RW=0;LCD_EN=0;P0=cmd;Delayms(1);LCD_EN=1;Delayms(1);LCD_EN=0;}/*******************************************************************//**//*寫(xiě)顯示數(shù)據(jù)到LCD*//*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。*//**//*******************************************************************/voidLcd_Wdat(uchardat){LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;Delayms(1);LCD_EN=1;Delayms(1);LCD_EN=0;}/*******************************************************************//**//*設(shè)定顯示位置*//**//*******************************************************************/voidLcd_Set_xy(ucharhang,ucharlie){ uchara; if(hang==1)a=0x80; if(hang==2)a=0xc0; a=a+lie-1; Lcd_Wcmd(a); Delayms(1);}/*******************************************************************//**//*寫(xiě)字符串函數(shù)*//**//*******************************************************************/voidLcd_String(uchar*p){ while(1) { if(*p=='\0')break; Lcd_Wdat(*p); p++; Delayms(1); }}////////////////////////////////////////////////////////////////顯示頭文件#ifndef _LCD1602_#define_LCD1602_#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitLCD_RS=P1^0;sbitLCD_RW=P1^1;sbitLCD_EN=P1^2;externvoidDelayms(uinta);externvoidLcd_Init(); //LCD1602初始化函數(shù)externvoidLcd_Wcmd(ucharcmd); //LCD1602寫(xiě)命令函數(shù)externvoidLcd_Wdat(uchardat); //LCD1602寫(xiě)數(shù)據(jù)函數(shù)externvoidLcd_Set_xy(ucharhang,ucharlie); //LCD1602設(shè)置顯示位置函數(shù)externvoidLcd_String(uchar*p); //LCD1602寫(xiě)字符串函數(shù)externvoidLcd_Clear(); //LCD1602清屏函數(shù)#endif///////////////////////////////////////////////////////////////////主函數(shù)#include"MAIN_HEADER.h"#include"LCD1602.h"#include"KEY.h"#include"PCF8951.h"/*****************************初始化函數(shù)*****************************/voidInit() //初始化函數(shù){ TMOD=0X11;//定時(shí)器0和定時(shí)器1設(shè)置工作方式1 TH0=55536/256; //定時(shí)器0初值 TL0=55536%256; //定時(shí)器0初值 EA=1; //翻開(kāi)總中斷 ET0=1; //定時(shí)器0翻開(kāi) TR0=1; //定時(shí)器0翻開(kāi)// WDT_CONTR=0X31; //看門(mén)狗定時(shí)器在12M晶振時(shí)131ms復(fù)位}/****************************主函數(shù)******************************/voidMAIN(void){ uchardisplay[3]; Init(); Lcd_Init(); Lcd_Clear(); Delayms(10); Lcd_Set_xy(1,1); Lcd_String("I:000mA");// Lcd_Set_xy(1,8);// Lcd_String("Vout:1.00");// Lcd_Set_xy(2,1);// Lcd_String("V:0.00");// Ad_Da(4);// DA_NUM=(uchar)DA_NUM*0.941;// display[0]=DA_NUM/100+0x30;// display[1]=DA_NUM%100/10+0x30;// display[2]=DA_NUM%10+0x30;// Lcd_Set_xy(1,13);// Lcd_Wdat(display[0]);// Lcd_Set_xy(1,15);// Lcd_Wdat(display[1]);// Lcd_Wdat(display[2]); while(1) { uintk; for(k=10000;k>0;k--) {// Key(KEY_NUM); } Ad_Da(0); D[0]=(uchar)D[0]*0.393; display[0]=D[0]/100+0x30; display[1]=D[0]%100/10+0x30; display[2]=D[0]%10+0x30; Lcd_Set_xy(1,3); Lcd_Wdat(display[0]); Lcd_Wdat(display[1]); Lcd_Wdat(display[2]);// Ad_Da(1);// D[1]=(uchar)D[1]*4;// display[0]=D[1]/100+0x30;// display[1]=D[1]%100/10+0x30;// display[2]=D[1]%10+0x30;// Lcd_Set_xy(2,3);// Lcd_Wdat(display[0]);// Lcd_Set_xy(2,5);// Lcd_Wdat(display[1]);// Lcd_Wdat(display[2]); Ad_Da(2);// D[2]=(uchar)D[2]/0.92;// display[0]=D[2]/100+0x30;// display[1]=D[2]%100/10+0x30;// display[2]=D[2]%10+0x30;// Lcd_Set_xy(2,7);// Lcd_Wdat(display[0]);// Lcd_Wdat(display[1]);// Lcd_Set_xy(2,10);// Lcd_Wdat(display[2]);//// Ad_Da(3);// D[3]=(uchar)D[3]/0.92;// display[0]=D[3]/100+0x30;// display[1]=D[3]%100/10+0x30;// display[2]=D[3]%10+0x30;// Lcd_Set_xy(2,12);// Lcd_Wdat(display[0]);// Lcd_Wdat(display[1]);// Lcd_Set_xy(2,15);// Lcd_Wdat(display[2]); }}/////////////////////////////////////////////////////////////主函數(shù)頭文件#ifndef _MAIN_HEADER_#define_MAIN_HEADER_#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint//sfrWDT_CONTR=0XE1; //看門(mén)狗定時(shí)器控制存放器地址定義#endif////////////////////////////////////////////////////////////數(shù)模轉(zhuǎn)換函數(shù)#include"LCD1602.h"#include"PCF8951.h"#include"KEY.h"ucharAD_CHANNEL;ucharDA_NUM=100;uintD[5];/*******************************************************************DAC變換,轉(zhuǎn)化函數(shù)*******************************************************************/bitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal){Start_I2c();//啟動(dòng)總線SendByte(sla);//發(fā)送器件地址if(ack==0)return(0);SendByte(c);//發(fā)送控制字節(jié)if(ack==0)return(0);SendByte(Val);//發(fā)送DAC的數(shù)值if(ack==0)return(0);Stop_I2c();//結(jié)束總線return(1);}/*******************************************************************ADC發(fā)送字節(jié)[命令]數(shù)據(jù)函數(shù)*******************************************************************/bitISendByte(unsignedcharsla,unsignedcharc){Start_I2c();//啟動(dòng)總線SendByte(sla);//發(fā)送器件地址if(ack==0)return(0);SendByte(c);//發(fā)送數(shù)據(jù)if(ack==0)return(0);Stop_I2c();//結(jié)束總線return(1);}/*******************************************************************ADC讀字節(jié)數(shù)據(jù)函數(shù)*******************************************************************/unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//啟動(dòng)總線SendByte(sla+1);//發(fā)送器件地址if(ack==0)return(0);c=RcvByte();//讀取數(shù)據(jù)0Ack_I2c(1);//發(fā)送非就答位Stop_I2c();//結(jié)束總線return(c);}//******************************************************************/voidAd_Da(AD_CHANNEL){ switch(AD_CHANNEL) { case0:ISendByte(PCF8591,0x41); D[0]=IRcvByte(PCF8591);//ADC0模數(shù)轉(zhuǎn)換1 break; case1:ISendByte(PCF8591,0x42); D[1]=IRcvByte(PCF8591);//ADC1模數(shù)轉(zhuǎn)換2 break; case2:ISendByte(PCF8591,0x43); D[2]=IRcvByte(PCF8591);//ADC2 模數(shù)轉(zhuǎn)換3 break; case3:ISendByte(PCF8591,0x40); D[3]=IRcvByte(PCF8591);//ADC3模數(shù)轉(zhuǎn)換4 break; case4:DACconversion(PCF8591,0x40,DA_NUM);//DAC 數(shù)模轉(zhuǎn)換 break; }// if(++AD_CHANNEL>4)AD_CHANNEL=0;}////////////////////////////////////////////////////////////////////數(shù)模轉(zhuǎn)換頭文件#ifndef _PCF8951_#define_PCF8951_#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#definePCF85910x90//PCF8591地址#define_Nop()/*定義空指令*/sbitSCL=P2^0;//I2C時(shí)鐘sbitSDA=P2^1;//I2C數(shù)據(jù)externucharAD_CHANNEL;externucharDA_NUM;externuintD[5];externbitack;/*應(yīng)答標(biāo)志位*/externvoidStart_I2c(); //起動(dòng)總線函數(shù)externvoidStop_I2c(); //結(jié)束總線函數(shù)externvoidAck_I2c(bita); //應(yīng)答子函數(shù)externvoidSendByte(unsignedcharc); //字節(jié)數(shù)據(jù)發(fā)送函數(shù)externunsignedcharRcvByte(); //無(wú)子地址讀字節(jié)數(shù)據(jù)函數(shù)externbitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal);externbitISendByte(unsignedcharsla,unsignedcharc);externunsignedcharIRcvByte(unsignedcharsla);externvoidAd_Da(AD_CHANNEL);#endif////////////////////////////////////////////////////////////////////IIC函數(shù)#include"LCD1602.h"#include"PCF8951.h"#include"KEY.h"bitack;/*******************************************************************起動(dòng)總線函數(shù)函數(shù)原型:voidStart_I2c();功能:啟動(dòng)I2C總線,即發(fā)送I2C起始條件.********************************************************************/voidStart_I2c(){SDA=1;/*發(fā)送起始條件的數(shù)據(jù)信號(hào)*/_Nop();SCL=1;_Nop();/*起始條件建立時(shí)間大于4.7us,延時(shí)*/_Nop();_Nop();_Nop();_Nop();SDA=0;/*發(fā)送起始信號(hào)*/_Nop();/*起始條件鎖定時(shí)間大于4μs*/_Nop();_Nop();_Nop();_Nop();SCL=0;/*鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)*/_Nop();_Nop();}/*******************************************************************結(jié)束總線函數(shù)函數(shù)原型:voidStop_I2c();功能:結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件.********************************************************************/voidStop_I2c(){SDA=0;/*發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)*/_Nop();/*發(fā)送結(jié)束條件的時(shí)鐘信號(hào)*/SCL=1;/*結(jié)束條件建立時(shí)間大于4μs*/_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1;/*發(fā)送I2C總線結(jié)束信號(hào)*/_Nop();_Nop();_Nop();_Nop();}/*******************************************************************字節(jié)數(shù)據(jù)發(fā)送函數(shù)函數(shù)原型:voidSendByte(UCHARc);功能:將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對(duì)此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0)發(fā)送數(shù)據(jù)正常,ack=1;ack=0表示被控器無(wú)應(yīng)答或損壞。********************************************************************/voidSendByte(unsignedcharc){unsignedcharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt++)/*要傳送的數(shù)據(jù)長(zhǎng)度為8位*/{if((c<<BitCnt)&0x80)SDA=1;/*判斷發(fā)送位*/elseSDA=0;_Nop();SCL=1;/*置時(shí)鐘線為高,通知被控器開(kāi)始接收數(shù)據(jù)位*/_Nop();_Nop();/*保證時(shí)鐘高電平周期大于4μs*/_Nop();_Nop();_Nop();SCL=0;}_Nop();_Nop();SDA=1;/*8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位*/_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();if(SDA==1)ack=0;elseack=1;/*判斷是否接收到應(yīng)答信號(hào)*/SCL=0;_Nop();_Nop();}/*******************************************************************字節(jié)數(shù)據(jù)接收函數(shù)函數(shù)原型:UCHARRcvByte();功能:用來(lái)接收從器件傳來(lái)的數(shù)據(jù),并判斷總線錯(cuò)誤(不發(fā)應(yīng)答信號(hào)),發(fā)完后請(qǐng)用應(yīng)答函數(shù)應(yīng)答從機(jī)。********************************************************************/unsignedcharRcvByte(){unsignedcharretc;unsignedcharBitCnt;retc=0;SDA=1;/*置數(shù)據(jù)線為輸入方式*/for(BitCnt=0;BitCnt<8;BitCnt++){_Nop();SCL=0;/*置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/_Nop();_Nop();/*時(shí)鐘低電平周期大

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論