|
完整的pdf格式文檔51黑下載地址:
基于51單片機(jī)的信號(hào)發(fā)生器設(shè)計(jì)報(bào)告.pdf
(4.91 MB, 下載次數(shù): 39)
2018-5-31 08:44 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
摘要
本次設(shè)計(jì)利用單片機(jī) AT89C52采用程序設(shè)計(jì)方法產(chǎn)生三角波、正弦波、方波三種波形,再通過(guò) D/A轉(zhuǎn)換器 DAC0832將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),濾波放大,最終由示波器顯示出來(lái),能產(chǎn)生 1Hz—1kHz 的波形。通過(guò)鍵盤(pán)來(lái)控制三種波形的類(lèi)型選擇、撥碼開(kāi)關(guān)控制頻率的變化,并通過(guò)液晶屏 1602 顯示其各自的類(lèi)型以及數(shù)值,系統(tǒng)大致包括信號(hào)發(fā)生部分、數(shù) / 模轉(zhuǎn)換部分以及液晶顯示部分三部分。
本次設(shè)計(jì)是在 proteus 環(huán)境下搭建仿真電路圖并進(jìn)行模擬仿真。
本次設(shè)計(jì)可以產(chǎn)生 5HZ-50HZ的正弦波, 100HZ-1000HZ的方波, 25HZ-250HZ的三角波。
目 錄
1 緒 論........................................................................................ 1
1.1 選題意義............................................................................... 1
1.2 研究現(xiàn)狀............................................................................... 1
1.2.1 信號(hào)發(fā)生器的發(fā)展歷史.................................................... 1
1.2.2 信號(hào)發(fā)生器的發(fā)展特點(diǎn).................................................... 2
2 總體設(shè)計(jì)方案.............................................................................. 5
2.1 設(shè)計(jì)思路............................................................................... 5
2.1.1 設(shè)計(jì)內(nèi)容及要求.............................................................. 5
2.1.2 方案選擇及論證.............................................................. 5
2.2 方案結(jié)構(gòu)模塊劃分................................................................. 6
3 硬件電路的設(shè)計(jì)........................................................................... 9
3.1 主控電路及主控芯片的選擇................................................... 9
3.2 單片機(jī)的發(fā)展史.................................................................... 9
3.3 單片機(jī)的特點(diǎn)...................................................................... 10
3.4 89C51 單片機(jī)最小系統(tǒng)......................................................... 10
3.4.1 D/A 轉(zhuǎn)換電路............................................................... 14
3.4.2 按鍵輸入電路................................................................ 17
3.4.3 液晶顯示電路................................................................ 18
4 軟件設(shè)計(jì)與仿真......................................................................... 19
4.1 PROTEUS 簡(jiǎn)介................................................................... 19
4.2 仿真圖................................................................................ 20
4.3 原理圖................................................................................ 20
4.4 仿真結(jié)果圖......................................................................... 21
5總結(jié)......................................................................................... 25
致 謝.......................................................................................... 27
參考文獻(xiàn)....................................................................................... 29
6附錄......................................................................................... 31
1 緒 論
1.1 選題意義
隨著電子測(cè)量及其他部門(mén)對(duì)各類(lèi)信號(hào)發(fā)生器的廣泛需求及電子技術(shù)的迅速發(fā)展
促使信號(hào)發(fā)生器種類(lèi)增多,性能提高。尤其隨著 70 年代微處理器的出現(xiàn),更促使信號(hào)發(fā)生器向著自動(dòng)化、智能化方向發(fā)展。現(xiàn)在,許多信號(hào)發(fā)生器帶有微處理器,因而具
備了自校、自檢、自動(dòng)故障診斷和自動(dòng)波形形成和修正等功能,可以和控制計(jì)算機(jī)及 其他測(cè)量?jī)x器一起方便的構(gòu)成自動(dòng)測(cè)試系統(tǒng) [1] 。當(dāng)前信號(hào)發(fā)生器總的趨勢(shì)是向著寬頻率覆蓋、低功耗、高頻率精度、多功能、自動(dòng)化和智能化方向發(fā)展。
在科學(xué)研究、工程教育及生產(chǎn)實(shí)踐中,如工業(yè)過(guò)程控制、教學(xué)實(shí)驗(yàn)、機(jī)械振動(dòng)試驗(yàn)、動(dòng)態(tài)分析、材料試驗(yàn)、生物醫(yī)學(xué)等領(lǐng)域,常常需要用到低頻信號(hào)發(fā)生器。而在我們?nèi)粘I钪校约耙恍┛茖W(xué)研究中,鋸齒波和正弦波、矩形波信號(hào)是常用的基本測(cè)試信號(hào)。譬如在示波器、電視機(jī)等儀器中,為了使電子按照一定規(guī)律運(yùn)動(dòng),以利用熒光屏顯示圖像,常用到鋸齒波產(chǎn)生器作為時(shí)基電路。信號(hào)發(fā)生器作為一種通用的電子
儀器,在生產(chǎn)、科研、測(cè)控、通訊等領(lǐng)域都得到了廣泛的應(yīng)用。 但市面上能看到的儀
器在頻率精度、帶寬、波形種類(lèi)及程控方面都已不能滿足許多方面實(shí)際應(yīng)用的需求。加之各類(lèi)功能的半導(dǎo)體集成芯片的快速生產(chǎn),都使我們研制一種低功耗、寬頻帶,能產(chǎn)生多種波形并具有程控等低頻的信號(hào)發(fā)生器成為可能[3]。
1.2 研究現(xiàn)狀1.2.1 信號(hào)發(fā)生器的發(fā)展歷史
目前,市場(chǎng)上常見(jiàn)的波形發(fā)生器多為純硬件的搭接而成,且波形種類(lèi)有限,多為 鋸齒、正弦、方波、三角等波形。信號(hào)發(fā)生器作為一種常見(jiàn)的應(yīng)用電子儀器設(shè)備,傳 統(tǒng)的可以完全由硬件電路搭接而成。如采用 555 振蕩電路發(fā)生正弦波、三角波和方波的電路便是可取的路徑之一,不用依靠單片機(jī)。但是這種電路存在波形質(zhì)量差,控制 難,可調(diào)范圍小電路復(fù)雜和體積大等缺點(diǎn)。在科學(xué)研究和生產(chǎn)實(shí)踐中,如工業(yè)過(guò)程控 制,生物醫(yī)學(xué),地震模擬機(jī)械振動(dòng)等領(lǐng)域常常要用到低頻信號(hào)源,而由硬件電路構(gòu)成
的低頻信號(hào)其性能難以令人滿意,而且由于低頻信號(hào)源所需的 RC很大:大電阻,大電容在制作上有困難,參數(shù)的精度亦難以保證:體積大,漏電,損耗顯著更是其致命的
弱點(diǎn)。一旦工作需求功能有增加,則電路復(fù)雜程度會(huì)大大增加。
在 70 年代前,信號(hào)發(fā)生器主要有兩類(lèi):正弦波和脈沖波,而函數(shù)發(fā)生器介于兩類(lèi)之間,能夠提供正弦波、余弦波、方波、三角波、上弦波等幾種常用標(biāo)準(zhǔn)波形,產(chǎn)
生其它波形時(shí),需要采用較復(fù)雜的電路和機(jī)電結(jié)合的方法。這個(gè)時(shí)期的波形發(fā)生器多 采用模擬電子技術(shù),而且模擬器件構(gòu)成的電路存在著尺寸大、價(jià)格貴、功耗大等缺點(diǎn),并且要產(chǎn)生較為復(fù)雜的信號(hào)波形,則電路結(jié)構(gòu)非常復(fù)雜。同時(shí),主要表現(xiàn)為兩個(gè)突出問(wèn)題,一是通過(guò)電位器的調(diào)節(jié)來(lái)實(shí)現(xiàn)輸出頻率的調(diào)節(jié),因此很難將頻率調(diào)到某一固定 值二是脈沖的占空比不可調(diào)節(jié) [13] 。
在 70 年代后,微處理器的出現(xiàn),可以利用處理器、 A/D/ 和 D/A ,硬件和軟件使波形發(fā)生器的功能擴(kuò)大,產(chǎn)生更加復(fù)雜的波形。這時(shí)期的波形發(fā)生器多以軟件為主,實(shí)
質(zhì)是采用微處理器對(duì) DAC的程序控制,就可以得到各種簡(jiǎn)單的波形。
90 年代末,出現(xiàn)幾種真正高性能、高價(jià)格的函數(shù)發(fā)生器、但是 HP 公司推出了型號(hào)為 HP770S的信號(hào)模擬裝置系統(tǒng),它由 HP8770A任意波形數(shù)字化和 HP1776A波形發(fā)生軟件組成。HP8770A實(shí)際上也只能產(chǎn)生 8 中波形,而且價(jià)格昂貴。不久以后,Analogic 公司推出了型號(hào)為 Data-2020 的多波形合成器, Lecroy 公司生產(chǎn)的型號(hào)為 9100 的任意波形發(fā)生器等。
二十一世紀(jì), 隨著集成電路技術(shù)的高速發(fā)展, 出現(xiàn)了多種工作頻率可過(guò) GHz的 DDS 芯片,同時(shí)也推動(dòng)了函數(shù)波形發(fā)生器的發(fā)展, 2003 年,Agilent 的產(chǎn)品 33220A 能夠產(chǎn)生 17 種波形,最高頻率可達(dá) 20M,2005 年的產(chǎn)品 N6030A 能夠產(chǎn)生高達(dá) 500MHZ的頻率,采樣的頻率可達(dá) 1.25GHz。由上面的產(chǎn)品可以看出,函數(shù)波形發(fā)生器發(fā)展很快 [14] 。
1.2.2 信號(hào)發(fā)生器的發(fā)展特點(diǎn)
而近幾年來(lái),國(guó)際上波形發(fā)生器技術(shù)發(fā)展主要體現(xiàn)在以下幾個(gè)方面:
( 1)過(guò)去由于頻率很低應(yīng)用的范圍比較狹小,輸出波形頻率的提高,使得波形發(fā)生器能應(yīng)用于越來(lái)越廣的領(lǐng)域。波形發(fā)生器軟件的開(kāi)發(fā)正使波形數(shù)據(jù)的輸入變得更加 方便和容易。波形發(fā)生器通常允許用一系列的點(diǎn)、直線和固定的函數(shù)段把波形數(shù)據(jù)存 入存儲(chǔ)器。同時(shí)可以利用一種強(qiáng)有力的數(shù)學(xué)方程輸入方式,復(fù)雜的波形可以由幾個(gè)比 較簡(jiǎn)單的公式復(fù)合成 v=f (t) 形式的波形方程的數(shù)學(xué)表達(dá)式產(chǎn)生。從而促進(jìn)了函數(shù)波形發(fā)生器向任意波形發(fā)生器的發(fā)展,各種計(jì)算機(jī)語(yǔ)言的飛速發(fā)展也對(duì)任意波形發(fā)生器軟
件技術(shù)起到了推動(dòng)作用。目前可以利用可視化編程語(yǔ)言 (如 Visual Basic ,Visual C 等等)
編寫(xiě)任意波形發(fā)生器的軟面板,這樣允許從計(jì)算機(jī)顯示屏上輸入任意波形,來(lái)實(shí)現(xiàn)波形的輸入。
( 2)與 VXI 資源結(jié)合。目前,波形發(fā)生器由獨(dú)立的臺(tái)式儀器和適用于個(gè)人計(jì)算機(jī) 的插卡以及新近開(kāi)發(fā)的 VXI 模塊。由于 VXI 總線的逐漸成熟和對(duì)測(cè)量?jī)x器的高要求, 在很多領(lǐng)域需要使用 VXI 系統(tǒng)測(cè)量產(chǎn)生復(fù)雜的波形, VXI 的系統(tǒng)資源提供了明顯的優(yōu)越性,但由于開(kāi)發(fā) VXI 模塊的周期長(zhǎng),而且需要專(zhuān)門(mén)的 VXI 機(jī)箱的配套使用,使得波形發(fā)生器 VXI 模塊僅限于航空、軍事及國(guó)防等大型領(lǐng)域。在民用方面, VXI 模塊遠(yuǎn)遠(yuǎn)不如臺(tái)式儀器更為方便。
( 3)隨著信息技術(shù)蓬勃發(fā)展,臺(tái)式儀器在走了一段下坡路之后,又重新繁榮起來(lái)。不過(guò)現(xiàn)在新的臺(tái)式儀器的形態(tài),和幾年前的己有很大的不同。這些新一代臺(tái)式儀器具有多種特性,可以執(zhí)行多種功能。而且外形尺寸與價(jià)格,都比過(guò)去的類(lèi)似產(chǎn)品減少了 一半。
2 總體設(shè)計(jì)方案2.1 設(shè)計(jì)思路
由于要求達(dá)到模擬信號(hào)波形發(fā)生,因此要由 D/A 轉(zhuǎn)換芯片來(lái)完成此項(xiàng)任務(wù),由基準(zhǔn)電路來(lái)實(shí)現(xiàn)輸出波形的幅度可調(diào),通過(guò)電位器調(diào)節(jié)波形的變化。經(jīng)過(guò)數(shù)模轉(zhuǎn)換電路
輸出的信號(hào)為電流形式,因此需要加電流 /電壓轉(zhuǎn)換電路來(lái)改變輸出信號(hào)的形式。
2.1.1 設(shè)計(jì)內(nèi)容及要求
(1)原始數(shù)據(jù)
1)信號(hào)發(fā)生器的頻率范圍: 1Hz~1KHz
2)信號(hào)發(fā)生器的幅度范圍: 100mV ~5V
(2)技術(shù)要求:
1 )能夠輸出正弦、三角波和方波,并且輸出信號(hào)的頻率和幅度可調(diào)
2 )具有良好的人機(jī)界面
(3)工作要求:
1)采用 proteus 軟件設(shè)計(jì)基于 MCS-51系列單片機(jī)的信號(hào)發(fā)生器
2)采用相關(guān)語(yǔ)言編寫(xiě)應(yīng)用程序并調(diào)試
3)對(duì)系統(tǒng)進(jìn)行測(cè)試和結(jié)果分析
4)寫(xiě)出論文方案選擇及論證
2.1.2 方案選擇及論證
方案一:用分立元件組成的函數(shù)發(fā)生器,通常是單函數(shù)發(fā)生器且頻率不高,其工作不很穩(wěn)定,不易調(diào)試。
方案二:可以由晶體管、運(yùn)放 IC 等通用器件制作,更多的則是用專(zhuān)門(mén)的函數(shù)信號(hào)
發(fā)生器 IC 產(chǎn)生。早期的函數(shù)信號(hào)發(fā)生器 IC,如 L8038、BA205、XR2207/2209 等,它們的功能較少,精度不高,頻率上限只有 300kHz,無(wú)法產(chǎn)生更高頻率的信號(hào),調(diào)節(jié)方式也不夠靈活,頻率和占空比不能獨(dú)立調(diào)節(jié),二者互相影響。
方案三:利用單片集成芯片的函數(shù)發(fā)生器,能產(chǎn)生多種波形,達(dá)到較高的頻率且
易于調(diào)試。鑒于此,美國(guó)馬克西姆公司開(kāi)發(fā)了新一代函數(shù)信號(hào)發(fā)生器 ICMAX038 , 它克服了上述方案二中芯片的缺點(diǎn),可以達(dá)到更高的技術(shù)指標(biāo),是上述芯片望塵莫及的。
MAX038 頻率高、精度好,因此它被稱為高頻精密函數(shù)信號(hào)發(fā)生器 IC。在鎖相環(huán)、壓控振蕩器、頻率合成器、脈寬調(diào)制器等電路的設(shè)計(jì)上, MAX038 都是優(yōu)選的器件。
方案四:利用專(zhuān)用直接數(shù)字合成 DDS 芯片的函數(shù)發(fā)生器,能產(chǎn)生任意波形并達(dá)到很高的頻率,但成本較高。
方案五:采用函數(shù)信號(hào)發(fā)生器 ICL8038 集成模擬芯片,它是一種可以同時(shí)產(chǎn)生方波、三角波、正弦波的專(zhuān)用集成電路。但是這種模塊產(chǎn)生的波形都不是純凈的波形, 會(huì)寄生一些高次諧波分量,采用其他的措施雖可濾除一些,但不能完全濾除掉,且價(jià) 格較高。
方案六: 采用 AT89C51 單片機(jī)和 DAC0832 數(shù)模轉(zhuǎn)換器相結(jié)合的電路來(lái)產(chǎn)生波形, 由于是軟件濾波,所以不會(huì)有寄生的高次諧波分量,生成的波形比較純凈。它的特點(diǎn)
是價(jià)格低、性能高,在低頻范圍內(nèi)穩(wěn)定性好、操作方便、體積小、耗電少,適合學(xué)生
畢業(yè)設(shè)計(jì)。
經(jīng)比較,方案六既可滿足畢業(yè)設(shè)計(jì)的基本要求又能充分發(fā)揮其優(yōu)勢(shì),電路簡(jiǎn)單,易控制,性價(jià)比高,所以采用此方案。
2.2 方案結(jié)構(gòu)模塊劃分
本次設(shè)計(jì)所研究的就是用單片機(jī)將某種波形所對(duì)應(yīng)的數(shù)字量進(jìn)行輸出,再通過(guò)
D/A 轉(zhuǎn)換器轉(zhuǎn)換輸出一組連續(xù)變化的 5V 的電壓脈沖值,同時(shí)再通過(guò)液晶顯示部分顯示其頻率值和波形名稱 [10] 。在設(shè)計(jì)時(shí)分塊來(lái)做,分為 D/A 轉(zhuǎn)換,單片機(jī)系統(tǒng),鍵盤(pán)控制和液晶顯示 4 個(gè)主要模塊,最后通過(guò)聯(lián)調(diào)仿真,做出電路板成品,從而簡(jiǎn)化人機(jī)交互的問(wèn)題,具體設(shè)計(jì)模塊如圖 2-1 所示。
復(fù)位電路 D/A 轉(zhuǎn)化電路
晶振電路
按鍵輸入電路
51 單片機(jī)
液晶顯示電路
信號(hào)輸出電路
圖 2-1結(jié)構(gòu)模塊劃分
單片機(jī)最小系統(tǒng):包括時(shí)鐘電路和復(fù)位電路。
鍵盤(pán)控制電路:用按鍵來(lái)控制輸出波形的種類(lèi)和調(diào)節(jié)頻率。
D/A 轉(zhuǎn)換電路:?jiǎn)纹瑱C(jī)把待轉(zhuǎn)換的數(shù)字量輸送到 DAC0832來(lái)把數(shù)字信號(hào)轉(zhuǎn)換為模
擬信號(hào)。
顯示電路:采用液晶顯示器顯示波形的名稱和頻率。
系統(tǒng)要求是便攜式低功耗的,所以在硬件電路建立前首先粗略計(jì)算一下整個(gè)系統(tǒng)所需的功耗,考慮單片機(jī)部分功耗的大小,選擇合適的器件以及參數(shù)。
3 硬件電路的設(shè)計(jì)3.1 主控電路及主控芯片的選擇
單片機(jī)即單片微型計(jì)算機(jī)( Single CHip Microcomputer )是把組成微型計(jì)算機(jī)的各種功能部件,包括中央處理單元( CPU)、隨機(jī)存儲(chǔ)器( RAM )、程序存儲(chǔ)器( ROM )、定時(shí)器/計(jì)數(shù)器及輸入輸出接口等部件都集成在一塊芯片上。是一種集成度高、性價(jià)比
優(yōu)越、質(zhì)量小、體積小的微型計(jì)算機(jī)。單片機(jī)按其使用目的可以分為通用和專(zhuān)用兩種類(lèi)型。通用單片機(jī)是一種基本芯片,內(nèi)部功能及資源豐富,性能全面,適應(yīng)性強(qiáng)可覆蓋多種用途。用戶可以根據(jù)需要設(shè)計(jì)成各種不同的單片機(jī)控制系統(tǒng),即有一個(gè)再設(shè)計(jì)的過(guò)程。專(zhuān)用型單片機(jī)在設(shè)計(jì)時(shí)已對(duì)系統(tǒng)結(jié)構(gòu)進(jìn)行了簡(jiǎn)化,對(duì)軟、硬件進(jìn)行了優(yōu)化,可靠性高,成本低,但是這類(lèi)單片機(jī)功能單一,通常是針對(duì)某一特定的產(chǎn)品。本設(shè)計(jì)
應(yīng)采用通用型單片機(jī)。
隨著半導(dǎo)體集成工藝的不斷發(fā)展,單片機(jī)也正朝著 CMOS 化、低功耗、體積小、大容量、高性能低價(jià)格和外圍電路內(nèi)裝化等幾個(gè)方向發(fā)展。在單片機(jī)家族中, Intel 公司推出的 MCS-51 系列中的 80C51 是其中的佼佼者。MCS-51 系列單片機(jī)是 8 位單片機(jī)中應(yīng)用范圍最廣的一類(lèi)單片機(jī)。近幾年來(lái),許多單片機(jī)開(kāi)發(fā)廠商也推出了許多基于
80C51 單片機(jī)內(nèi)核的擴(kuò)展型單片機(jī),產(chǎn)品在保持與 51 單片機(jī)兼容的基礎(chǔ)上改善了很多 特性,性能各異。常用的單片機(jī)有很多種: Intel8051 和 8751 系列、Motorola 的 MC6801 系列、Atmel 的 AT89 系列、臺(tái)灣 Winbond( 華邦)W7 和 W78 系列、荷蘭 PHilips 的 51LPC 和 LPC900 系列、ZILOG 的 Z8 系列等。本設(shè)計(jì)中最終選用了 ATMEL 公 司 的 AT89C51 單片機(jī)。 AT89C51 單片機(jī)是美國(guó) ATMEL 公司推出的低功耗 /低電壓、高性能的 8 位單片機(jī),片內(nèi)含 4KBFlasH 程序存儲(chǔ)器,它采用了 CMOS 工藝和 ATMEL 公司的高密度非易失性存儲(chǔ)器( NURAM )技術(shù),該存儲(chǔ)器的全稱為閃速可編程可擦除只讀存儲(chǔ)器
(FPEROM,F(xiàn)lasHProgrammable and Erasable Read Only Memor)y,其輸出引腳和指令
系統(tǒng)與標(biāo)準(zhǔn) MCS-51 系統(tǒng)兼容。由于將多功能 8 位 CPU 和閃爍存儲(chǔ)器組合在單個(gè)芯片中,是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案
[15]。
3.2 單片機(jī)的發(fā)展史
單片機(jī)誕生于 20 世紀(jì) 70 年代末,經(jīng)歷了 SCM、MCU 、SoC 三大階段。起初模型
1. SCM 即單片微型計(jì)算機(jī)( Single Chip Microcomputer)階段,主要是尋求最佳的
單片形態(tài)嵌入式系統(tǒng)的最佳體系結(jié)構(gòu)。 “創(chuàng)新模式”獲得成功,奠定了 SCM 與通用計(jì)算機(jī)完全不同的發(fā)展道路。在開(kāi)創(chuàng)嵌入式系統(tǒng)獨(dú)立發(fā)展道路上, Intel 公司功不可沒(méi)。
2. MCU 即微控制器( Micro Controller Unit )階段,主要的技術(shù)發(fā)展方向是,不斷擴(kuò)展?jié)M足嵌入式應(yīng)用時(shí),對(duì)象系統(tǒng)要求的各種外圍電路與接口電路,突顯其對(duì)象的智
能化控制能力。 它所涉及的領(lǐng)域都與對(duì)象系統(tǒng)相關(guān), 因此,發(fā)展 MCU的重任不可避免地落在電氣、電子技術(shù)廠家。從這一角度來(lái)看, Intel 逐漸淡出 MCU 的發(fā)展也有其客觀因素。在發(fā)展MCU方面,最著名的廠家當(dāng)數(shù)Philips 公司。
Philips 公司以其在嵌入式應(yīng)用方面的巨大優(yōu)勢(shì), 將 MCS-51 從單片微型計(jì)算機(jī)迅速發(fā)展到微控制器。 因此,當(dāng)我們回顧嵌入式系統(tǒng)發(fā)展道路時(shí), 不要忘記 Intel 和 Philips 的歷史功績(jī)。
嵌入式系統(tǒng)
單片機(jī)是嵌入式系統(tǒng)的獨(dú)立發(fā)展之路, 向 MCU 階段發(fā)展的重要因素, 就是尋求應(yīng)用系統(tǒng)在芯片上的最大化解決:因此,專(zhuān)用單片機(jī)的發(fā)展自然形成了 SoC 化趨勢(shì)。隨著微電子技術(shù)、 IC 設(shè)計(jì)、EDA 工具的發(fā)展, 基于 SoC 的單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)會(huì)有較大的發(fā)展。
因此,對(duì)單片機(jī)的理解可以從單片微型計(jì)算機(jī)、單片微控制器延伸到單片應(yīng)用系統(tǒng)。
3.3 單片機(jī)的特點(diǎn)
1 . 單片機(jī)的存儲(chǔ)器 ROM 和 RAM 時(shí)嚴(yán)格區(qū)分的。 ROM 稱為程序存儲(chǔ)器, 只存放程序,固定常數(shù),及數(shù)據(jù)表格。 RAM 則為數(shù)據(jù)存儲(chǔ)器,用作工作區(qū)及存放用戶數(shù)據(jù)。
2 . 采用面向控制的指令系統(tǒng)。為滿足控制需要,單片機(jī)有更強(qiáng)的邏輯控制能力特別是單片機(jī)具有很強(qiáng)的位處理能力。
3 . 單片機(jī)的 I/O 口通常時(shí)多功能的。由于單片機(jī)芯片上引腳數(shù)目有限,為了解決實(shí)際引腳數(shù)和需要的信號(hào)線的矛盾,采用了引腳功能復(fù)用的方法,引腳處于何種功能 可由指令來(lái)設(shè)置或由機(jī)器狀態(tài)來(lái)區(qū)分。
4 . 單片機(jī)的外部擴(kuò)展能力很強(qiáng)。在內(nèi)部的各種功能部件不能滿足應(yīng)用的需求時(shí),均可在外部進(jìn)行擴(kuò)展,與許多通用的微機(jī)接口芯片兼容,給應(yīng)用系統(tǒng)設(shè)計(jì)帶來(lái)了很大的方便[14] 。
3.4 89C51 單片機(jī)最小系統(tǒng)
51 單片機(jī)是對(duì)目前所有兼容 intel 8031 指令系統(tǒng)的單片機(jī)的統(tǒng)稱。 該系列單片機(jī)的始祖是 intel 的 8031 單片機(jī),后來(lái)隨著技術(shù)的發(fā)展,成為目前廣泛應(yīng)用的8為單片機(jī)之一。單片機(jī)是在一塊芯片內(nèi)集成了 CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能 I/O口等計(jì)算機(jī)所需要的基本功能部件的大規(guī)模集成電路,又稱為 MCU。51 系列單片機(jī)內(nèi)包含以下幾個(gè)部件:
圖 3-1STC89C52RC 單 片 機(jī)
STC89C52RC 本身內(nèi)含 40 個(gè)引腳, 32 個(gè)外部雙向輸入 /輸出( I/O)端口,同時(shí)內(nèi)含 2 個(gè)外中端口, 3 個(gè) 16 位可編程定時(shí)計(jì)數(shù)器 ,2 個(gè)全雙工串行通信口, STC89C51RC 可以按照常規(guī)方法進(jìn)行編程, 但不可以在線編程。 其將通用的微處理器和 Flash 存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫(xiě)的 Flash 存儲(chǔ)器可有效地降低開(kāi)發(fā)成本 [9] 。
STC89C52RC 的主要特性如表 3-2 所示:
STC89C52R為C 40 腳雙列直插封裝的 8 位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的 C51內(nèi)核,
在內(nèi)部功能及管腳排布上與通用的 8xc52 相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。
功能包括對(duì)會(huì)聚主 IC 內(nèi)部寄存器、數(shù)據(jù) RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅外遙控信號(hào) IR 的接收解碼及與主板 CPU通信等。主要管腳有:XTAL1(19 腳)和 XTAL2( 18 腳)為振蕩器輸入輸出端口,外接 12MHz晶振。
RST/Vpd(9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。 VCC( 40 腳)和 VSS
(20 腳)為供電端口,分別接 +5V 電源的正負(fù)端。 P0~P3 為可編程通用 I/O 腳,其功能用途由軟件定義,在本設(shè)計(jì)中, P0 端口( 32~39腳)被定義為 N1 功能控制端口,分別與 N1 的相應(yīng)功能管腳相連接, 13 腳定義為 IR 輸入端, 10 腳和 11 腳定義為 I2C 總線控制端口,分別連接 N1的 SDAS(18 腳)和 SCLS(19 腳)端口, 12 腳、27 腳及 28腳定義為握手信號(hào)功能端口,連接主板 CPU的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì) 聚調(diào)整狀態(tài)進(jìn)入的控制功能。
P0 口: P0 口是一組 8 位漏極開(kāi)路型雙向 I/O 口,也即地址 / 數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng) 8 個(gè) TTL 邏輯門(mén)電路,對(duì)端口 P0 寫(xiě)“ 1”時(shí),可作為高阻抗輸入端用。在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)
轉(zhuǎn)換地址(低 8 位)和數(shù)據(jù)總線復(fù)用,在訪問(wèn)期間激活內(nèi)部上拉電阻。在 Flash 編程時(shí), P0 口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電
阻。
P1 口:P1 是一個(gè)帶內(nèi)部上拉電阻的 8 位雙向 I/O 口,P1 的輸出緩沖級(jí)可驅(qū)動(dòng) (吸
收或輸出電流) 4 個(gè) TTL 邏輯門(mén)電路。對(duì)端口寫(xiě)“ 1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被
外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流 (IIL) 。與 AT89C51不同之處是, P1.0 和 P1.1 還可分
別作為定時(shí) / 計(jì)數(shù)器 2 的外部計(jì)數(shù)輸入( P1.0/T2 )和輸入( P1.1/T2EX)。Flash 編程和程序校驗(yàn)期間,P1 接收低8 位地址。
P2 口: P2 是一個(gè)帶有內(nèi)部上拉電阻的 8 位雙向 I/O 口, P2 的輸出緩沖級(jí)可驅(qū)動(dòng)
(吸收或輸出電流) 4 個(gè) TTL邏輯門(mén)電路。 對(duì)端口 P2 寫(xiě)“ 1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)
引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流 (IIL) 。在訪問(wèn)外部程序存儲(chǔ)器或 16 位地址的
外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行 MOVX@DPT指R 令)時(shí), P2 口送出高 8 位地址數(shù)據(jù)。在訪問(wèn)
8 位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行 MOVX@RI指令)時(shí), P2 口輸出 P2 鎖存器的內(nèi)容。
Flash 編程或校驗(yàn)時(shí), P2 亦接收高位地址和一些控制信號(hào)。
P3 口:P3 口是一組帶有內(nèi)部上拉電阻的 8 位雙向 I/O 口。P3 口輸出緩沖級(jí)可驅(qū)動(dòng)
(吸收或輸出電流) 4 個(gè) TTL邏輯門(mén)電路。 對(duì) P3 口寫(xiě)入“ 1”時(shí), 它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時(shí),被外部拉低的 P3 口將用上拉電阻輸出電流( IIL )。 P3 口除了作為一般的 I/O 口線外,更重要的用途是它的第二功能 P3 口還接收一些用于
Flash 閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。
RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí), RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。
ALE/PROG當(dāng): 訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí), ALE(地址鎖存允許)輸出脈
沖用于鎖存地址的低 8 位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的 1/6 輸出固定的
脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù) 存儲(chǔ)器時(shí)將跳過(guò)一個(gè) AL脈沖。對(duì) Flash 存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖
(PRO)G。如有必要,可通過(guò)對(duì)特殊功能寄存器( SFR)區(qū)中的 8EH單元的 D0位置位,可禁止 ALE操作。該位置位后,只有一條 MOVX和 MOVC指令才能將 ALE激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE禁止位無(wú)效。
PSEN:程序儲(chǔ)存允許( PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào), 當(dāng) STC89C51RC由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次 PSEN有效,即輸出兩個(gè)脈 沖。在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳過(guò)兩次 PSEN信號(hào)。
EA/VPP:外部訪問(wèn)允許。 欲使 CPU僅訪問(wèn)外部程序存儲(chǔ)器 (地址為 0000H—FFFFH),
EA端必須保持低電平(接地) 。需注意的是:如果加密位 LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存 EA端狀態(tài)。如 EA端為高電平(接 Vcc 端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。
Flash 存儲(chǔ)器編程時(shí), 該引腳加上 +12V的編程允許電源 Vpp,當(dāng)然這必須是該器件是使用 12V編程電壓 Vpp。
XTAL1:振蕩器反相放大器的及內(nèi)部時(shí)鐘發(fā)生器的輸入端。XTAL2:振蕩器反相放大器的輸出端。
單片機(jī)最小原理圖如圖 3-3 所示。
單片機(jī)最小系統(tǒng)說(shuō)明:
圖 3-3 單片機(jī)最小系統(tǒng)
時(shí)鐘信號(hào)的產(chǎn)生:在 MCS-51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片
引腳 XTAL1,其輸出端為引腳 XTAL2。而在芯片的外部, XTAL1和 XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器,這就是單片機(jī)的時(shí)鐘振蕩電路。
時(shí)鐘電路產(chǎn)生的振蕩脈沖經(jīng)過(guò)觸發(fā)器進(jìn)行二分頻之后,才成為單片機(jī)的時(shí)鐘脈沖信號(hào)。
一般地,電容 C2和 C3取 30pF 左右,晶體的振蕩頻率范圍是 1.2-12MHz。如果晶體振蕩頻率高,則系統(tǒng)的時(shí)鐘頻率也高,單片機(jī)的運(yùn)行速度也就快。
單片機(jī)復(fù)位使 CPU和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài)下,并從 這個(gè)狀態(tài)開(kāi)始工作。單片機(jī)復(fù)位條件:必須使 9 腳加上持續(xù)兩個(gè)機(jī)器周期(即 24 個(gè)振蕩周期)的高電平。
3.4.1 D/A 轉(zhuǎn)換電路
DAC0832是 8 分辨率的 D/A 轉(zhuǎn)換集成芯片。與微處理器完全兼容。這個(gè) DA芯片以其價(jià)格低廉、接口簡(jiǎn)單、轉(zhuǎn)換控制容易等優(yōu)點(diǎn),在單片機(jī)應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。
D/A 轉(zhuǎn)換器由 8 位輸入鎖存器、8 位 DAC寄存器、 8 位D/A 轉(zhuǎn)換電路及轉(zhuǎn)換控制電路構(gòu)
成。
主要參數(shù)
* 分辨率為 8 位;
* 電流穩(wěn)定時(shí)間 1us;
* 可單緩沖、雙緩沖或直接數(shù)字輸入;
* 只需在滿量程下調(diào)整其線性度;
* 單一電源供電( +5V~+15V);
* 低功耗, 20mW。
* D0 ~D7: 8 位數(shù)據(jù)輸入線, TTL 電平,有效時(shí)間應(yīng)大于 90ns( 否則鎖存器的數(shù)據(jù)會(huì)出錯(cuò)) ;
* ILE :數(shù)據(jù)鎖存允許控制信號(hào)輸入線,高電平有效;
* CS :片選信號(hào)輸入線(選通數(shù)據(jù)鎖存器) ,低電平有效;
* WR1:數(shù)據(jù)鎖存器寫(xiě)選通輸入線,負(fù)脈沖(脈寬應(yīng)大于 500ns)有效。由 ILE 、
CS、WR1的邏輯組合產(chǎn)生 LE1,當(dāng) LE1 為高電平時(shí), 數(shù)據(jù)鎖存器狀態(tài)隨輸入數(shù)據(jù)線變換,
LE1 的負(fù)跳變時(shí)將輸入數(shù)據(jù)鎖存;
* XFER:數(shù)據(jù)傳輸控制信號(hào)輸入線,低電平有效,負(fù)脈沖(脈寬應(yīng)大于 500ns)有
效;
* WR:2
DAC寄存器選通輸入線,負(fù)脈沖(脈寬應(yīng)大于 500ns)有效。由 WR、2
XFER
的邏輯組合產(chǎn)生 LE2,當(dāng) LE2 為高電平時(shí), DAC寄存器的輸出隨寄存器的輸入而變化,
LE2 的負(fù)跳變時(shí)將數(shù)據(jù)鎖存器的內(nèi)容打入 DAC寄存器并開(kāi)始 D/A 轉(zhuǎn)換。
* IOUT1 :電流輸出端 1,其值隨 DAC寄存器的內(nèi)容線性變化;
* IOUT2 :電流輸出端 2,其值與 IOUT1值之和為一常數(shù);
* Rfb :反饋信號(hào)輸入線,改變 Rfb 端外接電阻值可調(diào)整轉(zhuǎn)換滿量程精度;
* Vcc :電源輸入端,Vcc 的范圍為 +5V~+15V;
* VREF:基準(zhǔn)電壓輸入線, VREF的范圍為 -10V~+10V;
* AGND:模擬信號(hào)地;
* DGND:數(shù)字信號(hào)地。
工作方式
根據(jù)對(duì) DAC0832的數(shù)據(jù)鎖存器和 DAC寄存器的不同的控制方式, DAC0832有三種工作方式:直通方式、單緩沖方式和雙緩沖方式。
DAC0832引腳功能電路應(yīng)用原理圖 DAC0832是采樣頻率為八位的 D/A 轉(zhuǎn)換芯片,集成電路內(nèi)有兩級(jí)輸入寄存器,使 DAC0832芯片具備雙緩沖、單緩沖和直通三種輸入方
式,以便適于各種電路的需要 ( 如要求多路 D/A 異步輸入、同步轉(zhuǎn)換等 ) 。所以這個(gè)芯片的應(yīng)用很廣泛 , 關(guān)于 DAC0832應(yīng)用的一些重要資料見(jiàn)下圖: D/A 轉(zhuǎn)換結(jié)果采用電流形式輸出。若需要相應(yīng)的模擬電壓信號(hào),可通過(guò)一個(gè)高輸入阻抗的線性運(yùn)算放大器實(shí)現(xiàn)。 運(yùn)放的反饋電阻可通過(guò) RFB 端引用片內(nèi)固有電阻,也可外接。 DAC0832邏輯輸入滿足TTL 電平,可直接與 TTL 電路或微機(jī)電路連接。
DAC0832引腳功能說(shuō)明:
DI0~DI7:數(shù)據(jù)輸入線, TLL 電平。
ILE :數(shù)據(jù)鎖存允許控制信號(hào)輸入線,高電平有效。 CS:片選信號(hào)輸入線,低電平有效。
WR:1 為輸入寄存器的寫(xiě)選通信號(hào)。
XFER:數(shù)據(jù)傳送控制信號(hào)輸入線,低電平有效。
WR:2 為 DAC寄存器寫(xiě)選通輸入線。
Iout1: 電流輸出線。當(dāng)輸入全為 1 時(shí) Iout1 最大。
Iout2: 電流輸出線。其值與 Iout1 之和為一常數(shù)。
Rfb: 反饋信號(hào)輸入線 , 芯片內(nèi)部有反饋電阻 .
Vcc: 電源輸入線 (+5v~+15v)
Vref: 基準(zhǔn)電壓輸入線 (-10v~+10v)
AGND模:
DGND數(shù):
擬地 , 摸擬信號(hào)和基準(zhǔn)電源的參考地 .
字地 , 兩種地線在基準(zhǔn)電源處共地比較好 .
圖 3-4 數(shù)模轉(zhuǎn)換模塊電路圖
3.4.2 按鍵輸入電路
圖 3-5 運(yùn)放模塊電路圖
按鍵是由一組按壓式或觸摸式開(kāi)關(guān)構(gòu)成的陣列,是一種常用的輸入設(shè)備。鍵盤(pán)可分為編碼式鍵盤(pán)和非編碼式鍵盤(pán)兩種。
1. 編碼鍵盤(pán)通過(guò)硬件電路產(chǎn)生被按按鍵的鍵碼, 這種鍵盤(pán)所需程序簡(jiǎn)單, 但硬件電路復(fù)雜、價(jià)格昂貴通常不被單片機(jī)系統(tǒng)采用。
2. 非編碼鍵盤(pán)常用一些按鍵排列成行列矩陣, 其硬件邏輯與按鍵編碼不存在嚴(yán)格的對(duì)應(yīng)關(guān)系,而要由所用的程序來(lái)決定。非編碼鍵盤(pán)的硬件接口簡(jiǎn)單,但是要占用較多 的 CPU時(shí)間,通常采用可編程鍵盤(pán)管理芯片來(lái)克服這個(gè)缺點(diǎn)。本設(shè)計(jì)使用兩種按鍵,
一種是按鍵式非編碼鍵盤(pán)和輕觸式非編碼開(kāi)關(guān)。
在接線時(shí)由于有四個(gè)引腳,連接時(shí)需要用萬(wàn)用表進(jìn)行測(cè)量,然后接通兩個(gè)引腳,原理圖如下。
要進(jìn)行數(shù)據(jù)的計(jì)算就必須先進(jìn)行數(shù)據(jù)的輸入,也就必須確定按鍵輸入的數(shù)值是什么,這就需要對(duì)鍵盤(pán)進(jìn)行掃描,從而確定究竟是哪個(gè)鍵按下。
3.4.3 液晶顯示電路
圖 3-6 按鍵電路
LCD顯示模塊的設(shè)計(jì) 通過(guò)液晶 1602 顯示輸出的波形、頻率 1602 的八位數(shù)據(jù)端接單片機(jī)的 P1 口 其三個(gè)使能端 RS、RW、E 分別接單片機(jī)的 P2.2—P.4。通過(guò)軟件控制液晶屏可以顯示波形的種類(lèi)以及波形的頻率。電路如圖 3-6 所示。
圖 3-7 液晶顯示電路
4 軟件設(shè)計(jì)與仿真
4.1 PROTEU簡(jiǎn)S 介
Proteus ISIS 是英國(guó) Labcenter 公司開(kāi)發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于
Windows操作系統(tǒng)上,可以仿真、分析 (SPICE)各種模擬器件和集成電路,該軟件的特點(diǎn)是:
(1) 現(xiàn)了單片機(jī)仿真和 SPICE電路仿真相結(jié)合。 具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、 RS232動(dòng)態(tài)仿真、 I2C 調(diào)試器、 SPI 調(diào)試器、鍵盤(pán)和 LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器
等。
(2) 支持主流單片機(jī)系統(tǒng)的仿真。目前支持的單片機(jī)類(lèi)型有: 68000 系列、8051 系
列、AVR系列、 PIC12系列、 PIC16 系列、 PIC18 系列、 Z80 系列、 HC11系列以及各種外圍芯片。
(3) 提供軟件調(diào)試功能。 在硬件仿真系統(tǒng)中具有全速、 單步、設(shè)置斷點(diǎn)等調(diào)試功能,同時(shí)可以觀察各個(gè)變量、寄存器等的當(dāng)前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具
有這些功能;同時(shí)支持第三方的軟件編譯和調(diào)試環(huán)境,如 Keil C51 uVision2 等軟件。
(4) 具有強(qiáng)大的原理圖繪制功能。
可以仿真 51 系列、 AVR、PIC、ARM、等常用主流單片機(jī)。還可以直接在基于原理圖的虛擬原型上編程,再配合顯示及輸出,能看到運(yùn)行后輸入輸出的效果。配合系統(tǒng) 配置的虛擬邏輯分析儀、示波器等, Proteus 建立了完備的電子設(shè)計(jì)開(kāi)發(fā)環(huán)境。
在 PROTEUS繪制好原理圖后,調(diào)入已編譯好的目標(biāo)代碼文件: *.HEX,可以在
PROTEU的S 原理圖中看到模擬的實(shí)物運(yùn)行狀態(tài)和過(guò)程。 PROTEUS是單片機(jī)課堂教學(xué)的先進(jìn)助手。
PROTEU不S 僅可將許多單片機(jī)實(shí)例功能形象化, 也可將許多單片機(jī)實(shí)例運(yùn)行過(guò)程形象化。前者可在相當(dāng)程度上得到實(shí)物演示實(shí)驗(yàn)的效果,后者則是實(shí)物演示實(shí)驗(yàn)難以達(dá) 到的效果。
它的元器件、連接線路等卻和傳統(tǒng)的單片機(jī)實(shí)驗(yàn)硬件高度對(duì)應(yīng)。這在相當(dāng)程度上
替代了傳統(tǒng)的單片機(jī)實(shí)驗(yàn)教學(xué)的功能,例:元器件選擇、電路連接、電路檢測(cè)、電路修改、軟件調(diào)試、運(yùn)行結(jié)果等。
課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)是學(xué)生走向就業(yè)的重要實(shí)踐環(huán)節(jié)。由于 PROTEUS提供了實(shí)驗(yàn)室無(wú)法相比的大量的元器件庫(kù),提供了修改電路設(shè)計(jì)的靈活性、提供了實(shí)驗(yàn)室在數(shù)量、 質(zhì)量上難以相比的虛擬儀器、儀表,因而也提供了培養(yǎng)學(xué)生實(shí)踐精神、創(chuàng)造精神
#include<reg51.h>
#include"LCD1602.h"
#include"DAC0832.h"
sbit K1=P3^2;
uchar code table8[]={
0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe
};
uchar code table9[]={
0x16,0x9a,0x20,0x5e,0x88,0xa3,0xb8,0xc3,0xce,0xd6,//
正弦波頻率調(diào)整中間值
0xbc,0xce,0x58,0x8a,0xa9,0xbf,0xcb,0xd8,0xe0,0xee,//
三角波頻率調(diào)整中間值
0x98,0x60,0xa0,0x42,0x44,0xce,0x5a,0xb3,0xf5,0x3c
};
uchar key;
uint F;//總頻率
bit ST=0;
bit DUQU=0; //主函數(shù)
void main() { P1=0; DA_S1=1; //關(guān)閉 8 位輸入寄存器
LCD1602_init();
TMOD=0x01;//設(shè)置定時(shí)器 0 為 16位工作方式
IT0=1;//設(shè)置外部中斷 0 為下降沿觸發(fā)
ET0=1; //開(kāi)定時(shí)器中斷
EX0=1; EA=1; while(1);
}//外部 0 中斷子函數(shù)
void wb0() interrupt 0 { EA=0;TR0=0;//關(guān)總中斷與定時(shí)器
delay(50); //延時(shí)夠嗎
if(K1==0) //確實(shí)有按鍵按下而引發(fā)中斷
{ delay(50); if(K1==0) {key=P3&0xf8; switch(key) { case 0xf0: //選擇波形
ee++; if(ee>2) ee=0; break;case 0xe8: //頻率按規(guī)定單位依次增加
table5[ee]++;
if(table5[ee]>10)
table5[ee]=1; break;
case0xd8: //頻率按規(guī)定單位依次衰減
table5[ee]--;
if(table5[ee]<1)
table5[ee]=10; break;
}
} bb=table8[ee*10+(table5[ee]-1)];//方括號(hào)中選取第幾個(gè)數(shù)后,并把該值賦
給T_temp
cc=table9[ee*10+(table5[ee]-1)];F=table5[ee]*table4[ee]; //求輸出頻率(個(gè)數(shù)*單位)
table2[5]=F%10+0x30; table3[5]=F%10+0x30; //在液晶中顯示個(gè)位,(0x30 在液晶顯示中表示數(shù)字0)
附錄
F/=10;
table2[4]=F%10+0x30;
table3[4]=F%10+0x30; //在液晶中顯示時(shí)十位
F/=10; table2[3]=F%10+0x30;
table3[3]=F%10+0x30; //在液晶中顯示時(shí)百位
F/=10; table2[2]=F%10+0x30;
table3[2]=F%10+0x30;//在液晶中顯示時(shí)千位
disp_lcd(0x80,&table1[ee*16]); //在第一行顯示
disp_lcd(0xc0,table2); //在第二行顯示
}aa=0; //'抽點(diǎn)'計(jì)數(shù)清零 while(!K1); EA=1; TR0=1; //開(kāi)啟總中斷與定時(shí)器
} //定時(shí)器 0 中斷子函數(shù) void t0() interrupt 1 {TH0=bb; TL0=cc; if(ee==0) sine_out(); else if(ee==1) triangle_out(); elseif(ee==2) square_out(); } typedef unsigned char uchar; typedef unsigned intuint; uchar code table1[]={"ZX Wave " "SJ Wave " "JXWave " "System Is Ready! " "Now to switch..""SAVE ...... " "Finish! " "Reading ... " }; ucharidata table2[16]={"F= Hz "}; uchar idata table3[16]={"F= Hz .V"}; sbit RS=P2^0; sbit RW=P2^1;
西安交通大學(xué)城市學(xué)院本科生畢業(yè)設(shè)計(jì)(論文)
sbit E=P2^2; sbit DP=P0^7; //延時(shí)子函數(shù)void delay(uchar z) { uchar x,y;for(x=z;x>0;x--) for(y=110;y>0;y--); } //LCD1602 液晶讀忙狀態(tài)子函數(shù) void LCD1602_wait() { RS=0;RW=1; E=1; delay(10);
E=0; //下降沿
while(DP) { E=0; E=1; //仿真才需要此語(yǔ)句 ,實(shí)際硬件中不需要
}
} //LCD1602 液晶寫(xiě)命令子函數(shù)void write_com(uchar com) { RS=0; RW=0; P0=com; E=1; delay(10); E=0;LCD1602_wait(); } //LCD1602 液晶寫(xiě)數(shù)據(jù)子函數(shù)void write_date(uchar date) { RS=1; RW=0;
附錄
P0=date;
E=1;
delay(10);
E=0;
LCD1602_wait();
} void disp_lcd(ucharaddr,uchar *temp1) reentrant { uchar i; write_com(addr); delay(1); //延時(shí)一會(huì)兒
for(i=0;i<16;i++) {write_date(temp1);//或者這樣寫(xiě)write_date(*(temp1+num));
delay(1); } } //LCD1602 液晶初始化子函數(shù)
void LCD1602_init() { E=0; RW=0; //初始化一定要設(shè)置為零,表示寫(xiě)數(shù)據(jù)
write_com(0x38); //使液晶顯示點(diǎn)陣,為下面做準(zhǔn)備
write_com(0x0c); //初始設(shè)置
write_com(0x06); //初始設(shè)置
write_com(0x01); //清零
write_com(0x80); //使指針指向第一行第一格
disp_lcd(0x80,&table1[3*16]); //在第一行顯示
disp_lcd(0xc0,&table1[4*16]); //在第二行顯示
} uchar aa; //'抽點(diǎn)'計(jì)數(shù)
uchar bb,cc;//傳遞頻率的中間變量
uchar dd=1; //在方波輸出函數(shù)中用于簡(jiǎn)單判別作用
uchar ee; //當(dāng)其為 0、1、2 時(shí),分別代表三種波
uchar codetable4[3]={5,25,100}; // 三種波的頻率單位
uchar idata table5[3]={1,1,1}; //給每種波定義一個(gè)數(shù)組單元,用于存放單位頻率的個(gè)數(shù)
uchar code table6[]={
//每隔數(shù)字 8,采取一次
0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x7
8,
0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0xe0,0xe8,0xf0,0xf8,0xff,
0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x98,0x90,0x88,0x80,
0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x18,0x10,0x08,0x0
0
};
uchar code table7[]={
//輸出電壓從 0 到最大值(正弦波 1/4 部分)
0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,
0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,
0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, //輸出電壓從最大值到0(正弦波1/4 部分)
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,
0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,
0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93 ,0x90,0x8d,0x89,0x86,0x83,0x80, //輸出電壓從 0 到最小值(正弦波 1/4 部分)
0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,
0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,
0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, //輸出電壓從最小值到0(正弦波1/4 部分)
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x 09,0x0a,0x0b,0x0d,0x0e,0x10,
0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,
0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x 6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };
sbitDA_S1=P2^7;//控制 DAC0832 的 8 位輸入寄存器, 僅當(dāng)都為 0 時(shí),可以輸出數(shù) 據(jù)(處于直通狀態(tài) ),否則,輸出將被鎖存 //三角波輸出子函數(shù)
void triangle_out() {P1=table6[aa++];
if(aa>64) aa=0;
DA_S1=0; //打開(kāi) 8 位輸入寄存器
DA_S1=1; //關(guān)閉 8 位輸入寄存器 }//正弦波輸出子函數(shù)
void sine_out() {P1=table7[aa++]; DA_S1=0; //打開(kāi)8 位輸入寄存器
DA_S1=1;//關(guān)閉 8 位輸入寄存器 } //方波輸出子函數(shù)
void square_out() {
dd=~dd; if(dd==1) P1=0xff;else P1=0x00;
DA_S1=0; //打開(kāi) 8 位輸入寄存器DA_S1=1; //關(guān)閉8 位輸入寄存器
}
|
|