基于單片機數(shù)字頻率計設(shè)計 電子信息工程技術(shù)畢業(yè)設(shè)計_第1頁
基于單片機數(shù)字頻率計設(shè)計 電子信息工程技術(shù)畢業(yè)設(shè)計_第2頁
基于單片機數(shù)字頻率計設(shè)計 電子信息工程技術(shù)畢業(yè)設(shè)計_第3頁
基于單片機數(shù)字頻率計設(shè)計 電子信息工程技術(shù)畢業(yè)設(shè)計_第4頁
基于單片機數(shù)字頻率計設(shè)計 電子信息工程技術(shù)畢業(yè)設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

目錄第一部分設(shè)計任務(wù)與調(diào)研………1第二部分設(shè)計說明…………………3第三部分設(shè)計成果…………………16第四部分結(jié)束語……………………24致謝…………………………25參考文獻…………………26第一部分設(shè)計任務(wù)與調(diào)研1.主要任務(wù)設(shè)計一個數(shù)字頻率計:采用STC89C52單片機作為主控芯片,測量范圍1Hz—10kHz的正弦波、方波、三角波,時基寬度為1us,10us,100us,1ms,④使用LCD液晶顯示屏,⑤能夠?qū)崿F(xiàn)頻率測量,數(shù)據(jù)顯示等功能。2.設(shè)計調(diào)研由于當(dāng)今社會的需要,對信息傳輸和處理的要求不斷提高,對頻率的測量的精度也需要更高更準(zhǔn)確的時頻基準(zhǔn)和更精密的測量技術(shù)。而頻率測量所能達到的精度,主要取決于作為標(biāo)準(zhǔn)頻率源的精度以及所使用的測量設(shè)備和測量方法。目前,測量頻頻的方法有直接測頻法、內(nèi)插法、游標(biāo)法、頻差倍增法等等??v觀現(xiàn)在的數(shù)字頻率計,其基本原理都是一樣的,頻率是單位時間(1s)內(nèi)信號發(fā)生周期變化的次數(shù),如果我們可以在給定的時間內(nèi)對信號波形進行計數(shù),并將技術(shù)結(jié)果顯示出來,就能讀取被測信號的頻率。數(shù)字頻率計首先必須獲得相對穩(wěn)定與準(zhǔn)確的時間,同時將被測信號轉(zhuǎn)換成幅度與波形均能被數(shù)字電路識別的脈沖信號,然后通過計算這一段時間間隔的脈沖數(shù),將其換算后顯示出來,這就是數(shù)字頻率計的基本原理,但現(xiàn)在的頻率計的顯示部分都是LED數(shù)碼管,顯示內(nèi)容是BCD碼,不直觀,如果用LCD液晶顯示,會使輸出結(jié)果更直接,更便于觀察。3.設(shè)計思路3.1確定硬件系統(tǒng)的設(shè)計方案:(1)、根據(jù)系統(tǒng)的功能要求確定選用的元器件;(2)、分配單片機各個IO口地址,以連接對應(yīng)的元器件,方便控制;(3)、利用protel軟件構(gòu)建系統(tǒng)的硬件圖;3.2確定軟件部分的設(shè)計方案:(1)確定各部分模塊對應(yīng)要實現(xiàn)的功能,并根據(jù)連接圖寫出對應(yīng)程序中對應(yīng)的控制信息,便于軟件編寫;(2)用keil軟件編寫程序,對應(yīng)各模塊功能模塊化編寫,便于程序的檢查和調(diào)試;(3)利用keil軟件生成hex文件,用protel軟件繪制電路圖(4)依照電路圖,在電路板上焊接各元件,完成系統(tǒng)實物設(shè)計;(5)將焊好的電路板反復(fù)進行硬件調(diào)試和系統(tǒng)整體調(diào)試,直到實現(xiàn)系統(tǒng)要求的預(yù)定功能。第二部分設(shè)計說明1.單片機頻率計系統(tǒng)結(jié)構(gòu)框圖以下是單片機頻率計系統(tǒng)結(jié)構(gòu)總框圖 圖1 系統(tǒng)結(jié)構(gòu)框圖2.硬件設(shè)計2.1.主控模塊主控模塊模塊在整個系統(tǒng)中起著統(tǒng)籌的作用,需要檢測鍵盤,溫度傳感器等各種參數(shù),同時驅(qū)動液晶顯示相關(guān)參數(shù),在這里我們選用了51系列單片機中的STC89C52單片機作為系統(tǒng)的主控芯片。51系列單片機最初是由Intel公司開發(fā)設(shè)計的,但后來Intel公司把52核的設(shè)計方案賣給了幾家大的電子設(shè)計生產(chǎn)商,譬如SST、Philip、Atmel等大公司。因此市面上出現(xiàn)了各式各樣的均以512為內(nèi)核的單片機。這些各大電子生產(chǎn)商推出的單片機都兼容51指令、并在51的基礎(chǔ)上擴展一些功能而內(nèi)部結(jié)構(gòu)是與51一致的。STC89C52有40個引腳,4個8位并行I/O口,1個全雙工異步串行口,同時內(nèi)含5個中斷源,2個優(yōu)先級,2個16位定時/計數(shù)器。STC89C52的存儲器系統(tǒng)由4K的程序存儲器(掩膜ROM),和128B的數(shù)據(jù)存儲器(RAM)組成。STC89C52單片機的基本組成框圖見圖2。圖2STC89C52單片機結(jié)構(gòu)圖2.1.1.STC89C52單片機主要特性1.一個8位的微處理器(CPU)。2.片內(nèi)數(shù)據(jù)存儲器RAM(128B),用以存放可以讀/寫的數(shù)據(jù),如運算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù)等,SST89系列單片機最多提供1K的RAM。3.片內(nèi)程序存儲器ROM(4KB),用以存放程序、一些原始數(shù)據(jù)和表格。但也有一些單片機內(nèi)部不帶ROM/EPROM,如8031,8032,80C31等。目前單片機的發(fā)展趨勢是將RAM和ROM都集成在單片機里面,這樣既方便了用戶進行設(shè)計又提高了系統(tǒng)的抗干擾性。SST公司推出的89系列單片機分別集成了16K、32K、64KFlash存儲器,可供用戶根據(jù)需要選用。4.四個8位并行I/O接口P0~P3,每個口既可以用作輸入,也可以用作輸出。5.兩個定時器/計數(shù)器,每個定時器/計數(shù)器都可以設(shè)置成計數(shù)方式,用以對外部事件進行計數(shù),也可以設(shè)置成定時方式,并可以根據(jù)計數(shù)或定時的結(jié)果實現(xiàn)計算機控制。為方便設(shè)計串行通信,目前的52系列單片機都會提供3個16位定時器/計數(shù)器。6.五個中斷源的中斷控制系統(tǒng)?,F(xiàn)在新推出的單片機都不只5個中斷源,例如SST89E58RD就有9個中斷源。7.一個全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實現(xiàn)單片機之間或單機與微機之間的串行通信。8.片內(nèi)振蕩器和時鐘產(chǎn)生電路,但石英晶體和微調(diào)電容需要外接。最高允許振蕩頻率為12MHz。SST89V58RD最高允許振蕩頻率達40MHz,因而大大的提高了指令的執(zhí)行速度。圖3STC89C52單片機管腳圖部分引腳說明:1.時鐘電路引腳XTAL1和XTAL2:XTAL2(18腳):接外部晶體和微調(diào)電容的一端;片內(nèi)它是振蕩電路反相放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時鐘電路時,該引腳輸入外部時鐘脈沖。要檢查振蕩電路是否正常工作,可用示波器查看XTAL2端是否有脈沖信號輸出。XTAL1(19腳):接外部晶體和微調(diào)電容的另一端;在片內(nèi)它是振蕩電路反相放大器的輸入端。在采用外部時鐘時,該引腳必須接地。2.控制信號引腳RST,ALE,PSEN和EA:RST/VPD(9腳):RST是復(fù)位信號輸入端,高電平有效。當(dāng)此輸入端保持備用電源的輸入端。當(dāng)主電源Vcc發(fā)生故障,降低到低電平規(guī)定值時,將+5V電源自動兩個機器周期(24個時鐘振蕩周期)的高電平時,就可以完成復(fù)位操作。RST引腳的第二功能是VPD,即接入RST端,為RAM提供備用電源,以保證存儲在RAM中的信息不丟失,從而合復(fù)位后能繼續(xù)正常運行。ALE/PROG(30腳):地址鎖存允許信號端。當(dāng)8051上電正常工作后,ALE引腳不斷向外輸出正脈沖信號,此頻率為振蕩器頻率fOSC的1/6。CPU訪問片外存儲器時,ALE輸出信號作為鎖存低8位地址的控制信號。平時不訪問片外存儲器時,ALE端也以振蕩頻率的1/6固定輸出正脈沖,因而ALE信號可以用作對外輸出時鐘或定時信號。如果想確定8051/8031芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出。如有脈沖信號輸出,則8051/8031基本上是好的。ALE端的負載驅(qū)動能力為8個LS型TTL(低功耗甚高速TTL)負載。此引腳的第二功能PROG在對片內(nèi)帶有4KBEPROM的8751編程寫入(固化程序)時,作為編程脈沖輸入端。PSEN(29腳):程序存儲允許輸出信號端。在訪問片外程序存儲器時,此端定時輸出負脈沖作為讀片外存儲器的選通信號。此引肢接EPROM的OE端(見后面幾章任何一個小系統(tǒng)硬件圖)。PSEN端有效,即允許讀出EPROM/ROM中的指令碼。PSEN端同樣可驅(qū)動8個LS型TTL負載。要檢查一個8051/8031小系統(tǒng)上電后CPU能否正常到EPROM/ROM中讀取指令碼,也可用示波器看PSEN端有無脈沖輸出。如有則說明基本上工作正常。EA/Vpp(31腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。當(dāng)EA引腳接高電平時,CPU只訪問片內(nèi)EPROM/ROM并執(zhí)行內(nèi)部程序存儲器中的指令,但當(dāng)PC(程序計數(shù)器)的值超過0FFFH(對8751/8051為4K)時,將自動轉(zhuǎn)去執(zhí)行片外程序存儲器內(nèi)的程序。當(dāng)輸入信號EA引腳接低電平(接地)時,CPU只訪問外部EPROM/ROM并執(zhí)行外部程序存儲器中的指令,而不管是否有片內(nèi)程序存儲器。對于無片內(nèi)ROM的8031或8032,需外擴EPROM,此時必須將EA引腳接地。此引腳的第二功能是Vpp是對8751片內(nèi)EPROM固化編程時,作為施加較高編程電壓(一般12V~21V)的輸入端。3.輸入/輸出端口P0/P1/P2/P3:P0口(P0.0~P0.7,39~32腳):P0口是一個漏極開路的8位準(zhǔn)雙向I/O口。作為漏極開路的輸出端口,每位能驅(qū)動8個LS型TTL負載。當(dāng)P0口作為輸入口使用時,應(yīng)先向口鎖存器(地址80H)寫入全1,此時P0口的全部引腳浮空,可作為高阻抗輸入。作輸入口使用時要先寫1,這就是準(zhǔn)雙向口的含義。在CPU訪問片外存儲器時,P0口分時提供低8位地址和8位數(shù)據(jù)的復(fù)用總線。在此期間,P0口內(nèi)部上拉電阻有效。P1口(P1.0~P1.7,1~8腳):P1口是一個帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口。P1口每位能驅(qū)動4個LS型TTL負載。在P1口作為輸入口使用時,應(yīng)先向P1口鎖存地址(90H)寫入全1,此時P1口引腳由內(nèi)部上拉電阻拉成高電平。P2口(P2.0~P2.7,21~28腳):P2口是一個帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口。P口每位能驅(qū)動4個LS型TTL負載。在訪問片外EPROM/RAM時,它輸出高8位地址。P3口(P3.0~P3.7,10~17腳):P3口是一個帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口。P3口每位能驅(qū)動4個LS型TTL負載。P3口與其它I/O端口有很大的區(qū)別,它的每個引腳都有第二功能,如下:P3.0:(RXD)串行數(shù)據(jù)接收。P3.1:(RXD)串行數(shù)據(jù)發(fā)送。P3.2:(INT0#)外部中斷0輸入。P3.3:(INT1#)外部中斷1輸入。P3.4:(T0)定時/計數(shù)器0的外部計數(shù)輸入。P3.5:(T1)定時/計數(shù)器1的外部計數(shù)輸入。P3.6:(WR#)外部數(shù)據(jù)存儲器寫選通。P3.7:(RD#)外部數(shù)據(jù)存儲器讀選通。2.1.2STC89C52單片機的中斷系統(tǒng)STC89C52系列單片機的中斷系統(tǒng)有5個中斷源,2個優(yōu)先級,可以實現(xiàn)二級中斷服務(wù)嵌套。由片內(nèi)特殊功能寄存器中的中斷允許寄存器IE控制CPU是否響應(yīng)中斷請求;由中斷優(yōu)先級寄存器IP安排各中斷源的優(yōu)先級;同一優(yōu)先級內(nèi)各中斷同時提出中斷請求時,由內(nèi)部的查詢邏輯確定其響應(yīng)次序。在單片機應(yīng)用系統(tǒng)中,常常會有定時控制需求,如定時輸出、定時檢測、定時掃描等;也經(jīng)常要對外部事件進行計數(shù)。STC89C52單片機內(nèi)集成有兩個可編程的定時/計數(shù)器:T0和T1,它們既可以工作于定時模式,也可以工作于外部事件計數(shù)模式,此外,T1還可以作為串行口的波特率發(fā)生器。2.2.液晶模塊LCD1602液晶模塊采用HD44780控制器,hd44780具有簡單而功能較強的指令集,可以實現(xiàn)字符移動,閃爍等功能,LM016L與單片機MCU通訊可采用8位或4位并行傳輸兩種方式,hd44780控制器由兩個8位寄存器,指令寄存器(IR)和數(shù)據(jù)寄存器(DR)忙標(biāo)志(BF),顯示數(shù)RAM(DDRAM),字符發(fā)生器ROMA(CGOROM)字符發(fā)生器RAM(CGRAM),地址計數(shù)器RAM(AC)。IR用于寄存指令碼,只能寫入不能讀出,DR用于寄存數(shù)據(jù),數(shù)據(jù)由內(nèi)部操作自動寫入DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數(shù)據(jù),BF為1時,液晶模塊處于內(nèi)部模式,不響應(yīng)外部操作指令和接受數(shù)據(jù),DDTAM用來存儲顯示的字符,能存儲80個字符碼,CGROM由8位字符碼生成5*7點陣字符160中和5*10點陣字符32種.8位字符編碼和字符的對應(yīng)關(guān)系,CGRAM是為用戶編寫特殊字符留用的,它的容量僅64字節(jié),可以自定義8個5*7點陣字符或者4個5*10點陣字符,AC可以存儲DDRAM和CGRAM的地址,如果地址碼隨指令寫入IR,則IR自動把地址碼裝入AC,同時選擇DDRAM或CGRAM,LCD1602液晶模塊的引腳圖如圖4所示。圖4LCD1602引腳圖液晶寄存器選擇控制如表1。表1寄存器選擇控制RSR/W操作說明00寫入指令寄存器(清除屏等)01讀busyflag(DB7),以及讀取位址計數(shù)器(DB0~DB6)值10寫入數(shù)據(jù)寄存器(顯示各字型等)11從數(shù)據(jù)寄存器讀取數(shù)據(jù)2.2.1液晶顯示部分與STC89C52的接口如圖5所示。用STC89C52的P0口作為數(shù)據(jù)線,用P1.2、P1.1、P1.0分別作為LCD的EN、R/W、RS。其中EN是下降沿觸發(fā)的片選信號,R/W是讀寫信號,RS是寄存器選擇信號本模塊設(shè)計要點如下:顯示模塊初始化:首先清屏,再設(shè)置接口數(shù)據(jù)位為8位,顯示行數(shù)為1行,字型為5×7點陣,然后設(shè)置為整體顯示,取消光標(biāo)和字體閃爍,最后設(shè)置為正向增量方式且不移位。向LCD的顯示緩沖區(qū)中送字符,程序中采用2個字符數(shù)組,一個顯示字符,另一個顯示電壓數(shù)據(jù),要顯示的字符或數(shù)據(jù)被送到相應(yīng)的數(shù)組中,完成后再統(tǒng)一顯示.首先取一個要顯示的字符或數(shù)據(jù)送到LCD的顯示緩沖區(qū),程序延時2.5ms,判斷是否夠顯示的個數(shù),不夠則地址加一取下一個要顯示的字符或數(shù)據(jù)。圖5LCD1602與STC89C52的接口2.3.三極管放大電路圖6三極管放大電路 由于單片機只能讀取數(shù)字信號,當(dāng)輸入的信號比較小的時候單片機不能直接讀取,因此這里使用了一級三極管放大電路對輸入的信號進行放大,其中電路中的R4和R5給三極管的基極提供和合適偏置。基極電壓可以由以下公式求得。Vb= 由于三極管的基極和發(fā)射極之間的壓降為0.65V,因此發(fā)射機的電壓可以由以下公式求得:Ve=Vb-0.65=0.6 由于IC≈IE,IE=Ve/R6≈0.88ma,因此Vc=VCC-Ie*R3=2.64V。因此三極管放大電路的集電極輸出端的直流靜態(tài)工作點為2.64V。 因為本設(shè)計只處理信號,因此三極管放大電路的輸入端采用的大電容進行交流耦合進而隔絕交流成分,為了使整個頻率計能測量更小幅值的周期信號,這個電路用旁路電容對發(fā)射極電阻進行旁路從而提高其交流放大倍數(shù),放大倍數(shù)A可以由以下公式求得。A≈R3/(R6//RC4//RC5) 其中RC4為C4交流等效阻抗,RC5為C4交流等效阻抗。但是放大倍數(shù)最終會受限于三極管的β(三極管的電流放大系數(shù))。因此最終放大倍數(shù)會限制在數(shù)百倍,由于這里只需要把輸入的周期信號放大到足夠大就可以通過整形電路整形成方波,因此這里放大倍數(shù)不需要很精確,放大后的波形出現(xiàn)截止失真也不會對測量結(jié)果造成。2.4整形模塊2.4.1施密特觸發(fā)器芯片介紹施密特觸發(fā)器也有兩個穩(wěn)定狀態(tài),但與一般觸發(fā)器不同的是,施密特觸發(fā)器采用電位觸發(fā)方式,其狀態(tài)由輸入信號電位維持;對于負向遞減和正向遞增兩種不同變化方向的輸入信號,施密特觸發(fā)器有不同的閾值電壓。門電路有一個閾值電壓,當(dāng)輸入電壓從低電平上升到閾值電壓或從高電平下降到閾值電壓時電路的狀態(tài)將發(fā)生變化。施密特觸發(fā)器是一種特殊的門電路,與普通的門電路不同,施密特觸發(fā)器有兩個閾值電壓,分別稱為正向閾值電壓和負向閾值電壓。在輸入信號從低電平上升到高電平的過程中使電路狀態(tài)發(fā)生變化的輸入電壓稱為正向閾值電壓,在輸入信號從高電平下降到低電平的過程中使電路狀態(tài)發(fā)生變化的輸入電壓稱為負向閾值電壓。正向閾值電壓與負向閾值電壓之差稱為回差電壓。原理示意圖如圖7所示。圖7施密特觸發(fā)器原理示意圖74HC14是一款高速CMOS器件,74HC14引腳兼容低功耗肖特基TTL(LSTTL)系列。74HC14遵循JEDEC標(biāo)準(zhǔn)no.7A。74HC14實現(xiàn)了6路施密特觸發(fā)反相器,可將緩慢變化的輸入信號轉(zhuǎn)換成清晰、無抖動的輸出信號。2.4.274HC14電路 由于三極管放大電路輸出的信號不是標(biāo)準(zhǔn)的方波信號,存在著上升沿不夠陡峭,波形類似于正弦波等問題,為了使單片機對信號更好的采集,這里使用了施密特觸發(fā)器74HC14對三極管放大電路輸出的信號進行整形。電路圖如圖8所示。圖8施密特觸發(fā)器電路原理圖 其中輸入信號從芯片的1號腳輸入,74HC14本身是一個芯片內(nèi)部帶有6個施密特觸發(fā)器,我這里為了充分利用芯片使用了其中三個,實際上可以只使用一個。整形后的信號從芯片的6號腳輸出。2.5分頻模塊2.5.174HC390芯片分頻電路一般采用十進制計數(shù)器如74HC290、74HC390等來實現(xiàn)時間計數(shù)單元的計數(shù)功能。本次設(shè)計中選擇74HC390。由其內(nèi)部邏輯框圖(如圖9)可知,其為雙2-5-10異步計數(shù)器,并每一計數(shù)器均有一個異步清零端(高電平有效)。由于我們要設(shè)計的是100分頻電路,因此74HC390內(nèi)部兩個計數(shù)器都用上,分別都設(shè)置成10計數(shù)器。圖974HC390內(nèi)部邏輯框圖2.5.274HC390分頻電路由于單片機運行速度有限,單片機運行一條基礎(chǔ)指令需要1個機器周期即12個是時鐘周期,換算成時間為1us。因此當(dāng)頻率過高的時候單片機就不能很精確的換算出頻率。為了解決這個問題,這設(shè)計加入了一個100分頻的計數(shù)器。當(dāng)頻率高于200KHZ的時候單片機計算分頻后的信號,當(dāng)頻率低于200KHZ的時候計算分頻前的信號。這樣高低搭配可以擴大單片機的測量頻率。最終換算出其真實對應(yīng)的頻率并在液晶上顯示。其中電路圖如圖10所示。圖1074HC390分頻電路原理圖

3.系統(tǒng)軟件設(shè)計3.1系統(tǒng)軟件總體設(shè)計圖11系統(tǒng)主流程圖 單片機上電后會先進行一個初始化把設(shè)置的變量的值清0,然后開啟定時器首先對100分頻后的輸入信號進行1S內(nèi)計數(shù),當(dāng)測量到頻率大于200KHZ的時候,單片機會顯示出當(dāng)前測量的頻率和周期,然后進行下一次計數(shù),當(dāng)測量到的頻率少于200KHZ的時候,單片機會重新采集分頻前的數(shù)據(jù),把測量到的數(shù)據(jù)顯示出來,然后再進入到下一次的計數(shù)。圖12LCD1602初始化子函數(shù)流程圖首先先調(diào)用液晶自定義的字庫,設(shè)置好DDRAM地址后在第一行顯示,根據(jù)程序中的數(shù)據(jù)設(shè)置顯示數(shù)據(jù)的首地址并設(shè)置循環(huán)量,在循環(huán)過程中不斷的取字符代碼直到終止,第二行的顯示過程同一行的顯示過程一樣,兩行顯示完畢后便結(jié)束子程序.第三部分設(shè)計成果1.單片機頻率計原理圖以下是基于ST89C52單片機頻率計原理圖圖13頻率計原理圖2.51單片機頻率計仿真圖圖14為proteus軟件制成的頻率計仿真圖圖14頻率計仿真圖3.設(shè)計成品圖片圖15為已編好程序的成品圖圖15設(shè)計成品圖4.系統(tǒng)源程序//******************************************************************************************//連接框圖:___________________//|P1.0|->RS//|P1.1|->RW//|P1.2|->E//|P0|->DB//| P3.4|->1~9999hz的輸入//|P3.5|->1~9999KHZ輸入(分頻后)//******************************************************************************************#include<reg52.h>unsignedlongintfre;unsignedchartime;unsignedintcount;unsignedintcount1;//端口及函數(shù)說明sbitLCD_RS=P1^0; //片選信號sbitLCD_RW=P1^1; //讀寫信號sbitLCD_E=P1^2; //使能信號#defineLCD_DBP0 //數(shù)據(jù)信號unsignedcharcharacter[10]={0};//在屏幕上顯示的字符串unsignedcharcharacter_1[]={"fre=Hz"};unsignedcharFLAG=0;voidLCD_init(void);//初始化函數(shù)voidLCD_write_command(unsignedcharcommand);//寫指令函數(shù) voidLCD_write_data(unsignedchardat);//寫數(shù)據(jù)函數(shù) voidLCD_disp_char(unsignedcharx,unsignedchary,unsignedchardat);//在某個屏幕位置上顯示一個字符,X(0-15),y(1-2)voiddelay_n40us(unsignedintn);//延時函數(shù)voidtimer_init();//中斷初始化函數(shù)//voiddelay_n40us(unsignedintn) //延時函數(shù){ unsignedinti; unsignedcharj; for(i=n;i>0;i--) for(j=0;j<2;j++);}voiddelay_1s(){ unsignedinti,j; for(i=0;i<100;i++) for(j=0;j<1000;j++);}voidLCD_init(void) //液晶初始化函數(shù){ LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7 LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7 LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7 切記要寫三遍!?。?! LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍 LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位 LCD_write_command(0x01);//清除屏幕顯示 delay_n40us(100);//清屏延時}voidLCD_write_command(unsignedchardat)//寫命令函數(shù){ LCD_DB=dat; LCD_RS=0;//指令 LCD_RW=0;//寫入 LCD_E=1;//使能 LCD_E=0; delay_n40us(1);//寫命令延時} voidLCD_write_data(unsignedchardat) //寫數(shù)據(jù)函數(shù){ LCD_DB=dat; LCD_RS=1;//數(shù)據(jù) LCD_RW=0;//寫入 LCD_E=1;//使能 LCD_E=0; delay_n40us(1); //寫數(shù)據(jù)延時}voidLCD_disp_char(unsignedcharx,unsignedchary,unsignedchardat)//顯示一個字符{ unsignedcharaddress; if(y==1) address=0x80+x; //顯示在第一排的時候的x的地址 else address=0xc0+x; //顯示在第二排的時候的x的地址 LCD_write_command(address); //輸入地址 LCD_write_data(dat); //輸入數(shù)據(jù)}voidLCD_disp_num(unsignedcharx,unsignedchary,unsignedchardat)//顯示一個數(shù)字{ unsignedcharaddress; if(y==1) address=0x80+x; //顯示在第一排的時候的x的地址 else address=0xc0+x; //顯示在第二排的時候的x的地址 LCD_write_command(address); //輸入地址 LCD_write_data(dat+48); //輸入數(shù)據(jù)}voiddis_num(void){ unsignedchari=0,j=0,k=0; LCD_write_command(0x01);//清除屏幕顯示 character[0]=fre/1000000; character[1]=fre/100000%10; character[2]=fre/10000%10; character[3]=fre/1000%10; character[4]=fre/100%10; character[5]=fre/10%10; character[6]=fre%10;character[7]='H'; character[8]='z'; for(i=0;i<4;i++) //顯示fre { LCD_disp_char(i+0,1,character_1[i]); } for(i=0;i<10;i++) //判斷第一個不為0的數(shù) { if(character[i]!=0) break; } k=10-i-2; for(j=0;j<k;j++) //顯示所有的數(shù)字 { LCD_disp_num(4+j,1,character[i++]); } for(i=5;i<7;i++) //顯示Hz { LCD_disp_char(j+4,1,character_1[i]); j++; }}voidmain(){ unsignedchari; LCD_init(); timer_init();//定時/計數(shù)器初始化 for(i=0;i<4;i++) { LCD_disp_char(i+0,1,character_1[i]); } while(1) { dis_num();//顯示 delay_1s(); } }voidtimer_init(void)//定時/計數(shù)器初始化{ TMOD=0x66;//計數(shù)器0工作工作方式2,自動重裝初值 TH0=0;//計數(shù)器初值為0 TL0=0; TR0=1;//計數(shù)器開始計數(shù) ET0=1;//打開計數(shù)器0中斷 TH1=0;//計數(shù)器初值為0 TL1=0; TR1=1;//計數(shù)器開始計數(shù) ET1=1;//打開計數(shù)器0中斷 RCAP2H=(65536-62500)/256;//在程序初始化的時候給RCAP2L和RCAP2H賦值, RCAP2L=(65536-62500)%256;//TH2和TL2將會在中斷產(chǎn)生時自動使TH2=RCAP2H,TL2=RCAP2L。 TH2=RCAP2H;//12M晶振下每次中斷62.5ms TL2=RCAP2L; ET2=1;//打開定時器2中斷 TR2=1;//定時器2開始計時 EA=1;//開總中斷}//voidtimer2(void)interrupt5//定時器2中斷(62.5ms){ doubletemp; time++; TF2=0;//定時器2的中斷標(biāo)志位TF2不能夠由硬件清零,所以要在中斷服務(wù)程序中將其清零 if(time==16)//定時1s時間到 { time=0;//計時清0 fre=(long)count*256+TL1;//count*256強制轉(zhuǎn)換成long型,否則將不產(chǎn)生進位先判斷分頻后的 FLAG=0; if(fre<2000)//200K之后讀取分頻后的頻率 { fre=(long)count1*256+TL0; FLAG=1; } count=0;//清零計數(shù)器0計數(shù) count1=0; EA=1;//開中斷 }}//voidtimer0(void)interrupt1//計數(shù)器0中斷 { count++;} //voidtimer1(void)interrupt3//計數(shù)器1中斷{ count1++;}第四部分結(jié)束語在此次設(shè)計中,選擇以單片機ST89C52為核心的數(shù)字頻率計,該數(shù)字頻率計電路結(jié)構(gòu)簡單,原理清晰,應(yīng)用性比較強,性價比高,但由于此類型單片機功耗比較高,抗干擾能力也不是特別強,運行速度過慢,測量量程有限,但是可擴展性比較強,為獲得較寬的量程在原有系統(tǒng)上增加倍頻和分頻電路,實現(xiàn)電路的擴展。通過此次畢業(yè)設(shè)計,加深了我對單片機的了解,感覺單片機的前景是很大的,單片機

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論