簡(jiǎn)易頻率計(jì)數(shù)器_第1頁
簡(jiǎn)易頻率計(jì)數(shù)器_第2頁
簡(jiǎn)易頻率計(jì)數(shù)器_第3頁
簡(jiǎn)易頻率計(jì)數(shù)器_第4頁
簡(jiǎn)易頻率計(jì)數(shù)器_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

摘要在當(dāng)代電子設(shè)備中運(yùn)用中,經(jīng)常要測(cè)量一個(gè)波形的頻率,然后對(duì)其進(jìn)行分析研究。為了測(cè)量頻率,就要用到頻率計(jì)。在傳統(tǒng)的電子測(cè)量儀器中,示波器在進(jìn)行頻率測(cè)量時(shí)測(cè)量精度較低,誤差較大。但是頻率計(jì)能夠快速準(zhǔn)確的捕捉到被測(cè)信號(hào)頻率變化,因此,頻率計(jì)擁有非常廣泛的應(yīng)用范圍。本次課程設(shè)計(jì)總結(jié)和回顧了所學(xué)的單片機(jī)的相關(guān)知識(shí),運(yùn)用了C51芯片的相關(guān)功能和編程的知識(shí)。簡(jiǎn)易頻率計(jì)數(shù)器系統(tǒng)包括串口下載、復(fù)位電路,外部計(jì)數(shù)器T0或T1作為外部頻率輸入,信號(hào)源提供外部頻率,四位數(shù)碼管顯示結(jié)果等6部分。關(guān)鍵詞:C51芯片,C語言編程,Proteus軟件,keil軟件

一、設(shè)計(jì)題目與要求1.1設(shè)計(jì)題目簡(jiǎn)易頻率計(jì)數(shù)器1.2設(shè)計(jì)要求:自制一個(gè)單片機(jī)最小系統(tǒng),包括串口下載、復(fù)位電路,采用外部計(jì)數(shù)器T0或T1作為外部頻率輸入,外部頻率由信號(hào)源提供,測(cè)量出來的頻率顯示在四位一體的數(shù)碼管上。二、系統(tǒng)方案設(shè)計(jì)2.1功能需求 要求所設(shè)計(jì)電路能夠進(jìn)行串口下載、手動(dòng)復(fù)位、測(cè)量外接信號(hào)源的頻率,并且測(cè)量出的頻率能在四位一體數(shù)碼管上顯示出來。2.2設(shè)計(jì)流程實(shí)驗(yàn)過程首先用Proteus軟件進(jìn)行電路設(shè)計(jì)和仿真,利用keil軟件進(jìn)行編程并檢查程序,然后根據(jù)仿真電路布局把元件焊接在電路板上,并進(jìn)行通電測(cè)試,最終到一個(gè)滿足設(shè)計(jì)要求的簡(jiǎn)易頻率計(jì)數(shù)器。(1)根據(jù)設(shè)計(jì)要求和已知條件,確定頻率計(jì)數(shù)器電路方案,計(jì)算和選取單元電路的原件參數(shù),確定系統(tǒng)總體方案的設(shè)計(jì),畫出系統(tǒng)框圖;(2)單元電路設(shè)計(jì)、參數(shù)計(jì)算和器件的選擇;(3)應(yīng)用Proteus軟件進(jìn)行仿真,并分析系統(tǒng)性能;(4)應(yīng)用Keil軟件進(jìn)行編程,并檢查程序與仿真相匹配;(5)系統(tǒng)的硬件設(shè)計(jì)及制作;(6)硬件調(diào)試及分析:利用函數(shù)信號(hào)發(fā)生器,萬用表等實(shí)驗(yàn)室現(xiàn)有工具檢查復(fù)位電路,外接晶振電路以及主干電路的各項(xiàng)技術(shù)指標(biāo),并與設(shè)計(jì)要求值進(jìn)行比較,若有不同則仔細(xì)分析調(diào)試至出現(xiàn)預(yù)期實(shí)驗(yàn)結(jié)果;(7)按要求按時(shí)撰寫設(shè)計(jì)報(bào)告。2.3資料查詢與硬件選型89C51是一種高性能低功耗的采用CMOS工藝制造的8位微控制器,它提供下列標(biāo)準(zhǔn)特征:4K字節(jié)的程序存儲(chǔ)器,128字節(jié)的RAM,32條I/O線,2個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)5中斷源兩個(gè)優(yōu)先級(jí)的中斷結(jié)構(gòu),一個(gè)雙工的串行口,片上震蕩器和時(shí)鐘電路。單片機(jī)各引腳功能及引腳圖單片機(jī)各引腳功能VCC/GND:供電電源。P0口(P0.0-P0.7):可以被定義為數(shù)據(jù)/地址的低八位,能夠用于外部程序/數(shù)據(jù)存儲(chǔ)器。在FIASH編程時(shí),P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。P1口(P1.0-1.7):標(biāo)準(zhǔn)輸入輸出I/O,P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。P2口(P2.0-P2.7):既可用于標(biāo)準(zhǔn)輸入輸出I/O,也可用于外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器訪問時(shí)的高八位地址。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。P3口(P3.0-P3.7):既可以作標(biāo)準(zhǔn)輸入輸出I/O,也可作為AT89C51的一些特殊功能口。P3口管腳備選功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(定/計(jì)時(shí)器0外部輸入)P3.5T1定/計(jì)時(shí)器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7/RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)RST/VPD(9腳):復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。ALE/PROG(30腳):當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。/PSEN(29腳):外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。/EA/VPP(31腳):當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1(19腳):反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。XTAL2(18腳):來自反向振蕩器的輸出。(2)單片機(jī)引腳圖如圖2-1所示圖2-SEQ圖2_-\*ARABIC1單片機(jī)引腳圖四位一體數(shù)碼管各引腳介紹及引腳圖(1)數(shù)碼管結(jié)構(gòu)各引腳介紹數(shù)碼管動(dòng)態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一。a,b,c,d,e,f,g,dp引腳為段選引腳,分別控制數(shù)碼管8個(gè)顯示筆畫及小數(shù)點(diǎn),顯示動(dòng)態(tài)驅(qū)動(dòng)將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,1,2,3,4引腳分別表示四個(gè)數(shù)碼管的位選引腳,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,即1、2、3、4引腳控制。(2)數(shù)碼管引腳圖如圖2-2所示圖2-SEQ圖2_-\*ARABIC2數(shù)碼管引腳圖3.硬件選型本次課程設(shè)計(jì)所用單片機(jī)型號(hào)為AT89C51RD,四位一體數(shù)碼管為共陰極型。2.4器件說明本課程設(shè)計(jì)所需器件有:89C51RD芯片(與89C51芯片管腳和指令共用,只是內(nèi)部存儲(chǔ)單元有差異)1個(gè),12MHz晶振1個(gè),10uF電容1個(gè),20pF電容2個(gè),10kΩ電阻2個(gè),排阻1個(gè),四位一體共陰極數(shù)碼顯示管1個(gè),按鈕1個(gè),導(dǎo)線若干。三、系統(tǒng)原理圖設(shè)計(jì)與仿真簡(jiǎn)易頻率計(jì)數(shù)器系統(tǒng)設(shè)計(jì)主要分為四個(gè)部分,分別是外接晶體振蕩電路、復(fù)位電路、四位一體數(shù)碼管電路、信號(hào)源電路。外接晶體振蕩電路,形成反饋電路,構(gòu)成一個(gè)穩(wěn)定的自激振蕩器,位單片機(jī)提供時(shí)鐘信號(hào);復(fù)位電路,用于重置計(jì)數(shù)器;四位一體數(shù)碼管,用于顯示頻率計(jì)數(shù)結(jié)果;外接信號(hào)源,提供待測(cè)信號(hào)源。這四部分電路都要與51單片機(jī)相連接,以下將從各部分電路進(jìn)行分析設(shè)計(jì)。3.1外接晶體振蕩電路單片機(jī)的時(shí)鐘產(chǎn)生方法有兩種,一種是外部時(shí)鐘方式,一種是內(nèi)部時(shí)鐘方式,本方案設(shè)計(jì)采用內(nèi)部時(shí)鐘電路方式。MCS-51片內(nèi)有一個(gè)高增益反相放大器,XTAL1、XTAL2引腳分別為該反相放大器的輸入端和輸出端,在芯片的外部通過這兩個(gè)引腳跨接石英晶體振蕩器和微調(diào)電容,形成反饋電路,就構(gòu)成了一個(gè)穩(wěn)定的自激振蕩器。本次課程設(shè)計(jì)需在高速串行通信下實(shí)現(xiàn),故選用12MHz的晶振。振蕩電路產(chǎn)生的信號(hào)經(jīng)過十二分頻后才作為系統(tǒng)內(nèi)部時(shí)鐘信號(hào),即12MHz的晶振得到的內(nèi)部機(jī)器周期為1us。微調(diào)電容C1和C2電容值均選用33pF,幫助晶振起振,這樣可擁有較高的頻率穩(wěn)定性。外接晶振電路圖設(shè)計(jì)如圖3-1。圖3-SEQ圖3_-\*ARABIC1外接晶體振蕩電路3.2復(fù)位電路單片機(jī)復(fù)位電路的設(shè)計(jì)需要用到RST引腳(引腳9)。外部電路在復(fù)位引腳RAT端產(chǎn)生大于兩個(gè)機(jī)器周期的高電平信號(hào),就可進(jìn)行復(fù)位操作。MCS-51單片機(jī)的復(fù)位方式有很多種,這里采用上電復(fù)位+手動(dòng)復(fù)位的方式。復(fù)位電路如圖3-2所示。在單片機(jī)啟動(dòng)0.1S后,電容C兩端的電壓持續(xù)充電為5V,這是時(shí)候10K電阻兩端的電壓接近于0V,RST處于低電平所以系統(tǒng)正常工作。當(dāng)按鍵按下的時(shí)候,開關(guān)導(dǎo)通,這個(gè)時(shí)候電容兩端形成了一個(gè)回路,電容被短路,所以在按鍵按下的這個(gè)過程中,電容開始釋放之前充的電量。隨著時(shí)間的推移,電容的電壓在0.1S內(nèi),從5V釋放到變?yōu)榱?.5V,甚至更小。根據(jù)串聯(lián)電路電壓為各處之和,這個(gè)時(shí)候10K電阻兩端的電壓為3.5V,甚至更大,所以RST引腳又接收到高電平,單片機(jī)系統(tǒng)自動(dòng)復(fù)位。本電路電容選為10uF,電阻選為1kΩ,實(shí)際電路時(shí)選擇阻值更大的阻值,如10k歐姆,可更有效的限制電流。圖3-SEQ圖3_-\*ARABIC2復(fù)位電路3.3數(shù)碼管電路四位一體共陰極數(shù)碼管用于顯示頻率計(jì)數(shù)結(jié)果。A,B,C,D,E,F,G引腳與普通七段數(shù)碼管的作用相同,dp為小數(shù)點(diǎn)控制,在這次課程設(shè)計(jì)中不需要用到,1234為四位位選控制端,分別控制個(gè)位、十位、百位、千位。實(shí)際情況下四位數(shù)碼是按順序輪流點(diǎn)亮的,在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,所以從表面看起來是同時(shí)點(diǎn)亮。數(shù)碼管電路如圖3-3所示。本次電路設(shè)計(jì)中,用單片機(jī)的P0口控制數(shù)碼管的片選端,P2口的低四位控制數(shù)碼管的位選端。當(dāng)P0口作一般I/O口使用時(shí),由于輸出驅(qū)動(dòng)電路工作于漏極開路狀態(tài),因此,仿真和焊接過程中P0口都需接上拉電阻,即排阻RP1,其作用是穩(wěn)定高電平。排阻第一位需要外接+5V電源。圖3-SEQ圖3_-\*ARABIC3數(shù)碼管電路3.4外接信號(hào)電路外接信號(hào)電路如圖3-4所示。本次課程設(shè)計(jì)中,設(shè)定定時(shí)器0工作在定時(shí)方式,定時(shí)/計(jì)數(shù)器1工作在計(jì)數(shù)方式,因此P3.5口作為外部脈沖輸入端。在實(shí)際過程中外部信號(hào)脈沖由函數(shù)信號(hào)發(fā)生器提供。圖3-SEQ圖3_-\*ARABIC4外接信號(hào)電路3.5系統(tǒng)仿真結(jié)果1.外部輸入信號(hào)為1kHz時(shí),仿真結(jié)果如圖3-5所示。接通電源,計(jì)數(shù)頻率顯示為0000,然后跳變?yōu)?000,隨后在1000附近跳動(dòng)。圖3-SEQ圖3_-\*ARABIC5外部信號(hào)為1kHz2.外部輸入信號(hào)為500Hz時(shí),當(dāng)電路正常運(yùn)行時(shí),按下復(fù)位按鈕,仿真結(jié)果如圖3-6所示。可見,此時(shí)電路正常復(fù)位。圖3-SEQ圖3_-\*ARABIC6按下復(fù)位按鈕3.6仿真結(jié)果分析在仿真中發(fā)現(xiàn),無論外部信號(hào)頻率為多大,接通電源時(shí),數(shù)碼管顯示均為0000,與按下復(fù)位按鈕時(shí)的現(xiàn)象一致,即當(dāng)電路接通時(shí),就會(huì)復(fù)位;當(dāng)外部信號(hào)頻率改變時(shí),數(shù)碼管顯示數(shù)據(jù)與相應(yīng)的外接信號(hào)頻率基本一致,說明本次仿真成功。分析電路在開機(jī)時(shí)候復(fù)位的原因如下:在電路圖中,電容的的大小是10uf,電阻的大小是1k。所以根據(jù)公式,可以算出電容充電到電源電壓的0.7倍(單片機(jī)的電源是5V,所以充電到0.7倍即為3.5V),需要的時(shí)間是1K*10UF=0.01S。也就是說在電腦啟動(dòng)的0.01S內(nèi),電容兩端的電壓時(shí)在0~3.5V增加。這個(gè)時(shí)候1K電阻兩端的電壓為從5~1.5V減少(串聯(lián)電路各處電壓之和為總電壓)。所以在0.01S內(nèi),RST引腳所接收到的電壓是5V~1.5V。在5V正常工作的51單片機(jī)中小于1.5V的電壓信號(hào)為低電平信號(hào),而大于1.5V的電壓信號(hào)為高電平信號(hào)。所以在開機(jī)0.01S內(nèi),單片機(jī)系統(tǒng)自動(dòng)復(fù)位。四、程序設(shè)計(jì)4.1程序流程圖開始開始初始化初始化T0計(jì)時(shí),T1計(jì)數(shù)T1計(jì)數(shù)T0定時(shí)滿1T1計(jì)數(shù)T0定時(shí)滿1sT1Count++T1Count++計(jì)算脈沖個(gè)數(shù)送數(shù)碼管顯示送數(shù)碼管顯示圖4-SEQ圖4_-\*ARABIC1程序流程圖4.2程序說明1.程序預(yù)處理,申明頭文件,定義相關(guān)變量#include<reg51.h> bitint_flag;unsignedcharvolatileT0Count;unsignedcharvolatileT1Count;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管顯示段碼值為0、1、2、3、4、5、6、7、8、9unsignedcharcodetemp[]={0xf7,0xfb,0xfd,0xfe};//數(shù)碼管選通1234左到右unsignedlongsum;//1s內(nèi)脈沖的個(gè)數(shù)unsignedcharLed[4];//LED顯示緩存2.子函數(shù)聲明(1)延時(shí)程序,在程序開始前生命延時(shí)程序,以便主函數(shù)調(diào)用voiddelay(unsignedintnum){ while(--num);}//延時(shí)程序(2)init函數(shù)聲明,該函數(shù)用于定時(shí)器、計(jì)數(shù)器置初值。TMOD寄存器是工作方式控制寄存器,用于設(shè)定兩個(gè)定時(shí)/計(jì)數(shù)器的工作方式。各位定義如圖4-2所示。圖4-SEQ圖4_-\*ARABIC2GATE——門控制:GATE=1時(shí),由外中斷請(qǐng)求信號(hào)和TR的組合狀態(tài)啟動(dòng)定時(shí)器;GATE=0時(shí),由運(yùn)行控制位TR啟動(dòng)。C/T——計(jì)數(shù)或定時(shí)選擇位:C/T=1時(shí)為計(jì)數(shù)工作方式;C/T=0時(shí)為定時(shí)工作方式。M0、M1——工作方式選擇位:M0M1=00,為工作方式0,13位定時(shí)器/計(jì)數(shù)器工作方式;M0M1=01,為工作方式1,16位定時(shí)器/計(jì)數(shù)器工作方式;M0M1=10,為工作方式2,常數(shù)自動(dòng)裝入的8位定時(shí)器/計(jì)數(shù)器工作方式;M0M1=11,為工作方式3,兩個(gè)8位定時(shí)器/計(jì)數(shù)器工作方式(僅適用于T0,此工作方式下T1停止計(jì)數(shù))。本程序中將其設(shè)置為0x51,轉(zhuǎn)化為二進(jìn)制為01010001,對(duì)照TMOD寄存器的位符號(hào),可知,對(duì)定時(shí)器/計(jì)數(shù)器0,設(shè)置為由運(yùn)行控制位TR啟動(dòng),并開啟定時(shí)工作方式,工作于工作方式2,16位定時(shí)器工作方式。而對(duì)定時(shí)器/計(jì)數(shù)器1,設(shè)置為由運(yùn)行控制位TR啟動(dòng),并開啟計(jì)數(shù)工作方式,工作于方式1,16位計(jì)數(shù)器工作方式。同時(shí)給定時(shí)器0、計(jì)數(shù)器1置初值。程序如下:

voidinit(void){ TMOD=0x51;//T0定時(shí),T1計(jì)數(shù) TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0x00; TL1=0x00;//置定時(shí)器、計(jì)數(shù)器初始值,周期為50ms}(3)disp函數(shù),用于控制數(shù)碼管的顯示利用for循環(huán)依次將四位數(shù)碼管位選端按個(gè)位、十位、百位、千位依次接通,并在每次接通的同時(shí),將字符數(shù)組Led[]的儲(chǔ)存內(nèi)容賦值給P2端口,同時(shí)延時(shí)1ms。程序如下:voiddisp(void){ unsignedchari; for(i=0;i<4;i++) { P2=temp[i];//片選 P0=table[Led[i]];//取數(shù)據(jù)顯示 delay(100);//延時(shí)1毫秒 }主函數(shù)Main函數(shù)是程序的入口,開啟中斷控制總控制和所需的定時(shí)器、計(jì)數(shù)器。利用while循環(huán)將脈沖數(shù)的千位、百位、十位、個(gè)位分離并分別儲(chǔ)存在已定義的字符數(shù)組Led[4]中,同時(shí)準(zhǔn)備開啟下一秒的計(jì)數(shù)工作。其中TCON寄存器既參與中斷控制,又參與定時(shí)控制。如圖4-2為各位定義。圖4-SEQ圖4_-\*ARABIC3TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)定時(shí)器1計(jì)滿溢出時(shí),由硬件使TF1置“1”,并且申請(qǐng)中斷。進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清“0”,在查詢方式下用軟件清“0”。TR1:定時(shí)器1運(yùn)行控制位。由軟件清“0”關(guān)閉定時(shí)器1。當(dāng)GATE=1,且/INT1為高電平時(shí),TR1置“1”啟動(dòng)定時(shí)器1;當(dāng)GATE=0,TR1置“1”啟動(dòng)定時(shí)器1。TF0:定時(shí)器0溢出標(biāo)志。其功能及操作情況同TF1。TR0:定時(shí)器0運(yùn)行控制位。其功能及操作情況同TR1。IE1:外部中斷1請(qǐng)求標(biāo)志位。IT1:外部中斷1觸發(fā)方式選擇位。當(dāng)IT1=0,為低電平觸發(fā)方式;當(dāng)IT1=1,為下降沿觸發(fā)方式。IE0:外部中斷0請(qǐng)求標(biāo)志位。IT0:外部中斷0觸發(fā)方式選擇位。當(dāng)IT0=0,為低電平觸發(fā)方式;當(dāng)IT0=1,為下降沿觸發(fā)方式。程序如下:voidmain(void){ EA=1;//CPU關(guān)中斷 init();//初始化定時(shí)器 TR0=1;//啟動(dòng)定時(shí)器0 TR1=1;//啟動(dòng)計(jì)數(shù)器1 ET0=1;//定時(shí)器0開中斷 ET1=1;//計(jì)數(shù)器1開中斷 while(1) { if(int_flag==1) { int_flag=0; sum=TL1+TH1*256+T1Count*65536;//計(jì)算1s脈沖個(gè)數(shù) 位數(shù)由低到高TL<TH<T1Count Led[3]=sum%10000/1000;//顯示千位 Led[2]=sum%1000/100;//顯示百位 Led[1]=sum%100/10;//顯示十位 Led[0]=sum%10;//顯示個(gè)位 T0Count=0x00; T1Count=0; TH1=0x00; TL1=0x00; TR1=1; } disp(); }}中斷程序(1)定時(shí)器0中斷,設(shè)置定時(shí)器T0初始值,周期為50ms,當(dāng)T0Count為20時(shí),即20×50ms=1秒時(shí),計(jì)數(shù)器T1停止計(jì)數(shù),且T0清零。voidint_t0(void)interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; T0Count++; if(T0Count==20) { TR1=0;//計(jì)數(shù)器1停止工作 int_flag=1; T0Count=0x00; }}(2)計(jì)數(shù)器1中斷,T1Count是TH1的進(jìn)位,在計(jì)數(shù)時(shí)T1的高低八位均在變化,每滿65536,向T1Count進(jìn)一,則由式子sum=TL1+TH1*256+T1Count*65536可計(jì)算出一秒內(nèi)脈沖個(gè)數(shù)。程序如下:voidint_T1(void)interrupt3{ T1Count++;}4.3程序設(shè)計(jì)如下:#include<reg51.h> bitint_flag;unsignedcharvolatileT0Count;unsignedcharvolatileT1Count;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管顯示段碼值為0、1、2、3、4、5、6、7、8、9unsignedcharcodetemp[]={0xf7,0xfb,0xfd,0xfe};//數(shù)碼管選通1234左到右unsignedlongsum;//1s內(nèi)脈沖的個(gè)數(shù)unsignedcharLed[4];//LED顯示緩存voiddelay(unsignedintnum){ while(--num);}//延時(shí)程序voidinit(void){ TMOD=0x51;//T0定時(shí),T1計(jì)數(shù) TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0x00; TL1=0x00;//置定時(shí)器、計(jì)數(shù)器初始值,周期為50ms}voiddisp(void){ unsignedchari; for(i=0;i<4;i++) { P2=temp[i];//片選 P0=table[Led[i]];//取數(shù)據(jù)顯示 delay(100);//延時(shí)1毫秒 }}voidmain(void){ EA=1;//CPU關(guān)中斷 init();//初始化定時(shí)器 TR0=1;//啟動(dòng)定時(shí)器0 TR1=1;//啟動(dòng)計(jì)數(shù)器1 ET0=1;//定時(shí)器0開中斷 ET1=1;//計(jì)數(shù)器1開中斷 while(1) { if(int_flag==1) { int_flag=0; sum=TL1+TH1*256+T1Count*65536;//計(jì)算1s脈沖個(gè)數(shù) 位數(shù)由低到高TL<TH<T1Count Led[3]=sum%10000/1000;//顯示千位 Led[2]=sum%1000/100;//顯示百位 Led[1]=sum%100/10;//顯示十位 Led[0]=sum%10;//顯示個(gè)位 T0Count=0x00; T1Count=0; TH1=0x00; TL1=0x00; TR1=1; } disp(); }}voidint_t0(void)interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; T0Count++; if(T0Count==20) { TR1=0;//計(jì)數(shù)器1停止工作 int_flag=1; T0Count=0x00; }}voidint_T1(void)interrupt3{ T1Count++;}五、系統(tǒng)調(diào)試5.1軟件測(cè)試1.外部輸入信號(hào)為100Hz時(shí),仿真結(jié)果如圖5-1所示。接通電源,計(jì)數(shù)頻率顯示為0000,然后跳變?yōu)?00,隨后在100和99之間跳動(dòng)。圖5-SEQ圖5_-\*ARABIC1外部信號(hào)為100Hz2.外部輸入信號(hào)為500Hz時(shí),仿真結(jié)果如圖5-2所示。接通電源,計(jì)數(shù)頻率顯示為0000,然后跳變?yōu)?00,隨后在500附近跳動(dòng)。圖5-SEQ圖5_-\*ARABIC2外部信號(hào)為500Hz3.在調(diào)試過程初期,復(fù)位電路電阻所用阻值為10kΩ,但仿真時(shí)復(fù)位電路不能正常進(jìn)行。仿真如圖5-3所示。圖5-SEQ圖5_-\*ARABIC3R1為10kΩ5.2硬件測(cè)試在軟件調(diào)試時(shí),復(fù)位電路電阻為10KΩ時(shí),復(fù)位電路不能正常運(yùn)行,但按照正常情況,不該出現(xiàn)此現(xiàn)象,故推斷軟件仿真有誤,在焊接硬件時(shí)電阻使用10KΩ進(jìn)行測(cè)試。1.如圖5-4所示,在外接信號(hào)頻率為1kHz時(shí),數(shù)碼管顯示在1000左右跳動(dòng)。圖5-4顯示為1080,硬件頻率計(jì)數(shù)測(cè)試成功。圖5-SEQ圖5_-\*ARABIC42.如圖5-5所示,為按下復(fù)位按鈕后的測(cè)試圖,此時(shí)數(shù)碼管顯示為0000,即電路復(fù)位。硬件復(fù)位測(cè)試成功。圖5-SEQ圖5_-\*ARABIC5六、總結(jié)與體會(huì)本次課程設(shè)計(jì)的課題是簡(jiǎn)易頻率計(jì)數(shù)器,簡(jiǎn)易頻率計(jì)數(shù)器是計(jì)算機(jī)、各種通訊設(shè)備和音頻視頻等科研生產(chǎn)領(lǐng)域不可缺少的測(cè)量儀器。在這次課程設(shè)計(jì)中,我收獲頗多。在初期復(fù)習(xí)準(zhǔn)備的過程中鞏固了單片機(jī)方面的知識(shí),另外,在后期查找相關(guān)知識(shí)時(shí)開闊了視野,學(xué)到了很多課本上學(xué)不到的知識(shí)。比如,在這個(gè)過程中,我又重新復(fù)習(xí)了《C語言程序設(shè)計(jì)》中的相關(guān)編程知識(shí),較為熟練地掌握了C語言的編寫,重新翻閱了《單片機(jī)原理及應(yīng)用》,溫故而知新,能夠更加熟練地掌握了單片機(jī)的相關(guān)知識(shí);另外,我自行學(xué)習(xí)了仿真軟件Proteus、編程軟件Keil和串口燒入器的使用方法。雖然課程設(shè)計(jì)成功完成,但是在此過程中出現(xiàn)了大大小小的問題。比如,課程設(shè)計(jì)剛開始時(shí),由于單片機(jī)知識(shí)的遺忘和自己基礎(chǔ)知識(shí)不牢固,在分析設(shè)計(jì)電路時(shí)略顯吃力,但是經(jīng)過兩天的準(zhǔn)備后,就能夠很好的完成電路的設(shè)計(jì)。然而,在編程時(shí),由于C語言所學(xué)的時(shí)間太久,知識(shí)遺忘比較大,在編寫程序時(shí)遇到了很大的困難。但是我們沒有放棄,最終,在湯老師的耐心幫助和我們隊(duì)友同學(xué)之間互相幫助下,經(jīng)過一番努力,最終成功編寫出了程序。除了在知識(shí)上收獲了很多之外,我在與隊(duì)友的相互交流學(xué)習(xí)時(shí),與人交流的能力有所提升。而且,更加意識(shí)到團(tuán)隊(duì)合作的重要性。在此次課程設(shè)計(jì)中,我想感謝我的隊(duì)友和耐心負(fù)責(zé)的湯老師,也感謝學(xué)校給我們提供如此難得的機(jī)會(huì)鍛煉自己。在以后的學(xué)習(xí)中,我一定會(huì)更加努力。

附錄一元件清單序號(hào)器件名稱型號(hào)數(shù)量12345678單片機(jī)芯片電阻電容電容晶振按鈕排阻數(shù)碼管AT89C5110kΩ10uF20pF12MHz-A472GF5461AH1個(gè)2個(gè)1個(gè)2個(gè)1個(gè)1個(gè)1個(gè)1個(gè)附錄二程序清單程序如下:#include<reg51.h> bitint_flag;unsignedcharvolatileT0Count;unsignedcharvolatileT1Count;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管顯示段碼值為0、1、2、3、4、5、6、7、8、9unsignedcharcodetemp[]={0xf7,0xfb,0xfd,0xfe};//數(shù)碼管選通1234左到右unsignedlongsum;//1s內(nèi)脈沖的個(gè)數(shù)unsignedcharLed[4];//LED顯示緩存voiddelay(unsignedintnum){ while(--num);}//延時(shí)程序voidinit(void){ TMOD=0x51;//T0定時(shí),T1計(jì)數(shù) TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0x00; TL1=0x00;//置定時(shí)器、計(jì)數(shù)器初始值,周期為5

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論