【正文】
以掌握單片機 的工作原理 , A/D 轉(zhuǎn)換器的性能,單片機與 LCD顯示的接口技術(shù),而且 在運用編程語言對數(shù)字 式 電壓表設計的基礎上,融會貫通大學期間所學的專業(yè)知 識?;趩纹瑱C的數(shù)字式電壓表 3 2 數(shù)字式電壓表設計的兩種可行性方案研究 數(shù)字 式 電壓表有多種 設計方法 , 方案是多種多樣的 , 由于大規(guī)模集成電路數(shù)字芯片的高速發(fā)展 , 各種數(shù)字芯片品種多樣 , 導致對模擬數(shù)據(jù)的采集部分的不一致性 , 進而又使對數(shù)據(jù)的處理及顯示的方式的多樣性 。A/D 轉(zhuǎn)換器和基準電壓源 ; 數(shù)字部分包括計數(shù)器 , 譯碼器 , 邏輯控制器 , 振蕩器和顯示器 。 此方案設計 的 優(yōu)點是設計成本低 , 能夠滿足一般的電壓測量 。 此方案的原理是 A/D 轉(zhuǎn)換芯片將被測量電壓輸入端所采集到的模擬電壓信號轉(zhuǎn)換成相應的數(shù)字信號 , 然后通過對單片機系統(tǒng)進行軟件編程 , 使單片機系統(tǒng)能按規(guī)定的時序來采集這些數(shù)字信號 , 通過一定的算法計算出被測量電壓的值 ?;趩纹瑱C的數(shù)字式電壓表 4 3 系統(tǒng)設計中相關(guān)硬件簡介 AT89C51 單片機 簡介 AT89C51 單片機是 Atmel 公司 89 系列單片機的一種 8 位 Flash 單片機。 一方面 , 它將 A/D 轉(zhuǎn)換器 、 顯示器和 開關(guān)選擇檔位 等通過 I/O 口地址線和數(shù)據(jù)線連接起來 ; 另一方面 , 它將用戶下載的程序通過控制總線控制數(shù)據(jù)的輸入輸出 , 從而實現(xiàn) 測量 電壓 和顯示測量電壓值 的功能 。它有高速的轉(zhuǎn)換 、簡化比率轉(zhuǎn)換、刻度以及模 擬電路與邏輯電路和電源噪聲隔離、 耐高溫等特點。 下面就具體介紹一下這個芯片的各方面資料 。 圖 31 TLC2543 芯片封裝 TLC2543 各引腳說明如下表 ,使用詳細介紹如下所列。一個由低到高的變化將在一個設置時間內(nèi)禁止 Data Input 和I/O CLOCK。 ( 4) Data Output 在 CS 位高 電平 時處于高阻抗狀態(tài),而當 CS 為低 電平 時處于激活狀態(tài)。 ( 7) I/O CLOCK 端串行輸入并完成以下四個功能:第一,在 I/O CLOCK 的前 8個 上升沿,它將 8 個輸入數(shù)據(jù)信號輸入數(shù)據(jù)寄存器。在 I/O CLOCK 的下降沿時數(shù)據(jù)變化。 常用顯示器 簡介及本設計顯示器的選擇 本次設計中有顯示模塊,而常用的顯示器件也比較多,有數(shù)碼管, LED 點陣, 1602液晶, 12864 液晶等。不能夠顯示字符。 LED 點陣顯示器件可以顯示數(shù)字,英文字符,中文字符等。使用時直接編寫軟件程序按一定的時序驅(qū)動即可。不過它的價格比 1602 液晶昂貴的 很多。因此在本設計中 考慮用液晶 作為 顯示器件,雖然 12864 液晶比 1602 液晶的功能強,不過在價格方面卻貴了很多。下面是 1602 液晶顯示的各方面參數(shù)。輸出:無。輸出:無。 基于單片機的數(shù)字式電壓表 9 續(xù)表 36 指令碼 功能 0 0 0 0 0 1 N S N=1 當讀寫一個字條款后地址指針加一,且光標加一。 基于單片機的數(shù)字式電壓表 10 4 硬件系統(tǒng)設計 設計要求 ( 1) 最高量程為: 300V。 ( 4) 當 被測電壓的電壓值小于 1V時 , 可 自動換 以 MV 為單位顯示。 單片機最小系統(tǒng) 設計 單片機最小系統(tǒng)包括 時鐘振蕩電路和 復位電路。 1 2 3 4 5 6ABCD654321DCBAT i t l eN u m b e r R e v i s i o nS i z eBD a t e : 1 8 J u n 2 0 1 2 S h e e t o f F i l e : H : \ B G 0 9 0 11 2 趙恒樂 ( 修改) . d d b D r a w n B y :R21KR15 1 0S2S W P BY1 2 MC23 0 p fC13 0 p f+C34 7 u fV C C40P 0 .039P 0 .138P 0 .237P 0 .336P 0 .435P 0 .534P 0 .633P 0 .732E A 31A L E 30P S E N29P 2 .728P 2 .627P 2 .526P 2 .425P 2 .324P 2 .223P 2 .122P 2 .021V S S20X T A L 219X T A L 118P 3 .717P 3 .616P 3 .515P 3 .414P 3 .313P 3 .212P 3 .111P 3 .010R S T 9P 1 .78P 1 .67P 1 .56P 1 .45P 1 .34P 1 .23P 1 .12P 1 .01AT89C51J4A T 8 9 C 5 1V c cV c cC00 . 1 u f 圖 42 單片機最小系統(tǒng)接線圖 一般選用石英晶體振蕩器。 單片機在工作時,由內(nèi)部振蕩器產(chǎn)生或由外部直接輸入的送至內(nèi)部控制邏輯單元的時鐘信號的周期稱為時鐘周期。 上 圖中由按鍵 RESET 以及電解電容 C電阻 R1, R2 及 按鍵 構(gòu)成電復位電路。衰減電路可由手動開關(guān)來選擇不同的衰減率,從而切換開關(guān),達到選擇不同量程的效果。 控制檔位的開關(guān)是手動的雙擲開關(guān),其中有三個接線端子分別與單片機的 , 和 相連接,目的是為了能夠讓單片機 CPU自動識別檔位,即 可用相應的檔位的數(shù)據(jù)轉(zhuǎn)換的算法計基于單片機的數(shù)字式電壓表 12 算出正確的電壓 值。 電路如圖 44 所示,輸入電壓 Vi通過 R1 作用于運放的反相端, R2 跨接在運放的輸出端和反相端之間,同相端接地。負號表明輸出電壓V0 與輸入電壓 Vi 相位相反。為 考慮 有冗余的情況,本設計中選擇的基準電壓為 3V。在反饋電 阻后連接雙擲開關(guān),起到換擋的效果。 上電后,片選 CS 必須從高到低,才能開始一次工作周期,此時 EOC 為高,輸入數(shù)據(jù)寄 存器被置為 0,輸出數(shù)據(jù)寄存器的內(nèi)容是隨機的。在第 12 個時鐘下降沿,EOC 變低 電平 ,開始對本次采樣的模擬量進行 A/D 轉(zhuǎn)換,轉(zhuǎn)換時間約需 10181。 基于單片機的數(shù)字式電壓表 14 1 2 3 4 5 6ABCD654321DCBAT i t l eN u m b e r R e v i s i o nS i z eBD a t e : 1 8 J u n 2 0 1 2 S h e e t o f F i l e : D : \ U s e r s \ H e a v e nZ h a o \ D e s k t o p \ B G 0 9 0 11 2 趙恒樂 ( 修改) . d d bD r a w n B y :C60 . 1 u fA I N 01A I N 12A I N 23A I N 34A I N 45A I N 56A I N 67A I N 78A I N 89G N D10A I N 911A I N 1 012R E F 13R E F +14CS15DO16DI17C L K18E O C19V c c20TLC2543J3T L C 2 5 4 3V c cV c cC50 . 1 u fP 1 .6P 1 .4P 1 .3P 1 .5 圖 45 TLC3543 與單片機的連接 1602 液晶接口電路 如圖 46 所示:用 AT89C51 的 P0 口作為數(shù)據(jù)線,用 、 、 分別連接到LCD 的 RS、 RW、 E。 要顯示的字符或數(shù)據(jù)被送到相應的數(shù)組中,完成后再統(tǒng)一顯示。在數(shù)據(jù)處 理 子程序中,編寫算法將十進制數(shù)字量轉(zhuǎn)換成原始的數(shù)據(jù),輸出到顯示子程序進行顯示。使 CS 變低, I/O CLOCK, Data Input, Data Output 脫離高阻狀態(tài)。 LCD 初始化流程圖 圖 43 LCD 初始化流程圖 從通電開始延時,先經(jīng)過判別后再進行功能設置,過一段時間后可以設置顯示狀態(tài),再經(jīng)過延時清屏后才可以設置輸入方式。最后編寫 ( 0x01)指令,達到清屏顯示器的效果。首先是 AT89C51 的晶振電路和復位電路,這兩個電路需注意的就是電容和電阻的大小的選擇及單片機與這兩個電路的搭建。 輸入電路就是將電壓輸入信號通過運算放大器的負反饋來實現(xiàn)對電壓的衰減。在兩個輸入端分別接 10K 電阻,由于輸出運放輸出的電壓信號為負值,所以再連接一個反相電路將負電壓轉(zhuǎn)變?yōu)檎妷骸? 圖 51 Proteus 搭建的主體電路基于單片機的數(shù)字式電壓表 20 搭建實驗電路及調(diào)試分析 在進行了 Proteus 仿真后,確定總體方案是基本可行的。在這一系列調(diào)試過程中指導老師給我提出了幾點寶貴的建議。 第二,解決運放飽和輸出的方案。所以我們需要對輸入電壓進行衰減,衰減率分別為 1/ 1/ 1/100。這是因為信號發(fā)射器輸入的電壓信號受到輸入電阻的影響,而且誤差的大小與輸入電阻的大小成反比。因而, 在電路圖中,精確了反饋電阻的阻值,從而提高了電壓表的精確度。 電壓測量在很多參考書上都有介紹,但運用到軟件中時,出現(xiàn)各種不同 的錯誤,在參考別人的程序時,在老師的指導下,根據(jù)書本上所講的有關(guān)知識點加以改進,編了一個新的程序,來實現(xiàn)功能。 通過這次課程設計我也發(fā)現(xiàn)了自身存在的不足之處,雖然感覺理論上已經(jīng)掌握, 但在運用到實踐的過程中仍有意想 不到的困惑 ,經(jīng)過一番努力才得以解決。在讓我體會到了設計電路的艱辛的同時,更讓我體會到成功的喜悅和快樂。在這里向 您 說聲謝謝 。 sbit input=P1^4。 sbit flag_1=P2^1。 //顯示的單位及有關(guān)的字符 uchar code tab1[]=MV。 void delay(int z)//延時函數(shù) { int x,y。y0。 delay(5)。 } void write_dat(uchar dat)//往 1602 液晶寫數(shù)據(jù)函數(shù) { rs=1。 delay(5)。 write_(0x38)。 write_(0x06)。 } void init_timer0()//定時計數(shù)器 0 初值化函數(shù), { TMOD=0x01。//打開中斷 TR0=0。break。i5。 write_dat(a[3]+0x30)。)。 switch(x) { case 1:add=0x80+0x40。 while(*str!=39。 } } 基于單片機的數(shù)字式電壓表 26 void display_string(uchar x,uchar y,uchar *str1)// 顯 示 字 符 函 數(shù)(DigitalVoltmeter),x 行 y列開始顯示 { uint add。 write_(add)。 str1++。 clk=0。i++) { con_way=1。 delay(2)。 基于單片機的數(shù)字式電壓表 27 } cs=1。 dq=read_AD(0)。//一檔 ,量程 6V return dat_v。 delay(10)。 display(1,7,da