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