當前位置:首頁 » 編程軟體 » 菜單式編程

菜單式編程

發布時間: 2023-07-05 04:31:52

1. 怎麼編寫菜單式程序

用VB做一個記事本實在不很復雜,我們完全可以通過向導來很方便地做出來。但本文只打算討論用手動方法製作記事本,旨在向VB初學者展示:學VB原來是如此容易!
通過閱讀、研究本文並按本文所述進行嘗試,初學者將學到很多東西,如怎樣使用RichText控制項來打開和保存文件,怎樣製作菜單、工具欄和狀態欄以及如何對其編寫代碼等。

第一章 讓我們的記事本馬上運行

急於求成是初學者共有的心願。那好,請按如下三個步驟做,我們的願望立即就可以實現!

步驟一:繪制界面。
新建一個標准EXE工程,將其Caption屬性改為「超級記事本」,點擊Icon屬性給它找個合適的Icon圖標。單擊菜單「工程」-「部件」,在彈出的「部件」對話框里找到Microsoft RichText Box 6.0和公共對話框Microsoft Common Dialog 6.0並選中它們,單擊「確定」按鈕。這時左邊的工具欄上出現了我們剛才新添的兩個控制項了。在窗體上繪制RichText Box和Commn Dialog,其中RichText Box的大小和位置可不用理睬,我們將在代碼中處理它,當然,有必要把它的ScrollBar屬性設為2-rtfVertical,這樣在打開和編輯文件時垂直滾動條才可用。

步驟二:編輯菜單。
按Ctrl+E調出菜單編輯器,我們來做如下幾個菜單:
一.文件菜單:
文件(第一層) mnuFile
新建(第二層) mnuNew
打開(第二層) mnuOpen
保存(第二層) mnuSave
- (第二層) mnuFileSep (分隔線)
退出(第二層) mnuExit
二.編輯菜單:
編輯(第一層) mnuEdit
復制(第二層) mnuCopy
剪切(第二層) mnuCut
粘貼(第二層) mnuPaste
- (第二層) mnuEditSep (分隔線)
全選(第二層) mnuSelecAll
三.搜索菜單:
搜索(第一層) mnuSearch
查找(第二層) mnuFind
查找下一個(第二層) mnuFindOn
四.幫助菜單:
幫助(第一層) mnuHelp
使用說明(第二層) mnuUsage
關於(第二層) mnuAbout
(註:各菜單項的快捷鍵請自行設置)

好了,其它的菜單項以後再根據需要添加。現在進入:

步驟三:編寫代碼。

』聲明查找變數
Dim sFind As String
』聲明文件類型
Dim FileType, FiType As String

』初始化程序
Private Sub Form_Load()
』設置程序啟動時的大小
Me.Height = 6000
Me.Width = 9000
End Sub

』設置編輯框的位置和大小
Private Sub Form_Resize()
On Error Resume Next 』出錯處理
RichTextBox1.Top=20
RichTextBox1.Left=20
RichTextBox1.Height = ScaleHeight-40
RichTextBox1.Width = ScaleWidth-40
End Sub

』新建文件
Private Sub mnuNew_Click()
RichTextBox1.Text = "" 』清空文本框
FileName = "未命名"
Me.Caption = FileName
End Sub

』打開文件
Private Sub mnuOpen_Click()
CommonDialog1.Filter = "文本文檔(*.txt)│*.txt│RTF文檔(*.rtf)│*.rtf│所有文件(*.*)│*.*"
CommonDialog1.ShowOpen
RichTextBox1.Text = "" 』清空文本框
FileName = CommonDialog1.FileName
RichTextBox1.LoadFile FileName
Me.Caption = "超級記事本:" & FileName
End Sub

』保存文件
Private Sub mnuSave_Click()
CommonDialog1.Filter = "文本文檔(*.txt)│*.txt│RTF文檔(*.rtf)│*.rtf│所有文件(*.*)│*.*"
CommonDialog1.ShowSave
FileType = CommonDialog1.FileTitle
FiType = LCase(Right(FileType, 3))
FileName = CommonDialog1.FileName
Select Case FiType
Case "txt"
RichTextBox1.SaveFile FileName, rtfText
Case "rtf"
RichTextBox1.SaveFile FileName, rtfRTF
Case "*.*"
RichTextBox1.SaveFile FileName
End Select
Me.Caption = "超級記事本:" & FileName
End Sub

』退出
Private Sub mnuExit_Click()
End
End Sub

』復制
Private Sub mnuCopy_Click()
Clipboard.Clear
Clipboard.SetText RichTextBox1.SelText
End Sub

』剪切
Private Sub mnuCut_Click()
Clipboard.Clear
Clipboard.SetText RichTextBox1.SelText
RichTextBox1.SelText = ""
End Sub

』全選
Private Sub mnuSelectAll_Click()
RichTextBox1.SelStart = 0
RichTextBox1.SelLength = Len(RichTextBox1.Text)
End Sub

』粘貼
Private Sub mnuPaste_Click()
RichTextBox1.SelText = Clipboard.GetText
End Sub

』查找
Private Sub mnuFind_Click()
sFind = InputBox("請輸入要查找的字、詞:", "查找內容", sFind)
RichTextBox1.Find sFind
End Sub

』繼續查找
Private Sub mnuFindOn_Click()
RichTextBox1.SelStart = RichTextBox1.SelStart + RichTextBox1.SelLength + 1
RichTextBox1.Find sFind, , Len(RichTextBox1)
End Sub

』使用說明
Private Sub mnuReadme_Click()
On Error GoTo handler
RichTextBox1.LoadFile "Readme.txt", rtfText 』請寫好Readme.txt文件並存入程序所在文件夾
Me.Caption = "超級記事本:" & "使用說明"
Exit Sub
handler:
MsgBox "使用說明文檔可能已經被移除,請與作者聯系。", vbOKOnly, " 錯誤信息"
End Sub

』關於
Private Sub mnuAbout_Click()
MsgBox "超級記事本 Ver1.0 版權所有(C) 2001 土人",vbOKOnly,"關於"
End Sub

』設置彈出式菜單(即在編輯框中單擊滑鼠右鍵時彈出的動態菜單)
Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
PopupMenu mnuEdit, vbPopupMenuLeftAlign
Else
Exit Sub
End If
End Sub

』防止在切換輸入法時字體自變(感謝王必成先生提供此方案)
Private Sub RichTextBox1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeySpace Then
RichTextBox1.SelFontName = CommonDialog1.FontName
End If
End Sub

至此,我們的記事本可以編譯使用了。點擊菜單「文件」-「生成XXX.EXE」,回到桌面運行我們的記事本看看,是不是頗有成就感?
當然,這樣的記事本還比較粗糙,我們還需要做些工作,請看下一章。

第二章 美化程序界面

多數字處理軟體都有工具欄和狀態欄。工具欄和狀態欄除了能美化我們的程序使其更具有專業性質外,還給用戶帶來操作上的便利。現在我們就來做一做這兩樣東西。

一.工具欄
(一)製作工具欄
單擊「工程」-「部件」,選中Microsoft Windows Common Control 6.0並確定。這時,我們要用到的控制項就出現在左邊的工具欄上了。
要做工具欄,首先需要一個叫ImageList的控制項來裝載圖像。在程序界面上添加它,然後右鍵單擊此控制項,左鍵單擊「屬性」,彈出「屬性頁」對話框的「圖像」,再單擊「插入圖片」就可以一次性裝載圖片了(如不滿意,以後還可以添加)。圖片可在C:\Microsoft Visual Studio\Common\Graphics\Bitmaps\TlBr_W95下選擇(這里假設你的VB安裝在C盤下)。注意了:在插入圖片時給每一張圖片註明關鍵字,以便在引用圖片時不至於混亂。如插入「新建」的圖片,我們在「關鍵字」欄註明「New」。
圖片有了,接下來在程序界面添加工具欄(ToolBar)。添加後工具欄就出現在菜單下面,右鍵單擊它,選擇「屬性」,在彈出的「屬性頁」對話框中的「通用」項作些設置,主要如下兩項:
1.「圖像列表」:選擇ImageList1
2.「樣式」:根據喜愛選擇1-trbStandard或者2-trbFlat
繼續點擊「屬性頁」的「按鈕」選項,插入若干按鈕。按鈕有多種樣式,請根據需要設置。這里請一定注意:每一個與用戶操作有關的按鈕都必須註明關鍵字、裝載圖片,如「新建」按鈕,在「關鍵字」項註明「新建」,在「圖像」項鍵入「New」(即ImageList1中的圖片關鍵字),需要的話還可以在「工具提示文本」項填入適當的提示語。
(二)編寫工具欄的按鈕代碼
工具欄按鈕的代碼編輯很簡單,可以按照下面的格式去編寫:
Private Sub ToolBar1_ButtonClick(ByVal Button As MSComctlLib.Button)
On Error Resume Next 』出錯處理
Select Case Button.Key 』按關鍵字選擇
Case "新建"
mnuNew_Click 』等於菜單項「新建」被單擊
Case "打開" 』等於菜單項「打開」被單擊
mnuOpen_Click
』......(繼續編寫其它按鈕的代碼)
End Select
End Sub

完成後試運行一下我們的程序,我們發現,有了工具欄之後,程序變得漂亮多了,只是有一個問題:打開一個較長的文檔後,編輯框的下拉滾動條向上的箭頭不見了。原因是:工具條佔用一定的空間。解決方法:將「設置編輯框的位置和大小」中的RichTextBox1.Top = 20 和 RichTextBox1.Height = Me.ScaleHeight - 40分別改為RichTextBox1.Top = 380,RichTextBox1.Height = Me.ScaleHeight - 400即可。

二.狀態欄
(一)製作狀態欄
狀態欄的英文名字叫StatusBar,在窗體上添加它後會默認出現在窗體的最下方。用滑鼠右鍵點擊它,調出「屬性頁」對話框,單擊「窗格」項,插入一些窗格,可以將各個窗格的「樣式」設置為:
0-sbrText 顯示文本,需編寫代碼
1-sbrCaps 顯示大小寫狀態,無需編程
2-sbrNum 顯示NumLock鍵開關狀態,無需編程
3-sbrIns 顯示Insert鍵狀態,無需編程
4-sbrScr1
5-sbrTime 顯示時間,不編程時時間不會隨系統時鍾變化
6-sbrDate 顯示日期,無需編程
注意:加進狀態欄後需將Form_Resze中的RichTextBox1.Height = Me.ScaleHeight - 400改為RichTextBox1.Height = Me.ScaleHeight - 600。
(二)狀態欄根據其「樣式」屬性決定用不用編寫代碼(如上文所述)。下面舉些例子,讀者可以認真揣摩,從而達到舉一反三的效果。

例一:用戶選取了「新建」後,讓第一個窗格顯示:「目前狀態:正在打開文件《……》」。請將下面代碼寫進「打開」菜單裡面:
StatusBar1.Panels(1).Text = "目前狀態:正在打開文件" & "《" &CommonDialog1.FileTitle & "》"

例二:讓第三個窗格顯示時間並讓時間跟隨系統時鍾變化。
首先,給程序加一個Timer控制項,將其Interval屬性設為1000。然後:
在Form_Load過程加入:StatusBar1.Panels(1).Text = Time;然後給Timer控制項編寫代碼:

Private Sub Timer1_Timer()
If StatusBar1.Panels(3).Text < > CStr(Time) Then
StatusBar1.Panels(3).Text = Time
End If
End Sub

例三:當編輯框的文本發生變化時讓第一個窗格顯示:「正在編輯文檔:文件名」。
Private Sub RichTextBox1_Chang()
StatusBar1.Panels(1).Text = "正在編輯文檔:" & CommonDialog1.FileName
End Sub

辛苦了那麼久,我們現在已經擁有一個象模象樣的記事本了。這個記事本由於用了RichText控制項,理論上它能打開和編輯任意大的文檔,使用起來的確比Windows自帶的記事本方便得多。當然,還有一些其它的功能需要添加和完善,這就靠你慢慢去完成了。

2. 錄課室撰寫腳本的步驟

1、選題

首先要了解計劃製作的課題採用課件進行輔助教學的必要性和可能性,要調查該課題在採用課堂教學方式或其它較易實現的教學方式時,是否能較好的達到教學目標,要從經費、設備、時間、技術水平和教學效果等方面加以綜合考慮。在初步確定某一課題需要且可以採用課件方式之後,還應調查現有的課件,如果確認沒有合適的現成課件,才可選定該課題。

2、制訂課題計劃

課題計劃包括確定教學目的要求、劃分課時和教學基本單元、選擇教學方法、確定調試方式等。CAI每節課的時間要少於通常的課堂教學。CAI課件調度各教學基本單元的方式一般有程序式、菜單式和混合式三種。所謂程序式是在事先編好的程序控制下,由計算機根據學生在學習時的反應決定有關教學單元之間的連接順序;所謂菜單式是由計算機在屏幕上顯示教學內容的目錄,由學生根據需要加以選擇調用;至於混合式,則是將上述兩種方式混合採用,一般以菜單式為綱,以程序式為目的。

3、繪制畫面

腳本紙的選擇應根據計算機屏幕的顯示格式來選取。課件中的畫面應按比例繪制在腳本紙上。如果在若干頁畫面中都有相同的圖,則可在該圖第一次出現時,對其進行標號,此後以圖號代替。這樣處理不僅可以節省繪制時間,還可方便軟體編程。

4、標注說明

對一些有特殊要求的畫面,如閃爍、動畫、視頻等,要在腳本上標注簡短的文字說明。每頁腳本都要編制「本頁流程圖」,用以說明本頁的畫面是由哪些畫面組成;在什麼情況下進入什麼畫面;顯示的先後次序和動畫、切換效果等。每頁腳本紙(包括分支),還需編上頁碼。

5、重疊檢查

各頁畫面繪制完成後,應重點檢查連續畫面重疊時是否配合,如練習與答案的顯示位置是否配合等。如不認真進行重疊檢查,很容易出現畫面不配合現象,給編程帶來麻煩。

6、編制順序

在逐頁繪制畫面的過程中,還應根據需要不斷地調整頁碼的順序。全部畫面繪制好後,應將初步排好的順序與每頁的流程圖對照。對照核實後重新編上頁碼。

7、繪制課題流程圖

「本頁流程圖」只是一個局部的片斷。「課題流程圖」是指一課時腳本的整體流程圖。腳本各頁的順序編排好後,要沿著不同的學習路線和分支,按幾種路線再分別檢查,確定無錯誤後,最後繪制好課題流程圖。

3. 如何用74Ls00,74Ls20,74Ls138設計全減器

波形發生器設計報告

一、 設計任務
設計製作一個波形發生器,該波形發生器能產生正弦波、方波、三角波和由用戶編輯的
特定形狀波形。

二、 設計要求

1. 基本要求
具有產生正弦波、方波、三角波三種周期性的波形。
用鍵盤輸入編輯生成上述三種波形(同周期)的線性組合波形,以及由基波及其諧波(
5次以下)線性組合的波形。
具有波形存儲功能。
輸出波形的頻率為100Hz~20KHz(非正弦波頻率按10次諧波計算):重復頻率可調,頻
率步進間隔≤100Hz。
輸出波形幅度范圍0~5V(峰-峰值),可按步進0.1V(峰-峰值)調整。
具有顯示輸出波形的類型、重復頻率(周期)和幅度的功能。

2.發揮部分
輸出波形頻率范圍擴展至100Hz~200KHz。
用鍵盤或其他輸入裝置產生任意波形。
增加穩幅輸出功能,當負載變化時,輸出電壓幅度變化不大於±3%(負載電壓變化范圍
:100Ω~∞)。
具有掉電存儲功能,可存儲掉電前用戶編輯的波形和設置。
可產生單次或多次(1000次以下)特定波形(如產生一個半周期三角波輸出)。
其它(如增加頻譜分析、失真度分析、頻率擴展>200KHz、掃頻輸出等功能)。

三、方案設計和論證:
根據題目的要求,我們一共提出了三種設計方案,分別介紹如下:

1、 方案一
採用低溫漂、低失真、高線性單片壓控函數發生器ICL8038,產生頻率受控可變的正弦波
,可實現數控頻率調整。通過D/A和5G353進行輸出信號幅度的控制。輸出信號的頻率、
幅度參數由4x4位鍵盤輸入,結果輸出採用6位LED顯示,用戶設置信息的存儲由24C01完
成。系統結構框圖如圖1所示。

2、 方案二
由2M晶振產生的信號,經8253分頻後,產生100Hz的方波信號。由鎖相環CD4046和8253進
行N分頻,輸出信號送入正弦波產生電路和三角波產生電路,其中正弦波採用查表方式產
生。計數器的輸出作為地址信號,並將存儲器2817的波形數據讀出,送DAC0832進行D/A
轉換,輸出各種電壓波形,並經過組合,可以得到各種波形。輸出信號的幅度由0852進
行調節。系統顯示界面採用16字x1行液晶,信號參數由4x4位鍵盤輸入,用戶設置信息的
存儲由24C01完成。

3、 方案三
以4M石英晶振作為參考源,通過F374,F283以及LS164組成的精密相位累加器,通過高速
D/A變換器和ROM產生正弦波形,這個數字正弦波經過一個模擬濾波器後,得到最終的模
擬信號波形。通過高速D/A產生數字正弦數字波形和三角數字波形,數字正弦波通過帶通
濾波器後得到一個對應的模擬正弦波信號,最後該模擬正弦波與一門限進行比較得到方
波時鍾信號。通過相位累加器來實現多種波形的同相位輸出,並可以連續地改變頻率。
輸出信號幅度由TLC7524進行數字控制。用戶設置信息的存儲由24C01完成。

以下為三種基本方案的具體電路實現:

方案一
單片壓控函數發生器ICL8038產生頻率為100Hz~20KHz的正弦波,其頻率由DAC0832和5G
353進行控制。由於ICL8038自身的限制,輸出頻率穩定度只有10-3(RC振盪器)。而且
由於壓控的非線性,頻率步進的步長控制比較困難。輸出信號的幅度數控由DAC0832和5
G353完成。幅度數碼由單片機通過P0口輸入。要求幅度數據為8位/ 100mV。用戶設置信
息的存儲由24C01完成。
微控制器由8051最小系統,鍵盤/顯示介面晶元8279,16位鍵盤,6位LED數碼顯示器以及
相應解碼、驅動電路及「自動掃描/手動設置」選擇開關等組成。

方案二
基本信號產生:晶振頻率為2M,經8253進行分頻後,產生100HZ的方波信號,則分頻比為

M=fALE/100=2X104
其中FALE=2M
一般石英晶體振盪器的頻率穩定性優於10-5,故輸出信號的頻率穩定性指標得以保證。

頻率合成:CD4046和8253組成的鎖相環中,fo=100N 其中8253的定時器做4046的N分頻,
則占空比電路的輸入脈沖信號頻率也是N。
利用可編程定時器/計數器8253的三個定時器,正好可以承擔上述2x104分頻和鎖相環中
而個分頻器的任務。其中定時器0分頻比設為2x104,定時器2做鎖相環N分頻。利用8253
做分頻器,應使其工作於方式3。
波形變換採用查表方式,把正弦波一個周期的波形按時間平均劃分為100個點,各點的電
壓數據放在存儲器2817中,通過DA0832實時查詢輸出。
輸出信號的幅度數控由DAC0832完成,幅度數碼由單片機通過P1口輸入,要求幅度數據為
8位/ 100mV。當輸出幅度為3V時,DAC輸入數值應為240。
微控制器系統由89C51最小系統,4x4位鍵盤輸入,字元型液晶顯示器以及相應的解碼、
驅動電路構成。液晶顯示採用菜單顯示方式,顯示直觀,操作方便,人機界面非常友好
. 用戶設置信息的存儲由24C01完成

方案三
以4M石英晶振作為參考源,通過F273,F283以及LS164組成的精密相位累加器和數字信號
處理,通過高速D/A變換器DAC0800和2817 E2ROM產生正弦波形,三角波形和任意波形。

正弦信號頻率計算:在相位累加器中,每來一個時鍾脈沖,它的內容就更新一次。在每
次更新時,相位增量寄存器的相位增量M就加到相位累加器中的相位累加值上。假設相位
增量寄存器的M為00...01,相位累加器的初值為00...00。這時在每個時鍾周期,相位累
加器都要加上00...01。本設計累加器位寬n是24位,相位累加器就需要224個時鍾周期才
能恢復初值。
相位累加器的輸出作為正弦查找表、三角波查找表和用戶自定義波形查找表(均為
E2PROM2817)的查找地址。查找表中的每個地址代表一個周期的波形的一個相位點,每
個相位點對應一個量化振幅值。因此,這個查找表相當於一個相位/振幅變換器,它將
相位累加器的相位信息映射成數字振幅信息,這個數字振幅值就作為D/A變換器的輸入。

設計n=24, M=1, 這個相應的輸出信號頻率等於時鍾頻率除以224。如果M=2,輸出
頻率就增加1倍。對於一個n-bit的相位累加器來說,就有2n個可能的相位點,相位增量
寄存器中控制字M就是在每個時鍾周期被加到相位累加器上的值。假設時鍾頻率為fc,那
么輸出信號的頻率就為:
f0 = M*fc / 224
數字正弦波經過一個模擬濾波器後,得到最終的模擬信號波形。通過高速DAC產生數字正
弦數字波形和三角數字波形,數字正弦波通過帶通濾波器後得到一個對應的模擬正弦波
信號,最後該模擬正弦波與一門限進行比較得到方波時鍾信號。
輸出信號的幅度數控由TLC7524數控衰減器完成,幅度數碼由單片機通過匯流排定址方式輸
入,幅度為8位/100mV。當輸出幅度為5V時,DAC輸入值為400。
微控制器系統由89C52最小系統,4x4位鍵盤輸入,字元型液晶顯示器以及相應的解碼、
驅動電路構成。液晶顯示採用菜單顯示方式,顯示直觀,操作方便,人機界面非常友好
。用戶設置信息的存儲由24C01完成

4、 方案比較
下面對三種方案的性能特點和實現的難易等作一些具體分析與比較。

1)方案一結構比較簡單,但由於ICL8038自身的限制,採用了RC振盪器,故輸出頻率穩
定度只能達到10-3數量級。方案二採用石英晶體振盪器和數字鎖相環技術,而一般石英
晶體振盪器的頻率穩定性優於10-5,故輸出信號的頻率穩定性指標得以保證。方案三同
樣採用石英晶體振盪器、精密的相位累加器,頻率穩定性指標同樣優於10-5。達到題目
的要求。

2)方案一由於壓控振盪器F/V的線性范圍有限,頻率步進的步長控制比較困難,難以保
證1000倍的頻率覆蓋系數。方案二採用集成鎖相環4046,配合8253很容易做到1000倍的
線性頻率覆蓋系數。方案三使用精密相位累加器和高速DAC,同樣可以實現1000倍的線性
頻率覆蓋。

3)方案一的控制顯示系統比較簡單,六位LED的顯示系統製作比較簡單,但難以顯示系
統輸出信號的詳細信息,使用時操作難度比較大,人機界面比較難懂。方案二和方案三
採用16字元x1行的液晶,菜單式操作方法,要求有比較高的硬體製作水平和軟體編程技
術,但可以詳細的顯示波形,占空比,信號幅度等信息。人機界面友好,操作方便。而
且通過軟體編程式控制制使系統輸出信號的頻率、波形預置變的非常簡單。

4)方案一中,為獲得1Hz的解析度,必須採用高精度的DAC,不容易達到比較高的精度。
方案二中用單片機對8253可編程定時器進行控制,配合集成鎖相環頻率合成器4046可以
比較容易的提供1Hz解析度。方案三採用精密相位累加器,具有相當好的頻率解析度,頻
率的可控范圍達0.25Hz
fc/2n=222/224=0.25Hz

5)方案一的ICL8038可以產生比較准確的波形。方案二通過實時查詢輸出正弦波,雖然
我們對每一個波形只採用了100個點,但在要求較高的場合,可以通過對每個波形取更多
個點的方法來提高波形精度。具有很好的升級擴展性能。方案三中E2PROM中存儲了1024
個波形點,可以提供非常精確的波形。在200KHz的時候,仍然能夠對每個波形提供8個點
,通過濾波器後,同樣會具有良好的波形。

6)方案一和方案二的頻率變換時間主要是它的反饋環處理時間和壓控振盪器的響應時間
,通常大於1ms。而方案三的頻率變換時間主要是數字處理延遲,通常為幾十個ns。

7)方案一由於採用RC振盪器,不可避免具有比較大的相位雜訊。方案二的相位雜訊是它
的參考時鍾—石英晶體振盪器—的雜訊的兩倍。而方案三由於數字正弦信號的相位與時
間成線形關系,整片電路輸出的相位雜訊比它的參考時鍾源的相位雜訊小。
從以上的方案比較可以看出,方案三結構比較復雜,但具有輸出頻率穩定性高、頻率輸
出線性度好、頻率解析度高、波形准確、頻率變換時間小、相位雜訊小、人機界面友好
,易於控制等優點,性能優良。是本次設計的理想設計方案。而相對來說,方案一結構
很簡單,製作容易,但是輸出信號有頻率線性度差、頻率穩定度低、頻率解析度低、頻
率變換時間比較長,相位雜訊大以及人機界面不友好等缺點。方案二電路也比較簡單,
但在頻率解析度、頻率變換時間、相位雜訊等方面都比第三種方案差。總之,方案一和
方案二都具有各自的比較大的弱點,難以達到理想的設計要求。故不宜採用。
經過比較,我們決定採用方案三的電路設計進行製作。

四、電路設計與製作
系統總體結構如圖3所示。下面就系統的各個功能模塊的具體電路結構進行分析。

1、 相位累加器
這一部分電路是整個波形發生系統的核心,包括IC F374+F283+LS164。它由一個加法器
F283、三個8位相位寄存器F374(構成24位相位寄存器)和串列--並行地址轉換LS164組
成。在相位累加器中,每來一個時鍾脈沖,它的內容就更新一次。在每次更新時,相位
增量寄存器的相位增量M就加到相位累加器中的相位累加值上。假設相位增量寄存器的M
為00...01,相位累加器的初值為00...00。這時在每個時鍾周期,相位累加器都要加上
00...01。本設計累加器位寬n是24位,相位累加器就需要224個時鍾周期才能恢復初值。

2、 三種波形(正弦波、三角波和用戶自定義波形)發生

相位累加器的輸出作為正弦查找表、三角波查找表和用戶自定義波形查找表(均為E2PR
OM2817)的查找地址。查找表中的每個地址代表一個周期的波形的一個相位點,每個相
位點對應一個量化振幅值。因此,這個查找表相當於一個相位/振幅變換器,它將相位
累加器的相位信息映射成數字振幅信息,這個數字振幅值就作為D/A變換器的輸入。
設計n=24, M=1, 這個相應的輸出信號頻率等於時鍾頻率除以224。如果M=2,輸出頻率
就增加1倍。對於一個n-bit的相位累加器來說,就有2n個可能的相位點,相位增量寄存
器中控制字M就是在每個時鍾周期被加到相位累加器上的值。假設時鍾頻率為fc,那麼輸
出信號的頻率就為:
f0 = M*fc / 224
頻率控制字計算:我們使用的是222Hz的晶振,有24位控制字,輸入頻率數值與輸出頻率
控制字的關系為
Kfo = 224/222*Kfi = 4Kfi
數字正弦波經過一個模擬濾波器後,得到最終的模擬信號波形。通過高速DAC產生數字正
弦數字波形和三角數字波形,數字正弦波通過帶通濾波器後得到一個對應的模擬正弦波
信號,最後該模擬正弦波與一門限進行比較得到方波時鍾信號。

3、 低通濾波電路
本設計採用NE5532製作二階濾波器,因題目要求100Hz~200KHz的輸出頻率,故設計頻率
截止上限在300KHz,保證足夠的通頻帶並濾除雜波影響。

4、方波整型電路
為獲得良好的波形效果,我們採用視頻運放AD817作為比較器+74HC04整型以獲得良好的
方波上升沿,並提供一組TTL電平信號輸出,作為自己設計的附加功能,幅度為0~5V連續
可調。

5、數控衰減器
輸出信號的幅度數控由TLC7524數控衰減器完成,幅度數碼由單片機通過匯流排定址方式輸
入,幅度為8位/100mV。當輸出幅度為5V時,DAC輸入值為400。
幅度數值通過鍵盤輸入,同步顯示在液晶上,再由單片機通過P1口輸入DAC0832,幅
度數據為8位/ 100mV。當輸出幅度為5V時,DAC輸入數值應為400。因為題目要求的最高
幅度為5V,所以當設置幅度時,一旦按下鍵盤5,液晶直接顯示5.0V。

6、微控制器系統
該部分電路我們採用了單片機89C52,因為它價格便宜、容易購買而且自帶8K Flash Ra
m,使用方便。鍵盤輸入採用4x4位鍵盤,提供數字0~9共十個數字按鍵以及6個功能控制
鍵。液晶顯示採用HD44780驅動,16字x1行字元型液晶屏顯示。系統各功能的切換以及參
數設置均在液晶屏上有詳細的顯示,各功能切換使用菜單式。系統顯示直觀,操作方便
,人機界面非常友好。

7、用戶設置信息存儲
使用非易失E2PROM24C01保存用戶的設置信息,具有掉電存儲功能,可存儲掉電前用戶編
輯的波形和設置。

8、加法器
由AD817構成的加法電路,實現同周期的三種波形線性相加輸出,輸出為三種波形的組合
波形。

9、電源電路
根據本設計的供電需要,電源由3A的整流橋堆和3x7805提供三路+5V電壓輸出,7809和7
909構成±9V雙電源輸出。均提供電容濾波以消除紋波影響。

五、軟體設計 (見下頁圖4)

六、系統調試

我們的硬體分為電源板、低通濾波板、單片機最小系統板、液晶顯示板、DDS板和加法
器板共六個部分。製作時,我們採用各電路板依次製作,依次調試的方法。下面依次敘
述各電路板的製作過程。

電源板:根據題目的要求,波形發生器需要三路+5V電壓和±9V電壓。使用50W環型
3路7805提供穩定的+5V電壓輸出,7809和7909提供±9V電壓。

DDS板:這一部分電路包括E2PROMF374、F283和LS164構成的相位累加器和正弦查找
表E2PROM、三角查找表E2PROM和用戶自定義查找表E2PROM以及對應的高速D/A。
製作後,接通電源,在Hitich OSCILLCOPE V-1050F 100M示波器上觀察正弦波和三角波
的輸出波形,可以觀察到波形有比較大的毛刺,並有較大的高頻分量。通過鍵盤輸入波
形的各種頻率數值測試,均可在示波器上觀察到比較好的波形。

低通濾波板:由AD817組成一個二階濾波器。從DDS板輸入正弦波,用V-1050F 100M
示波器觀察輸出波形,發現波形已經變的很平滑,毛刺和高頻分量已經消失。達到了預
期效果。

單片機最小系統板:由89C52,鎖存器74LS373,與非門74LS00構成,板上設置排線
跟其他電路板相連。把程序寫入89C52,經過模擬測試,程序通過,各功能正常。

液晶顯示板:由HD44780驅動電路和液晶屏構成。液晶屏採用字元型16x1字(每字8x5)
顯示。經聯結單片機最小系統板測試,顯示功能正常。

加法器和數控衰減器板:這一部分電路由AD817加法器 、D/A TLC7524 、74LS245匯流排緩
沖、74LS138地址解碼、74LS04反相器以及AD8032運放構成。完成正弦波、方波、三角波
和用戶自定義波形的幅度控制以及正弦波、方波和三角波的線性組合輸出。經聯機測試
,幅度控制和波形組合輸出正常。

2 調試方法和過程

採用分別調試各個單元模塊,調通後再進行各單元電路聯機統調的方法,提高調試效
率。

(1)軟體部分調試
本機的軟體主要功能是完成人機介面,因此編程的時候把界面的友好性放在首位,
採用主從菜單式的操作方法。由於對51系列單片機編程比較熟悉,在軟體的模擬調試過
程中沒有遇到太大的問題。各軟體功能均正常實現。

(2)硬體部分調試
整個硬體調試過程基本順利,由於採用了工藝精良的雙面孔化PCB板,各單元電路工作穩
定,給調試工作帶來很大的方便。

調試過程中出現的問題:

1) 在相位累加器調試過程中發現地址不正常現象。經查找資料,相位寄存器使用的是
F373,但由於F373是透明鎖存器,直接導致地址出錯。於是更換為LS374,問題解決。

2) 加法器調試時,示波器上發現方波信號出現過沖現象。查找資料發現AD8032是寬頻
高速運放,嘗試在反相輸入端和輸出端並上5.7pf的電容,問題解決。

3) 加法累加器調試時,發現正弦波毛刺比較大。用替換法檢查,發現是因為地址寄存
器性能不穩,更換74LS164後,問題解決。

各單元調試通過以後,進行整機調試,調試結果顯示,整個系統能夠正常工作。

3 調試過程中使用的儀器設備
HITICH OSICLLCOPE V 1050F 100M 示波器
VICTOR VC-9806 數字萬用表
中策 DF-1642信號發生器/頻率計
南京偉福G-6D單片機模擬器
EMP-100編程器

七、系統指標測試

1、 測試儀器設備
HITICH OSICLLCOPE V 1050F 100M 示波器
VICTOR VC-9806 數字萬用表
中策 DF-1642信號發生器/頻率計

2、 測試方法及結果

1)正弦波100KHz測試
用鍵盤設置幅度為5V,通過示波器觀察輸出波形,計算得輸出幅度值為5V。
正弦波1KHz測試
用鍵盤設置幅度為5V,通過示波器觀察輸出波形,計算得輸出幅度值為5V。

2)方波1KHz測試
用鍵盤設置幅度為5V,通過示波器觀察輸出波形,計算得輸出幅度值為5V。

3)三角波1KHz測試
用鍵盤設置幅度為5V,通過示波器觀察輸出波形,計算得輸出幅度值為5V。

4)組合波形測試
用鍵盤設置功能為組合輸出,設置三種波形幅度為正弦波1V、方波1V、三角波1.5V,用
示波器觀察輸出波形,波形正常。

4) 存儲功能設置
關閉電源,等待一段時間,然後再打開電源,原來的設置均恢復。證明具有存儲功能。

5) 頻率步進間隔
用鍵盤設置頻率步進,間隔為1Hz。

6) 輸出電壓測試
用鍵盤設置正弦波輸出幅度值為5V,用示波器觀察輸出波形,計算得輸出電壓為5V。同
樣設置三角波和方波輸出幅度值為,計算得輸出電壓為5V。

7) 顯示功能
輸出信號的類型、頻率、幅度以及功能選擇均可在液晶顯示屏上顯示出來。顯示功能正
常。

8) 頻率范圍擴展
用鍵盤設置正弦波頻率為1Hz,在示波器上可觀察到良好的波形。設置為250KHz,同樣可
觀察到良好的波形。再用鍵盤依次改變波形為三角波和方波,同樣可觀察到輸出頻率范
圍為1Hz~250KHz。

3、 誤差分析
系統輸出信號頻率誤差跟晶振在同一個數量級,約為10-6。
系統輸出信號幅度誤差在1HZ和20KHz時正弦波有5%的誤差。原因:濾波器通帶問題。
波形在較低頻率時有一定時針,原因:DDS板轉換雜訊。

八、系統改進措施
濾波器改用中心頻率可調的帶通濾波器。
各單元電路集中在同一塊PCB板上製作。

熱點內容
我的世界怎麼進2s2t伺服器 發布:2025-02-07 23:08:47 瀏覽:924
丁霞訪問 發布:2025-02-07 22:56:19 瀏覽:854
java中set集合 發布:2025-02-07 22:43:34 瀏覽:31
播放這個wifi密碼是多少 發布:2025-02-07 22:34:54 瀏覽:99
視頻存儲時間長了有雪花 發布:2025-02-07 22:24:34 瀏覽:569
哈佛f7x怎麼區分配置 發布:2025-02-07 22:22:34 瀏覽:771
廣州python培訓 發布:2025-02-07 22:22:26 瀏覽:200
陸金所的交易密碼是什麼 發布:2025-02-07 22:19:25 瀏覽:320
如何刪除平板儲存密碼 發布:2025-02-07 22:10:29 瀏覽:747
php微信授權登錄 發布:2025-02-07 22:10:27 瀏覽:379