久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12703|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)的頻率計(jì)畢業(yè)設(shè)計(jì)論文(Word格式)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:273205 發(fā)表于 2018-1-17 18:54 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
目錄
1 引言
1.1 目的和意義
1.2 研究概況與發(fā)展趨勢
1.3 本系統(tǒng)主要功能
2. 總體方案論證與設(shè)計(jì)
2.1主控模塊的選型和論證
2.2顯示模塊的選型和論證
2.3放大電路的選型和論證
2.4系統(tǒng)整體設(shè)計(jì)概述
3.系統(tǒng)硬件電路設(shè)計(jì)
3.1主控模塊
3.1.1 STC89C52單片機(jī)主要特性
3.1.2 STC89C52單片機(jī)的中斷系統(tǒng)
3.1.3 單片機(jī)最小系統(tǒng)設(shè)計(jì)
3.2 LCD液晶顯示器簡介
3.2.1 液晶原理介紹
3.2.2液晶模塊簡介
3.2.3液晶顯示部分與STC89C52的接口
3.3三極管放大電路設(shè)計(jì)
3.4整形模塊設(shè)計(jì)
3.4.1施密特觸發(fā)器芯片介紹
3.4.2 74HC14電路設(shè)計(jì)
3.5分頻模塊設(shè)計(jì)
3.5.1 74HC390芯片介紹
3.5.2 74HC390分頻電路設(shè)計(jì)
4.系統(tǒng)軟件設(shè)計(jì)
4.1系統(tǒng)軟件總體設(shè)計(jì)
4.2程序設(shè)計(jì)原理
5.系統(tǒng)調(diào)試
5.1硬件調(diào)試
5.2軟件調(diào)試
6.結(jié)論
附錄
系統(tǒng)整體原理圖
系統(tǒng)仿真圖
元件清單
系統(tǒng)源程序
基于單片機(jī)的頻率計(jì)
摘要:數(shù)字頻率計(jì)是一種基本的測量儀器。它被廣泛應(yīng)用于航天、電子、測控等領(lǐng)域,還被應(yīng)用在計(jì)算機(jī)及各種數(shù)學(xué)儀表中。一般采用的是十進(jìn)制數(shù)字,顯示被測信號頻率。基本功能是測量正弦信號,方波信號以及其他各種單位時(shí)間內(nèi)變壞的物理量。由于其使用十進(jìn)制數(shù)顯示,測量迅速精確,顯示直觀,所以經(jīng)常被用來使用。
本文主要介紹數(shù)字頻率計(jì)的設(shè)計(jì)和調(diào)試,本作品是基于STC89C52單片機(jī)作為平臺,基本原理是通過STC89C52單片機(jī)進(jìn)行頻率的采集和分析工作,在通過程序使其顯示在LCD1602的液晶顯示屏上,通過液晶顯示屏,讓使用者能夠直觀的看到當(dāng)前的輸入頻率是多少。
由于STC89C52單片機(jī)只能處理數(shù)字信號因此系統(tǒng)需要先把信號放大成方波信號,再通過施密特觸發(fā)器整形方波,又由于單片機(jī)能處理的頻率有限,所以這次我們先用74HC390芯片對輸入的信號進(jìn)行了分頻,使其降低了100倍,才送去給單片機(jī)處理,如果頻率高于200KHZ的時(shí)候就計(jì)算分頻后的頻率,得到數(shù)據(jù)再換算成真實(shí)的頻率。

1 引言
1.1 目的和意義
在電子測量領(lǐng)域中,頻率測量的精確度是最高的。因此,在生產(chǎn)過程中許多物理量,例如溫度、壓力、流量、液位、PH值、振動、位移、速度、加速度,乃至各種氣體的百分比成分等均用傳感器轉(zhuǎn)換成信號頻率,然后用數(shù)字頻率計(jì)來測量,以提高精確度。
國際上數(shù)字頻率計(jì)的分類很多。按功能分類,因計(jì)數(shù)式頻率計(jì)的測量功能很多,用途很廣。所以根據(jù)儀器具有的功能,電子計(jì)數(shù)器有通用和專用之分。一、通用型計(jì)數(shù)器:通用型計(jì)數(shù)器是一種具有多種測量功能、多種用途的萬能計(jì)數(shù)器。它可測量頻率、周期、多周期平均值、時(shí)間間隔、累加計(jì)數(shù)、計(jì)時(shí)等;若配上相應(yīng)插件,就可測相位、電壓、電流、功率、電阻等電量;配上適當(dāng)?shù)膫鞲衅鳎可進(jìn)行長度、重量、壓力、溫度、速度等非電量的測量。二、專用計(jì)數(shù)器:專用計(jì)數(shù)器指專門用來測量某種單一功能的計(jì)數(shù)器。如頻率計(jì)數(shù)器,只能專門用來測量高頻和微波頻率;時(shí)間計(jì)數(shù)器,是以測量時(shí)間為基礎(chǔ)的計(jì)數(shù)器,其測時(shí)分辨力和準(zhǔn)確度很高,可達(dá)ns數(shù)量級;特種計(jì)數(shù)器,它具有特種功能,如可逆計(jì)數(shù)器、閾值計(jì)數(shù)器、差值計(jì)數(shù)器、倒數(shù)計(jì)數(shù)器等,用于工業(yè)和自控技術(shù)等方面。數(shù)字頻率計(jì)按頻段分類:①低速計(jì)數(shù)器:最高計(jì)數(shù)頻率<10MHz;②中速計(jì)數(shù)器:最高計(jì)數(shù)頻率10—100MHz;③高速計(jì)數(shù)器:最高計(jì)數(shù)頻率>100MHz;④微波頻率計(jì)數(shù)器:測頻范圍1—80GHz或更高。
由于大規(guī)模和超大規(guī)模數(shù)字集成電路技術(shù)、數(shù)據(jù)通信技術(shù)與單片機(jī)技術(shù)的結(jié)合,數(shù)字頻率計(jì)發(fā)展進(jìn)入了智能化和微型化的新階段。其功能進(jìn)一步擴(kuò)大,除了測量頻率、頻率比、周期、時(shí)間、相位、相位差等基本功能外,還具有自撿、自校、自診斷、數(shù)理統(tǒng)計(jì)、計(jì)算方均根值、數(shù)據(jù)存儲和數(shù)據(jù)通信等功能。可見,頻率計(jì)是很有工業(yè)價(jià)值的。本作品即為一個基于單片機(jī)的數(shù)字頻率計(jì),它通74HC390芯片進(jìn)行分頻,克服了單片機(jī)難以處理高頻信號的困難,并使用LCD1602液晶顯示進(jìn)行顯示。
1.2 研究概況與發(fā)展趨勢
由于當(dāng)今社會的需要,對信息傳輸和處理的要求不斷提高,對頻率的測量的精度也需要更高更準(zhǔn)確的時(shí)頻基準(zhǔn)和更精密的測量技術(shù)。而頻率測量所能達(dá)到的精度,主要取決于作為標(biāo)準(zhǔn)頻率源的精度以及所使用的測量設(shè)備和測量方法。目前,測量頻頻的方法有直接測頻法、內(nèi)插法、游標(biāo)法、頻差倍增法等等。直接測頻的方法較簡單,但精度不高。頻差倍增多法和周期法是一種頻差倍增法和差拍法相結(jié)合的測量方法,這種方法是將被測信號和參考信號經(jīng)頻差倍增使被測信號
的相位起伏擴(kuò)大,再通過混頻器獲得差拍信號,用電子計(jì)數(shù)器在低頻下進(jìn)行多周期測量,能在較少的倍增次數(shù)和同樣的取樣時(shí)間情況下,得到比測頻法更高的系統(tǒng)分辨率和測量精度,但是仍然存在著時(shí)標(biāo)不穩(wěn)而引入的誤差和一定的觸發(fā)誤差。
在電子系統(tǒng)廣泛的應(yīng)用領(lǐng)域中,到處看見處理離散信息的數(shù)字電路。供消費(fèi)用的冰箱和電視、航空通訊系統(tǒng)、交通控制雷達(dá)系統(tǒng)、醫(yī)院急救系統(tǒng)等在設(shè)計(jì)過程中都用到數(shù)字技術(shù)。 數(shù)字頻率計(jì)是現(xiàn)代通信測量設(shè)備系統(tǒng)中必不可少的測量儀器,不但要求電路產(chǎn)生頻率的準(zhǔn)確度和穩(wěn)定度都高的信號,也要能方便的改變頻率。
數(shù)字頻率計(jì)的實(shí)現(xiàn)方法主要有:直接式、鎖相式、直接數(shù)字式和混合式
(1)直接式
優(yōu)點(diǎn):速度快、相位噪聲低,但結(jié)構(gòu)復(fù)雜、雜散多,一般只應(yīng)用在地面雷達(dá)中。
(2)鎖相式
優(yōu)點(diǎn):相位同步的自動控制,制作頻率高,功耗低,容易實(shí)現(xiàn)系列化、小型化、模塊化和工程化。
(3)直接數(shù)字式
優(yōu)點(diǎn):電路穩(wěn)定、精度高、容易實(shí)現(xiàn)系列化、小型化、模塊化和工程化。
1.3 本系統(tǒng)主要功能
本系統(tǒng)設(shè)計(jì)制作一個基于單片機(jī)的頻率計(jì)。能實(shí)現(xiàn)以下幾種功能:
(1)能夠?qū)?HZ對10MHZ正弦波、三角波、方波信號等周期信號的頻率進(jìn)行測量
(2)系統(tǒng)能夠把測量信號的頻率和周期顯示在液晶屏幕上。

2. 總體方案論證與設(shè)計(jì)
              根據(jù)所要實(shí)現(xiàn)的功能劃分,系統(tǒng)一共需要以下幾個模塊:主控模塊、顯示模塊、時(shí)鐘模塊、溫度檢測模塊,以下就針對這幾個模塊的選型和論證進(jìn)行討論。
2.1主控模塊的選型和論證
方案一:
              采用MSP430系列單片機(jī),該單片機(jī)是TI公司1996年開始推向市場的一種16位超低功耗的混合信號處理器。其內(nèi)部集成了很多模擬電路、數(shù)字電路和微處理器,提供強(qiáng)大的功能。不過該芯片昂貴不適合一般的設(shè)計(jì)開發(fā)。
方案二
              采用51系列的單片機(jī),該單片機(jī)是一個高可靠性,超低價(jià),無法解密,高性能的8位單片機(jī),32個IO口,且STC系列的單片機(jī)可以在線編程、調(diào)試,方便地實(shí)現(xiàn)程序的下載與整機(jī)的調(diào)試。
因此選用方案二中的51系列單片機(jī)作為主控芯片。
2.2顯示模塊的選型和論證
方案一:
              采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較合適,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對較高,所以不用此種作為顯示。
方案二:
              采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價(jià)格雖適中,對于顯示數(shù)字也最合適,而且采用動態(tài)掃描法與單片機(jī)連接時(shí),占用單片機(jī)口線少。但是由于數(shù)碼管動態(tài)掃描需要借助74LS164移位寄存器進(jìn)行移位,該芯片在電路調(diào)試時(shí)往往有很多障礙,所以不采用LED數(shù)碼管作為顯示。
方案三:
              采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清晰可見,對于本設(shè)計(jì)而言一個LCD1602的液晶屏即可,價(jià)格也還能接受,需要的借口線較多,但會給調(diào)試帶來諸多方便。
所以本設(shè)計(jì)中方案三中的LCD1602液顯示屏作為顯示模塊。
2.3放大電路的選型和論證
方案一:
              采用集成運(yùn)放作為放大電路,該電路只需要在外部配置少量電阻電容則能完成放大功能,十分方便設(shè)計(jì),但是本設(shè)計(jì)需要放大1HZ到10MHZ的信號,通頻帶比較寬,因此對集成運(yùn)放的要求較高,一般能處理寬帶信號的集成運(yùn)放成本比較高。
方案二:
              采用三極管或者場效應(yīng)管作為放大電路,三極管放大電路所需要原件較為簡單容易購置,而且電路較為成熟,三極管的價(jià)格也十分低廉,而且三極管電路性能優(yōu)越,是作為一個低成本的放大電路的不二之選。
              所以本設(shè)計(jì)中選用三極管為放大電路中使用。
2.4系統(tǒng)整體設(shè)計(jì)概述
本系統(tǒng)以單片機(jī)為控制核心,對系統(tǒng)進(jìn)行初始化,主要完成液晶顯示、頻率測量、放大整形濾波等功能的控制,起到總控和協(xié)調(diào)各模塊之間工作的作用。
圖2-1系統(tǒng)結(jié)構(gòu)框圖
本系統(tǒng)結(jié)構(gòu)如圖2-1所示,本設(shè)計(jì)可分為以下模塊:三極管放大電路、整形電路、分頻電路、液晶模塊。下面對各個模塊的設(shè)計(jì)方案逐一進(jìn)行論證分析。

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

圖3-9 74HC14真值表
3.4.2 74HC14電路設(shè)計(jì)
              由于三極管放大電路輸出的信號不是標(biāo)準(zhǔn)的方波信號,存在著上升沿不夠陡峭,波形類似于正弦波等問題,為了使單片機(jī)對信號更好的采集,這里使用了施密特觸發(fā)器74HC14對三極管放大電路輸出的信號進(jìn)行整形。電路圖如圖3-10所示。
圖3-10施密特觸發(fā)器電路原理圖
              其中輸入信號從芯片的1號腳輸入,74HC14本身是一個芯片內(nèi)部帶有6個施密特觸發(fā)器,我這里為了充分利用芯片使用了其中三個,實(shí)際上可以只使用一個。整形后的信號從芯片的6號腳輸出。
3.5分頻模塊設(shè)計(jì)
3.5.1 74HC390芯片介紹
分頻電路一般采用十進(jìn)制計(jì)數(shù)器如74HC290、74HC390等來實(shí)現(xiàn)時(shí)間計(jì)數(shù)單元的計(jì)數(shù)功能。本次設(shè)計(jì)中選擇74HC390。由其內(nèi)部邏輯框圖(如圖3)可知,其為雙2-5-10異步計(jì)數(shù)器,并每一計(jì)數(shù)器均有一個異步清零端(高電平有效)。由于我們要設(shè)計(jì)的是100分頻電路,因此74HC390內(nèi)部兩個計(jì)數(shù)器都用上,分別都設(shè)置成10計(jì)數(shù)器。
圖3-11 74HC390內(nèi)部邏輯框圖
3.5.2 74HC390分頻電路設(shè)計(jì)
由于單片機(jī)運(yùn)行速度有限,單片機(jī)運(yùn)行一條基礎(chǔ)指令需要1個機(jī)器周期即12個是時(shí)鐘周期,換算成時(shí)間為1us。因此當(dāng)頻率過高的時(shí)候單片機(jī)就不能很精確的換算出頻率。為了解決這個問題,這設(shè)計(jì)加入了一個100分頻的計(jì)數(shù)器。當(dāng)頻率高于200KHZ的時(shí)候單片機(jī)計(jì)算分頻后的信號,當(dāng)頻率低于200KHZ的時(shí)候計(jì)算分頻前的信號。這樣高低搭配可以擴(kuò)大單片機(jī)的測量頻率。最終換算出其真實(shí)對應(yīng)的頻率并在液晶上顯示。其中電路圖如圖3-12所示。
圖3-12 74HC390分頻電路原理圖

4.系統(tǒng)軟件設(shè)計(jì)
4.1系統(tǒng)軟件總體設(shè)計(jì)
4-1系統(tǒng)主流程圖
              單片機(jī)上電后會先進(jìn)行一個初始化把設(shè)置的變量的值清0,然后開啟定時(shí)器首先對100分頻后的輸入信號進(jìn)行1S內(nèi)計(jì)數(shù),當(dāng)測量到頻率大于200KHZ的時(shí)候,單片機(jī)會顯示出當(dāng)前測量的頻率和周期,然后進(jìn)行下一次計(jì)數(shù),當(dāng)測量到的頻率少于200KHZ的時(shí)候,單片機(jī)會重新采集分頻前的數(shù)據(jù),把測量到的數(shù)據(jù)顯示出來,然后再進(jìn)入到下一次的計(jì)數(shù)。
圖4-2 LCD1602初始化子函數(shù)流程圖
首先先調(diào)用液晶自定義的字庫,設(shè)置好DDRAM地址后在第一行顯示,根據(jù)程序中的數(shù)據(jù)設(shè)置顯示數(shù)據(jù)的首地址并設(shè)置循環(huán)量,在循環(huán)過程中不斷的取字符代碼直到終止,第二行的顯示過程同一行的顯示過程一樣,兩行顯示完畢后便結(jié)束子程序。
4.2程序設(shè)計(jì)原理            
軟件任務(wù)分析和硬件電路設(shè)計(jì)結(jié)合進(jìn)行,哪些功能由硬件完成,哪些任務(wù)由軟件完成,在硬件電路設(shè)計(jì)基本定型后,也就基本上決定下來了。
軟件任務(wù)分析環(huán)節(jié)是為軟件設(shè)計(jì)做一個總體規(guī)劃。從軟件的功能來看可分為兩大類:一類是執(zhí)行軟件,它能完成各種實(shí)質(zhì)性的功能,如測量,計(jì)算,顯示,打印,輸出控制和通信等,另一類是監(jiān)控軟件,它是專門用來協(xié)調(diào)各執(zhí)行模塊和操作者的關(guān)系,在系統(tǒng)軟件中充當(dāng)組織調(diào)度角色的軟件。這兩類軟件的設(shè)計(jì)方法各有特色,執(zhí)行軟件的設(shè)計(jì)偏重算法效率,與硬件關(guān)系密切,千變?nèi)f化。
軟件任務(wù)分析時(shí),應(yīng)將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進(jìn)行功能定義和接口定義(輸入輸出定義)。在各執(zhí)行模塊進(jìn)行定義時(shí),將要牽扯到的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型問題也一并規(guī)劃好。
各執(zhí)行模塊規(guī)劃好后,就可以監(jiān)控程序了。首先根據(jù)系統(tǒng)功能和鍵盤設(shè)置選擇一種最適合的監(jiān)控程序結(jié)構(gòu)。相對來講,執(zhí)行模塊任務(wù)明確單純,比較容易編程,而監(jiān)控程序較易出問題。這如同當(dāng)一名操作工人比較容易,而當(dāng)一個廠長就比較難了。
軟件任務(wù)分析的另一個內(nèi)容是如何安排監(jiān)控軟件和各執(zhí)行模塊。整個系統(tǒng)軟件可分為后臺程序(背景程序)和前臺程序。后臺程序指主程序及其調(diào)用的子程序,這類程序?qū)?shí)時(shí)性要求不是太高,延誤幾十ms甚至幾百ms也沒關(guān)系,故通常將監(jiān)控程序(鍵盤解釋程序),顯示程序和打印程序等與操作者打交道的程序放在后臺程序中執(zhí)行;而前臺程序安排一些實(shí)時(shí)性要求較高的內(nèi)容,如定時(shí)系統(tǒng)和外部中斷(如掉電中斷)。也可以將全部程序均安排在前臺,后臺程序?yàn)椤笆瓜到y(tǒng)進(jìn)入睡眠狀態(tài)”,以利于系統(tǒng)節(jié)電和抗干擾。

5.系統(tǒng)調(diào)試
5.1硬件調(diào)試
頻率計(jì)的電路較為復(fù)雜,涉及的模塊比較多,其中包含三極管放大模塊,整形模塊,單片機(jī)最小系統(tǒng)模塊,液晶模塊和分頻模塊,因此對于焊接方面更是不可輕視,龐大的電路系統(tǒng)中只要出于一處的錯誤,則會對檢測造成很大的不便,而且電路的交線較多,對于各種鋒利的引腳要注意處理,否則會刺破帶有包皮的導(dǎo)線,則會對電路造成短路現(xiàn)象。
在制作硬件電路之前,我們先根據(jù)實(shí)際需要的功能劃分硬件模塊,并且在PROTEL里面畫出其硬件原理圖和PCB圖,檢查無誤后開始在萬用板上焊接。
在本頻率計(jì)的硬件調(diào)試中遇到了很多的問題。回想這些問題只要認(rèn)真多思考都是可以避免的,以下為主要的問題:
問題1:一開始三極管放大電路總是不能放大交流信號,輸出總是一個直流電壓
解決:經(jīng)過查找相關(guān)資料,發(fā)現(xiàn)三極管的1腳和3腳焊接反了剛好轉(zhuǎn)了180度,改正后便可正常工作。
問題2:開始的時(shí)候液晶屏幕總是顯示方格,不能正常顯示內(nèi)容
              解決: 經(jīng)過查找芯片手冊,知道LCD1602有一個管腳是專門負(fù)責(zé)調(diào)解對比度的,一開始的時(shí)候直接接高電平因此不能正常顯示,后來因引腳連接到一個電位計(jì)的中間抽頭,通過電位器就可以改變液晶的對比度。
5.2軟件調(diào)試
頻率計(jì)系統(tǒng)是一個比較復(fù)雜的數(shù)字型系統(tǒng),所以對于它的程序也較為復(fù)雜,所以在編寫程序和調(diào)試時(shí)出現(xiàn)了相對較多的問題。首先為了更好的測試效果,我最開始是直接在PROTUES軟件下進(jìn)行仿真,在確定無誤后,再把程序燒錄到實(shí)物中運(yùn)行。最后經(jīng)過多次的模塊子程序的修改,一步一步的完成,最終解決了軟件上的各種問題。在軟件的調(diào)試過程中主要遇到的問題如下:
問題:燒入程序后,LCD液晶顯示閃動,而且亮度不均勻。
解決:首先對調(diào)用的延時(shí)進(jìn)行逐漸修改,可以解決顯示閃動問題。其次,由于本作品使作動態(tài)掃描方式顯示的數(shù)字,動態(tài)掃描很快,人的肉眼是無法看出,但是調(diào)用的顯示程序時(shí),如果不在反回時(shí)屏蔽掉最后的附值,則會出現(xiàn)很亮的現(xiàn)象,所以在顯示的后面加了屏蔽子令,最后解決了此問題。


6.結(jié)論
通過這次畢業(yè)設(shè)計(jì),我學(xué)到了不少課本上沒有的知識,也鍛煉了自己的動手能力,將以前學(xué)過的零散的知識串到一起。經(jīng)過我長時(shí)間的設(shè)計(jì)及調(diào)試,本系統(tǒng)基本能實(shí)現(xiàn)頻率計(jì)系統(tǒng)的所有功能。不足之處有:1.硬件的穩(wěn)定性有待進(jìn)一步提高2.系統(tǒng)界面人性化還不足。
我的綜合設(shè)計(jì)主要涉及硬件和軟件兩方面的內(nèi)容,通過這些我的硬件和軟件開發(fā)能力都獲得了提高。首先硬件方面,基本了解了電子產(chǎn)品的開發(fā)流程和所要做的工作。基本掌握了Protel99SE原理圖的方法,并設(shè)計(jì)了一個單片機(jī)最小系統(tǒng)。通過開發(fā)板的設(shè)計(jì)和硬件搭建的過程,使我對51系單片機(jī)的接口有了更深層次的理解,熟悉了一些單片機(jī)常用的外圍電路引腳和連接方法,如LCD液晶等。并且我學(xué)會了分析問題解決問題的能力,加深了對所學(xué)理論知識的理解和運(yùn)用。我的動手能力得到了很大的提高,創(chuàng)新意識得到了鍛煉。
參考文獻(xiàn)
[1] 彭偉.單片機(jī)C語言程序設(shè)計(jì)實(shí)訓(xùn)100例.電子工業(yè)出版社.2009年
[2] 吳運(yùn)昌.模擬電子線路基礎(chǔ).廣州:華南理工大學(xué)出版社,2004年
[3] 閻石.?dāng)?shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,1997年
[4] 張曉麗等.?dāng)?shù)據(jù)結(jié)構(gòu)與算法.北京:機(jī)械工業(yè)出版社,2002年
[5] 馬忠梅等. ARM&Linux嵌入式系統(tǒng)教程.北京:北京航空航天大學(xué)出版社,2004年
[6] 李建忠.單片機(jī)原理及應(yīng)用.西安:西安電子科技大學(xué),2002年
[7] 韓志軍等.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2004
[8] 周潤景等. Proteus在MCS-51&ARM7系統(tǒng)中的應(yīng)用百例[M].電子工業(yè)出版社,2006
[9] 馬忠梅等.單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)[M].北京航空航天大學(xué)出版社,2006
[10]劉樹中,孫書膺,王春平.單片機(jī)和液晶顯示驅(qū)動器串行接口的實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007
1



附錄
系統(tǒng)整體原理圖
系統(tǒng)仿真圖

元件清單
名字
數(shù)量
STC89C52
1
30PF電容
2
10K電阻
1
1K電阻
1
0.1uf電容
3
10K排阻
1
DIP40插座
1
DIP14插座
1
DIP16插座
1
排針
1排
9018三極管
1
300歐姆電阻
1
68歐姆電阻
1
3K電阻
1
74HC14
1
輕觸按鍵
1
12M晶振
1
USB供電座子
1
1000UF電容
1
銅柱及螺帽
4
板子
1
LCD1602
1
74hc390
1
10K電位器
1




單片機(jī)源程序如下:
  1. //******************************************************************************************
  2. //連接框圖:       ___________________
  3. //                |              P1.0 |->RS
  4. //                |              P1.1 |->RW
  5. //                |              P1.2 |->E
  6. //                |              P0   |->DB
  7. //                |                        P3.4 |->1~9999hz的輸入
  8. //                |              P3.5 |->1~9999KHZ輸入 (分頻后)
  9. //******************************************************************************************
  10. #include <reg52.h>
  11. unsigned long int fre;
  12. unsigned char time;
  13. unsigned int count;
  14. unsigned int count1;

  15. //端口及函數(shù)說明----------------------------------------------------------------------------

  16. sbit   LCD_RS=P1^0;                //片選信號
  17. sbit   LCD_RW=P1^1;                //讀寫信號
  18. sbit   LCD_E=P1^2;                 //使能信號

  19. #define LCD_DB     P0              //數(shù)據(jù)信號
  20. unsigned char character[10]={0};//在屏幕上顯示的字符串
  21. unsigned char character_1[]={"fre= Hz"};
  22. unsigned char FLAG = 0;

  23. void LCD_init(void);//初始化函數(shù)  
  24. void LCD_write_command(unsigned char command);//寫指令函數(shù)            
  25. void LCD_write_data(unsigned char dat);//寫數(shù)據(jù)函數(shù)               
  26. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);//在某個屏幕位置上顯示一個字符,X(0-15),y(1-2)
  27. void delay_n40us(unsigned int n);//延時(shí)函數(shù)

  28. void timer_init();            //中斷初始化函數(shù)


  29. //-------------------------------------------------------------------------------

  30. void delay_n40us(unsigned int n)                              //延時(shí)函數(shù)
  31. {
  32.               unsigned int i;
  33.               unsigned char j;           
  34.               for(i=n;i>0;i--)
  35.               for(j=0;j<2;j++);         
  36. }

  37. void delay_1s()
  38. {
  39.               unsigned int i,j;
  40.               for(i = 0;i<100;i++)
  41.                             for(j = 0;j<1000;j++);
  42. }                                    

  43. void LCD_init(void)              //液晶初始化函數(shù)
  44. {
  45.               LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  46.               LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  47.               LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7              切記要寫三遍!!!!
  48.               LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
  49.               LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
  50.               LCD_write_command(0x01);//清除屏幕顯示               
  51.               delay_n40us(100);//清屏延時(shí)
  52. }

  53. void LCD_write_command(unsigned char dat)  //寫命令函數(shù)
  54. {
  55.               LCD_DB=dat;
  56.               LCD_RS=0;//指令            
  57.               LCD_RW=0;//寫入            
  58.               LCD_E=1; //使能              
  59.               LCD_E=0;
  60.               delay_n40us(1);//寫命令延時(shí)  
  61. }            

  62. void LCD_write_data(unsigned char dat)                //寫數(shù)據(jù)函數(shù)
  63. {
  64.               LCD_DB=dat;
  65.               LCD_RS=1;//數(shù)據(jù)               
  66.               LCD_RW=0;//寫入               
  67.               LCD_E=1;//使能
  68.               LCD_E=0;
  69.               delay_n40us(1);              //寫數(shù)據(jù)延時(shí)
  70. }

  71. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//顯示一個字符
  72. {
  73.               unsigned char address;
  74.               if(y==1)
  75.                        address=0x80+x;              //顯示在第一排的時(shí)候的x的地址
  76.               else
  77.                        address=0xc0+x;              //顯示在第二排的時(shí)候的x的地址
  78.               LCD_write_command(address);              //輸入地址
  79.               LCD_write_data(dat);                            //輸入數(shù)據(jù)
  80. }
  81. void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//顯示一個數(shù)字
  82. {
  83.               unsigned char address;
  84.               if(y==1)
  85.                        address=0x80+x;              //顯示在第一排的時(shí)候的x的地址
  86.               else
  87.                        address=0xc0+x;              //顯示在第二排的時(shí)候的x的地址
  88.               LCD_write_command(address);              //輸入地址
  89.               LCD_write_data(dat+48);                            //輸入數(shù)據(jù)
  90. }

  91. void dis_num(void)
  92. {
  93.               unsigned char i=0,j=0,k=0;
  94.               LCD_write_command(0x01);//清除屏幕顯示
  95.             
  96.               character[0] = fre/1000000;
  97.               character[1] = fre/100000%10;
  98.               character[2] = fre/10000%10;
  99.               character[3] = fre/1000%10;
  100.               character[4] = fre/100%10;
  101.               character[5] = fre/10%10;
  102.               character[6] = fre%10;
  103.     character[7] = 'H';
  104.               character[8] = 'z';
  105.             
  106.               for(i = 0;i<4;i++)                            //顯示fre
  107.               {
  108.                             LCD_disp_char(i+0,1,character_1[i]);
  109.               }
  110.               for(i = 0;i<10;i++)              //判斷第一個不為0的數(shù)
  111.               {
  112.                             if(character[i]!=0)
  113.                                           break;
  114.               }
  115.               k = 10-i-2;
  116.               for(j = 0;j<k;j++)              //顯示所有的數(shù)字
  117.               {
  118.                                           LCD_disp_num(4+j,1,character[i++]);            
  119.               }
  120.             
  121.     for(i = 5;i<7;i++)              //顯示Hz
  122.               {
  123.                             LCD_disp_char(j+4,1,character_1[i]);
  124.                             j++;
  125.               }
  126. }



  127. void main()
  128. {
  129.               unsigned char i;
  130.               LCD_init();
  131.               timer_init();             //定時(shí)/計(jì)數(shù)器初始化

  132.               for(i = 0;i<4;i++)
  133.               {
  134.                             LCD_disp_char(i+0,1,character_1[i]);
  135.               }
  136.               while(1)
  137.               {
  138.                             dis_num();         //顯示
  139.                             delay_1s();
  140.                                          
  141.               }                                                                                   
  142. }

  143. void timer_init(void)         //定時(shí)/計(jì)數(shù)器初始化
  144. {
  145.               TMOD=0x66;                //計(jì)數(shù)器0工作工作方式2,自動重裝初值
  146.               TH0=0;                    //計(jì)數(shù)器初值為0
  147.               TL0=0;
  148.               TR0=1;                    //計(jì)數(shù)器開始計(jì)數(shù)                 
  149.               ET0=1;                    //打開計(jì)數(shù)器0中斷  

  150.               TH1=0;                    //計(jì)數(shù)器初值為0
  151.               TL1=0;
  152.               TR1=1;                    //計(jì)數(shù)器開始計(jì)數(shù)                 
  153.               ET1=1;                    //打開計(jì)數(shù)器0中斷  

  154.               RCAP2H=(65536-62500)/256; //在程序初始化的時(shí)候給RCAP2L和RCAP2H賦值,
  155.               RCAP2L=(65536-62500)%256; //TH2和TL2將會在中斷產(chǎn)生時(shí)自動使TH2=RCAP2H,TL2=RCAP2L。
  156.               TH2=RCAP2H;               //12M晶振下每次中斷62.5ms
  157.               TL2=RCAP2L;
  158.               ET2=1;                    //打開定時(shí)器2中斷            
  159.               TR2=1;                    //定時(shí)器2開始計(jì)時(shí)
  160.               EA=1;                     //開總中斷  
  161. }
  162. //----------------------------------------------------------------
  163. void timer2(void) interrupt 5 //定時(shí)器2中斷(62.5ms)
  164. {
  165.               double temp;
  166.               time++;
  167.               TF2=0;                    //定時(shí)器2的中斷標(biāo)志位TF2不能夠由硬件清零,所以要在中斷服務(wù)程序中將其清零
  168.               if (time==16)             //定時(shí)1s時(shí)間到
  169.               {
  170.                  time=0;                //計(jì)時(shí)清0                           
  171. ……………………

  172. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
頻率計(jì).docx (538.27 KB, 下載次數(shù): 40)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色欧美片视频在线观看 | 午夜性色a√在线视频观看9 | 国产精品黄 | 成人在线亚洲 | 亚洲午夜电影 | 精品无码久久久久久久动漫 | 亚洲视频中文 | 国产精品爱久久久久久久 | 成人久久网 | 91精品国产一区二区三区 | 国产亚洲精品美女久久久久久久久久 | av在线免费网 | 狠狠干天天干 | 美女国内精品自产拍在线播放 | 一道本一区二区 | 91久久精品国产免费一区 | 国产精彩视频在线观看 | 精品国产一区二区三区免费 | 国产三级在线观看播放 | 国产极品粉嫩美女呻吟在线看人 | 日韩一三区 | 久久亚洲免费 | 欧美一级在线视频 | 欧美a在线 | 亚洲日韩中文字幕一区 | 亚洲成av人影片在线观看 | 久久高清国产视频 | 日本在线免费观看 | 国产高清在线精品一区二区三区 | 国产一区二区三区四区在线观看 | 亚洲综合成人网 | 国产成人av电影 | 99亚洲精品 | 欧美日韩在线观看视频网站 | 久久精品一级 | 亚洲精品91 | 欧美激情综合五月色丁香小说 | 天天拍夜夜爽 | 亚洲免费一区二区 | 国产精品v | 中文字幕国产精品 |