基于51單片機(jī)的數(shù)字電容測量儀_第1頁
基于51單片機(jī)的數(shù)字電容測量儀_第2頁
基于51單片機(jī)的數(shù)字電容測量儀_第3頁
基于51單片機(jī)的數(shù)字電容測量儀_第4頁
基于51單片機(jī)的數(shù)字電容測量儀_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

電子系統(tǒng)設(shè)計(jì)創(chuàng)新與實(shí)習(xí)報(bào)告設(shè)計(jì)課題基于單片機(jī)的電容測量儀設(shè)計(jì)學(xué)院信息科學(xué)與工程學(xué)生學(xué)號專業(yè)班級隊(duì)友指導(dǎo)教師設(shè)計(jì)時(shí)間本設(shè)計(jì)詳細(xì)介紹了一種基于單片機(jī)的數(shù)字式電容測量儀設(shè)計(jì)方案及實(shí)現(xiàn)方法。設(shè)計(jì)的主要方法是采用555芯片構(gòu)成單穩(wěn)態(tài)觸發(fā)器,將電容容量轉(zhuǎn)換為脈沖寬度。通過單片機(jī)的計(jì)時(shí)器測量脈寬,根據(jù)的R值,通過單片機(jī)的運(yùn)算功能,計(jì)算出電容容量,最后,再通過單片機(jī)的普通I/O口控制液晶屏顯示出電容容量的計(jì)算結(jié)果。系統(tǒng)的測量圍為10pF~500uF,具有多個(gè)量程,可根據(jù)用戶需要由用戶選擇,與用戶的交互是通過鍵盤實(shí)現(xiàn),不同量程的實(shí)現(xiàn)是通過單片機(jī)的I/O口控制繼電器的吸合與斷開來選擇不同的R值,從而實(shí)現(xiàn)不同的量程。同時(shí),本設(shè)計(jì)注重設(shè)計(jì)方法及流程,首先根據(jù)原理設(shè)計(jì)電路,再通過protues仿真,利用keil編程,進(jìn)而借助altiumdesigner制作PCB,最后到焊接元器件,調(diào)試直至成功。1系統(tǒng)方案設(shè)計(jì)1.1設(shè)計(jì)說明及要求1.1.1設(shè)計(jì)說明框圖中的外接電容是定時(shí)電路中的一局部。當(dāng)外接電容的容量不同時(shí),與定時(shí)電路所對應(yīng)的時(shí)間也有所不同,即C=f(t),而時(shí)間與脈沖數(shù)目成正比,脈沖數(shù)目可以通過計(jì)數(shù)譯碼獲得。1.1.2設(shè)計(jì)要求〔1〕根本要求①自制穩(wěn)壓電源。②被測電容的容量在10pF至10000μF圍③設(shè)計(jì)四個(gè)的測量量程。④顯示測量結(jié)果,測量誤差小于2.5%。數(shù)字顯示:顯示分辨率:每檔滿量程的0.1%;電容測量:電壓可選擇5V,25V,50V;為實(shí)現(xiàn)該設(shè)計(jì),到達(dá)相應(yīng)的設(shè)計(jì)要求,本次設(shè)計(jì)中考慮了三種設(shè)計(jì)方案,三種設(shè)計(jì)方案中主要區(qū)別在于硬件電路和軟件設(shè)計(jì)的不同,對于本設(shè)計(jì),三種方案均能夠?qū)崿F(xiàn),最后根據(jù)設(shè)計(jì)要求、可行性和設(shè)計(jì)本錢的考慮選擇了基于STC89C52單片機(jī)和555芯片構(gòu)成的單穩(wěn)態(tài)觸發(fā)電路測量電容的方案?,F(xiàn)在一一介紹論證如下。1.3方案Ⅱ根據(jù)積分電路原理可得C=Ui*dt/R*Uo,將經(jīng)過RC充電電路后,輸出的與電容對應(yīng)的電壓值輸入到ADC0809中,經(jīng)過處理后,將相應(yīng)的數(shù)值傳到單片機(jī)里,再通過公式運(yùn)算,求得相應(yīng)的電容C值,在LCD上顯示。圖1-2方案Ⅱ電容測量框圖1.5三種方案作簡單的比擬比擬上述三種方案可知,方案Ⅰ和ⅠⅠ采用了A/D轉(zhuǎn)換器,價(jià)格比擬昂貴;而且根據(jù)公式可知,再換算電壓與電容值時(shí),時(shí)間參數(shù)t起著至關(guān)重要的作用,對t的計(jì)算要準(zhǔn)確,不然誤差值會很大,所以調(diào)試起來有一定難度;方案Ⅲ電路簡單,原理清晰,易于實(shí)現(xiàn),易于控制,本設(shè)計(jì)就是基于方案Ⅲ展開的。2.2硬件電路設(shè)計(jì)單片機(jī)電路設(shè)計(jì)為使單片機(jī)正常工作,除電源供電局部外,還需提供晶振電路和復(fù)位電路。具體電路如下:圖2-3單片機(jī)工作電路由圖2-3可知,9腳外接的是按鍵復(fù)位電路,18,19腳外接的是晶振電路,這樣,就構(gòu)成了單片機(jī)正常工作的必備電路。同時(shí),為使P0口正常工作,并增加其帶負(fù)載能力,P0口需接了上拉電阻〔在圖中未畫出〕。555時(shí)鐘芯片與單片機(jī)連接圖2-4是555時(shí)鐘芯片構(gòu)成的單穩(wěn)態(tài)觸發(fā)電路,6腳和7腳接在一起,R2和C4構(gòu)成商店復(fù)位電路,2腳用于接收單片機(jī)P3.7口產(chǎn)生的低脈沖,3腳接于P3.2腳,用于門控制計(jì)時(shí)器0的啟動與停頓。從而將電容容量轉(zhuǎn)為脈沖寬度。圖2-4555芯片與單片機(jī)的連接低脈沖產(chǎn)生電路如圖2-5所示,按鍵接于P3.3口,即外部中斷1接口,因此低脈沖是利用中斷實(shí)現(xiàn)的,P3.7口產(chǎn)生低脈沖,可在軟件中的外部中斷1函數(shù)中實(shí)現(xiàn),整個(gè)過程為,需要測量時(shí),按鍵,產(chǎn)生外部中斷,利用外部中斷,用軟件再在P3.7口產(chǎn)生一個(gè)低脈沖,之所以利用中斷實(shí)現(xiàn)該功能,是為了增加產(chǎn)品的可靠性,因?yàn)榘存I的時(shí)間是比擬長的,直接用按鍵產(chǎn)生低脈沖可能導(dǎo)致T1>Tw,導(dǎo)致測量錯(cuò)誤。而利用中斷,可以直接在中斷函數(shù)中產(chǎn)生一個(gè)固定時(shí)間的低脈沖,保證了測量條件,防止發(fā)生錯(cuò)誤。圖2-5按鍵產(chǎn)生低脈沖電路鍵盤電路如圖2-6所示鍵盤電路主要用于與用戶進(jìn)展交互,如用戶需要選擇量程時(shí),就必須交互。鍵盤分為獨(dú)立鍵盤和矩陣鍵盤,這里只需要實(shí)現(xiàn)量程的選擇,共四個(gè)量程,故無需矩陣鍵盤,4個(gè)獨(dú)立按鍵就完全夠用了。圖2-6鍵盤電路指示燈電路如圖2-7所示,指示燈主要用于給用戶以提示,如當(dāng)前量程提示,超量程提示等等。D2用于超量程提示,D6用于電源提示。圖2-7指示燈電路量程選擇電路在圖2-4中可以看到,在RC充電回路中,R值是固定的,不可變的,則量程也顯然是不可變的,因此,需要在此參加可調(diào)節(jié)充電回路電阻的電路局部,這里,利用繼電器可以簡單實(shí)現(xiàn)。具體電路如圖2-8所示,利用繼電器時(shí)需特別注意,由于單片機(jī)輸出電流是很小的,缺乏以驅(qū)動繼電器吸合,因此要加驅(qū)動電路,在這里,選擇ULN2003芯片來實(shí)現(xiàn)。當(dāng)然,也可以利用典型的三極管驅(qū)動來實(shí)現(xiàn),雖然選擇的是芯片實(shí)現(xiàn)驅(qū)動,在這里也將典型的三極管驅(qū)動電路列于此。如圖2-9所示。圖2-8實(shí)現(xiàn)量程選擇電路圖2-9利用三極管的驅(qū)動電路液晶顯示電路如圖2-10所示,lcd接與P1口,用于顯示電容值以及一些相應(yīng)的測量信息。圖2-10lcd顯示電路至此,整個(gè)電容測量儀的硬件設(shè)計(jì)局部就設(shè)計(jì)好了,接下來,需要的就是與之相匹配的軟件支持了。2.3軟件設(shè)計(jì)軟件編程平臺選擇最常用的keil軟件。由于該程序并未涉及到底層的驅(qū)動問題,因此選擇方便快捷的C語言編程。在編程中,將該程序分為三個(gè)模塊:延時(shí)模塊,1602顯示模塊及主函數(shù)模塊。方便調(diào)試與理解。具體程序見附錄二??傮w程序較長,但并不復(fù)雜,可根據(jù)需要重點(diǎn)看主函數(shù),與硬件電路結(jié)合起來,注重程序后緊跟的注釋,理解起來是比擬容易的,在此就不再一一詳細(xì)分析。2.4量程圍設(shè)置由于量程的選擇是非常重要的一個(gè)環(huán)節(jié),在這里單獨(dú)討論量程的選擇。系統(tǒng)采用單片機(jī)片16位的定時(shí)器測量TW的寬度,標(biāo)準(zhǔn)計(jì)數(shù)脈沖的周期為1微秒時(shí),為確保計(jì)數(shù)器不發(fā)生溢出,要求TW<65毫秒。同時(shí),為減小量化誤差對結(jié)果的影響,要求TW>1微秒。當(dāng)TW>100微秒以上時(shí),可忽略量化誤差的影響。為滿足10pF~500uF的測量圍,可通過設(shè)置不同充電電阻R的阻值來實(shí)現(xiàn)。理論計(jì)算的電阻R阻值、理論量程圍以及系統(tǒng)選擇的量程圍如表2-1所示。系統(tǒng)分為四個(gè)量程,可測量10pF~500uF的電容。表2-1R值與量程圍的關(guān)系R值〔歐姆〕理論量程圍選擇的圍10M9pF~5.9nF10pF~5nF100K900pF~590nF5nF~500nF1K90nF~59uF0.5uF~50uF100900nF~590uFF50uF~500uF2.5altiumdesigner原理圖設(shè)計(jì)及PCB制作原理圖設(shè)計(jì)圖2-11原理圖設(shè)計(jì)PCB制作圖2-12PCB設(shè)計(jì)在此并沒有布雙層板,紅色的線僅僅只是為了標(biāo)志出跳線。設(shè)計(jì)結(jié)果圖2-13設(shè)計(jì)結(jié)果實(shí)物圖各個(gè)按鍵功能如圖中文字說明。3系統(tǒng)測試由于該作品需實(shí)現(xiàn)的功能僅為測電容,在此不列出其他的測試。3.1測量100pf的電容在此以100pf電容測試為例,演示整個(gè)測試過程。測試標(biāo)稱值為101的電容,即測量電容值為100pf的電容。104的電容實(shí)物如圖2-14所示。測試結(jié)果如圖2-15所示。假設(shè)量程選擇錯(cuò)誤,測試結(jié)果如圖2-16所示。圖2-14100nf的電容實(shí)物圖2-152nf電容正常測試圖2-16量程錯(cuò)誤情況下的測試3.2測量4.7uf的電容再以測試4.7uf電容為例,測試結(jié)果如圖2-18所示。圖2-18測試4.7uf的電容3.3測試結(jié)果將測量的一系列電容的電容值與標(biāo)準(zhǔn)值比擬。比擬結(jié)果如表3-1。表3-1測量值與標(biāo)準(zhǔn)值比擬標(biāo)準(zhǔn)值測量值誤差100pf99.10pf1%2nf2nf0%4.7uf4.70uf0%100uf100.66uf1%由表3-1中數(shù)據(jù)可知,平均誤差是0.5%,低于設(shè)計(jì)擴(kuò)展要求的2.5%,測量圍是10pf~500uf,根本滿足設(shè)計(jì)要求的10pf~10000uf。測量結(jié)果由液晶直觀顯示。綜合以上分析,該設(shè)計(jì)滿足整體設(shè)計(jì)要求。3.1誤差分析由于產(chǎn)生的0.5%左右的誤差,在這里簡要分析一下誤差產(chǎn)生的原因。電容測量的誤差主要由NE555定時(shí)器構(gòu)成的單穩(wěn)態(tài)觸發(fā)電路的非線性誤差T、計(jì)數(shù)器的量化誤差N和標(biāo)準(zhǔn)計(jì)數(shù)脈沖的頻率偏移TC產(chǎn)生[2][3]。因此有:系統(tǒng)采用的標(biāo)準(zhǔn)計(jì)數(shù)脈沖來自單片機(jī)核時(shí)鐘,由片外的高精度晶振與片電路自激振蕩產(chǎn)生,頻率非常穩(wěn)定,可以忽略其頻偏對測量結(jié)果的影響。量化誤差N是數(shù)字電路的特有誤差,最壞的情況下等于1。如采用12M的晶振,可獲得1MHz的標(biāo)準(zhǔn)計(jì)數(shù)脈沖,量化產(chǎn)生的最大誤差為1微秒。通過設(shè)置充電電阻R的阻值,使TW到達(dá)毫秒級時(shí),量化誤差的影響非常小,可以忽略。非線性誤差是由器件的非線性特性產(chǎn)生的,可通過硬件參數(shù)修正和軟件算法補(bǔ)償來減小。4結(jié)論與心得體會經(jīng)過本次歷經(jīng)4周的實(shí)習(xí),使得我又進(jìn)一步對單片機(jī)系統(tǒng),尤其測量電容的電路系統(tǒng)有了深一步認(rèn)識。在做前期準(zhǔn)備工作時(shí),教師不希望我們用555芯片做這個(gè)實(shí)驗(yàn),因?yàn)槿绻?55芯片震蕩電路來測量的話,雖然制作原理簡單,但測量值會很不穩(wěn)定,測圍也不夠廣??沙鲇趫?jiān)信化繁為簡的信念,在沒做過實(shí)物的情況下,我們還是硬著頭皮還是想驗(yàn)證下事實(shí)是不是如此〔如果不成功再改換方案〕。起初查閱了很多資料,比方伏安法中的自由軸法制作測量電容電路,LC震蕩側(cè)電容電路等,教師也推薦了方案二中的積分法測量電路,但因?yàn)樵谶M(jìn)展理論計(jì)算時(shí),因?yàn)榉e分測容法中C=Ui*dt/Uo*R,而我們無法準(zhǔn)確確定ADC在輸出口的傳輸時(shí)間〔哪怕是幾十us〕,所以有種無法掌控誤差的感覺,再加上出于本錢考慮,所以沒有首選這種方法。而對于利用555芯片單穩(wěn)態(tài)觸發(fā)這種法案的分析,我則很相信,這個(gè)電路是可以實(shí)現(xiàn)測量功能的,并且只要輸出穩(wěn)定,我就可以做相應(yīng)補(bǔ)償。在經(jīng)過一系列的仿真,實(shí)物制造和調(diào)整后,最初做出來的板子并不能運(yùn)行的,后面反復(fù)徹查后,才發(fā)現(xiàn)原來自己的設(shè)計(jì)出現(xiàn)了差漏,少連或錯(cuò)連了一些關(guān)鍵線路,于是又重新修整過。經(jīng)過修正后的電路中終于可以開場進(jìn)展測量了,起初的測量只有在nf檔和10uf以下檔位下,測量值是根本滿足要求的,而PF襠和100uf以上的檔位并不滿足已要求的,甚至不夠穩(wěn)定,所以我開場將擋位縮小,將10pf~10000uf的要求,縮減為100Pf~500uf,果然修正后的電路,測量穩(wěn)定了。再經(jīng)過軟件補(bǔ)償后,最終獲得了在精度上可以滿足要求的方案?!睵s:因?yàn)樽畛踉O(shè)計(jì)的時(shí)候只選擇了4個(gè)擋位,而手上電容最大才470uf,出于“最穩(wěn)定測量〞的考慮,所以才改的100pf~500uf擋位。即:本方案也可能可以測量500uf以上的電容,只要將其中的100歐姆電阻改小即可?!?參考文獻(xiàn)【1】"單片機(jī)根底"第三版廣弟朱月秀冷祖祁編著航天大學(xué),2007【2】"數(shù)字式電容測量儀設(shè)計(jì)"玉芹,洪遠(yuǎn)泉師學(xué)院學(xué)報(bào)(自然科學(xué)版)2011年6月第11卷第3期【3】梁艷霞,基于單片機(jī)控制的電容測試儀設(shè)計(jì),總裁,2009.【4】徐思成,一種基于單品啊及只能電容測試儀的設(shè)計(jì)與實(shí)現(xiàn),現(xiàn)代電子技術(shù),2010【5】春明,單片機(jī)使用技術(shù),:人民郵電,2008【6】何立民,單片機(jī)應(yīng)用程序設(shè)計(jì),:航空航天大學(xué)?!?】世良,吳凌燕,丁國臣,基于AT89C2051單片機(jī)的數(shù)字電容表設(shè)計(jì),2009【8】童詩白,華成英,模擬電子技術(shù)根底第三版,,高等教育,2007【9】熊筱芳,郭學(xué)提,根本89C51單片機(jī)的數(shù)字電容表設(shè)計(jì),自動化應(yīng)用技術(shù),2008【10】何光明,健宇,C語言程序設(shè)計(jì)與應(yīng)用開發(fā),:清華大學(xué),2006.6附錄附錄1元器件清單〔1〕晶振12M一個(gè)〔2〕stc89c52芯片一片〔3〕30pf2個(gè);10uf1個(gè);470uf1個(gè);0.33uf2個(gè);4.7uf1個(gè);1nf1個(gè)〔4〕40腳活動底座一個(gè)〔5〕lcd液晶一個(gè)〔6〕按鍵6個(gè)〔7〕發(fā)光二極管6個(gè)〔8〕9引腳排阻1個(gè)〔9〕680Ω6個(gè);10k1個(gè);1k2個(gè);1k滑動變阻器1個(gè);10M1個(gè);100k1個(gè);100Ω1個(gè);2k1個(gè);200Ω1個(gè);〔10〕開關(guān)1個(gè)〔11〕整流橋1個(gè)〔12〕7805穩(wěn)壓芯片1片〔13〕繼電器3個(gè)〔14〕ULN20031片〔10〕排針假設(shè)干,杜邦線假設(shè)干附錄2程序清單分5個(gè)文件:delay.h,delay.c,1602.c,1602.h,main.c(a)delay.h程序清單:*ifndef__delay_h__*define__delay_h__*defineucharunsignedchar*defineuintunsignedintvoiddelay_us(uintt);voiddelay_ms(uintt);*endif(b)delay.c程序清單:*include"delay.h"voiddelay_us(uintt){ uchari; for(;t>0;t--) { for(i=0;i<12;i++) { ; } }}voiddelay_ms(uintt){ uchari; for(;t>0;t--) { for(i=0;i<125;i++) { ; } }}(c)1602.h程序清單:*ifndef__1602_h__*define__1602_h__*include<reg52.h>sbitRS=P2^2;//定義端口sbitRW=P2^1;sbitEN=P2^0;*defineRS_CLRRS=0*defineRS_SETRS=1*defineRW_CLRRW=0*defineRW_SETRW=1*defineEN_CLREN=0*defineEN_SETEN=1unsignedcharpro_data(unsignedcharmda);voidLCD_write_(unsignedchar);voidLCD_write_Data(unsignedcharData);voidLCD_init(void);voidlcd_pos(unsignedcharpos);voiddisp(unsignedchar*p);voiddispchar1(unsignedchar*p);voiddispchar2(unsignedchar*p);voiddispchar3(unsignedchar*p);*endif(d)1602.c程序清單:*include"1602.h"*include"delay.h"voidLCD_write_(unsignedchar){ RS_CLR; RW_CLR; EN_SET; =pro_data(); P1=; delay_us(5); EN_CLR;}voidLCD_write_Data(unsignedcharData){ RS_SET; RW_CLR; EN_SET; Data=pro_data(Data); P1=Data; delay_us(5); EN_CLR;}voidLCD_init(void){LCD_write_(0*38);//顯示模式設(shè)置delay_ms(5);LCD_write_(0*38);delay_ms(5);LCD_write_(0*38);delay_ms(5);LCD_write_(0*38);LCD_write_(0*08);//顯示關(guān)閉LCD_write_(0*01);//顯示清屏LCD_write_(0*06);//顯示光標(biāo)移動設(shè)置delay_ms(5);LCD_write_(0*0c);//顯示開及光標(biāo)設(shè)置}voidlcd_pos(unsignedcharpos){ LCD_write_(0*80|pos);}voiddisp(unsignedchar*p) //第二行顯示數(shù)據(jù){ unsignedchari; lcd_pos(0*43); for(i=0;i<6;i++){ if(4==i) { LCD_write_Data(0*2e); } LCD_write_Data('0'+(*p)); p++; }}voiddispchar1(unsignedchar*p) //第一行顯示需要顯示的提示字符串{ lcd_pos(0*00); while(*p!='\0') { LCD_write_Data(*p); p++; } lcd_pos(0*4c); LCD_write_Data('f'); }voiddispchar2(unsignedchar*p) //第二行顯示需要顯示的提示字符串{ lcd_pos(0*40); while(*p!='\0') { LCD_write_Data(*p); p++; } }voiddispchar3(unsignedchar*p) //第一行顯示第二行清空{(diào) unsignedchari; lcd_pos(0*00); while(*p!='\0') { LCD_write_Data(*p); p++; } lcd_pos(0*40); for(i=0;i<16;i++) { LCD_write_Data(''); } }unsignedcharpro_data(unsignedcharmda) //數(shù)據(jù)處理函數(shù),將高位和低位互換{ unsignedcharenddat; unsignedchari; enddat=0; for(i=0;i<8;i++) { enddat=enddat<<1; if(mda&0*01==1) { enddat=enddat|0*01; } else { enddat=enddat|0*00; } mda=mda>>1; } returnenddat;}(e)main.c程序清單:*include<reg52.h>*include"1602.h"*include"delay.h"sbitvo=P3^2; //用于檢測P3.2口的值,計(jì)算時(shí)間。計(jì)時(shí)器0的開與斷sbittr=P3^7; //產(chǎn)生一個(gè)低電平脈沖 //超量程提示燈sbitledclc=P2^7;sbitcon1=P0^0;//用于控制繼電器,實(shí)現(xiàn)檔位選擇sbitcon2=P0^1; sbitcon3=P0^2; sbitkey1=P0^3; //獨(dú)立按鍵局部,用于用戶選擇量程sbitkey2=P0^4;sbitkey3=P0^5;sbitkey4=P0^6;sbitled1=P2^3; //量程提示燈sbitled2=P2^4;sbitled3=P2^5;sbitled4=P2^6;unsignedinttw;//用于獲取定時(shí)器的數(shù)值floatftemp; //用于計(jì)算電容值的中間變量unsignedlongintc; //存放電容值unsignedcharneed; //需要測量時(shí)置1,一次測量完畢置0unsignedcharR;//表示不同的檔位unsignedcharflag; //數(shù)據(jù)處理完畢置1unsignedchartemp[8];//存放電容值的各個(gè)位 unsignedcharzimu1[]="rangeishigher"; //量程太高unsignedcharzimu2[]="ThevalueofCap";unsignedcharzimu3[]="pleasepresskey";unsignedcharzimu4[]="tomeasure";unsignedcharzimu5[]="rangeislower"; voidprocess(unsignedlongintc); //數(shù)據(jù)處理函數(shù)voidkeyscan(); //鍵盤掃描函數(shù)voidledlight(unsignedcharR); // 量程指示燈函數(shù)voidinit_timer0() //定時(shí)器0初始化{ TMOD=0*09; //gate置1,方式1,16位計(jì)時(shí),定時(shí)器由P3.2控制開斷 TH0=0*00; TL0=0*00; EA=1; ET0=1; TR0=1;}voidinit_INT1() //定時(shí)器0初始化{ EA=1; IT1=1;//下降沿觸發(fā) E*1=1;} voidmain(){ ledclc=1; //超量程提示燈熄滅 need=0; //一開場無需測量con1=con2=con3=0; flag=0; init_timer0(); //初始化 init_INT1(); LCD_init(); dispchar1(zimu3); dispchar2(zimu4); while(1) { if(need==1) { //當(dāng)需要測量時(shí) if(vo==0)//vo==0時(shí)檢測計(jì)數(shù)器的值可能還沒開場計(jì)數(shù),可能計(jì)數(shù)完畢 { if(TH0!=0*00||TL0!=0*00)//是計(jì)數(shù)完畢假設(shè)有讀數(shù),用tw存下 { tw=TH0<<8; tw=tw|TL0; TH0=0*00; //一次完畢,計(jì)時(shí)器清零 TL0=0*00;need=0;//需要再次測量時(shí),need置1.防止tw的值被更//改即不需要測量時(shí),一直保持 E*1=1; //開外部中斷1 } else //反之,證明沒有計(jì)數(shù),無電容,默認(rèn)值tw置0 { tw=0; } } ftemp=tw/1.1;//計(jì)算電容值根據(jù)公式tw=1.1*R*C c=(unsignedlongint)(ftemp)*100;//擴(kuò)大了一百倍便于后續(xù)程序//取兩位小數(shù)點(diǎn) process(c); //調(diào)用數(shù)據(jù)處理函數(shù),根據(jù)不同的R值進(jìn)展處理 } if(flag==1)//數(shù)據(jù)處理完畢每次處理完畢,證明需要更新顯示的數(shù)據(jù) { if(tw>=50000||ledclc==0) //量程超出 { dispchar3(zimu1);//量程太高 ledclc=0; } elseif(tw<=100&&ledclc==1) //量程太低 { dispchar3(zimu5); ledclc=0; } else { dispchar1(zimu2); disp(temp); } flag=0; } keyscan(); }}voidtimer0()interrupt1 //定時(shí)器0中斷用于超量程提示{ ledclc=0;}voide*int1 ()interrupt2 //外部中斷0用于產(chǎn)生低脈沖,啟動555定時(shí)器{ unsignedchara; tr=1; //tr端一個(gè)負(fù)脈沖 a=1; while(--a); tr=0; a=20; while(--a); tr=1; //tr端負(fù)脈沖完畢 大約40us的負(fù)脈沖 need=1; //表示需要測量 ledclc=1; //關(guān)閉先前的超量程提示 E*1=0; //暫時(shí)關(guān)閉外部中斷,一次測量完畢,再開放外部中斷}voidprocess(unsignedlongintc){ if(R==1) //10M 的電阻 量程10pf~5000pf { c=c/10; lcd_pos(0*4a); LCD_write_Data(''); LCD_write_Data('p'); LCD_write_Data('f'); LCD_write_Data(''); LCD_write_Data(''); } if(R==2) //100k的電阻 量程5nf~500nf { c=c/100; lcd_pos(0*4a); LCD_write_Data(''); LCD_write_Data('n'); LCD_write_Data('f'); LCD_write_Data(''); LCD_write_Data(''); } if(R==3) //1k歐姆的電阻 量程0.5uf~50uf { c=c/1000; //擴(kuò)大了一百倍單位c=tw/500uf lcd_pos(0*4a); LCD_write_Data(''); LCD_write_Data('u'); LCD_write_Data('f'); LCD_write_Data(''); LCD_write_Data(''); } if(R==4) //100歐姆的電阻 量程50uf~500uf { c=c/100; //擴(kuò)大了一百倍單位c=tw/500uf lcd_pos(0*4a); LCD_write_Data(''); LCD_write_Data('u'); LCD_write_Data('f'); LCD_write_Data(''); LCD_write_Data(''); } temp[0]=c/100000; //千位 temp[1]=c/10000%10; //百位 temp[2]=c/1000%10; //十位 temp[3]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論