單片機數字電壓表設計LED顯示含C源代碼_第1頁
單片機數字電壓表設計LED顯示含C源代碼_第2頁
單片機數字電壓表設計LED顯示含C源代碼_第3頁
單片機數字電壓表設計LED顯示含C源代碼_第4頁
單片機數字電壓表設計LED顯示含C源代碼_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1.緒論31.1 課程設計要求31.2 數字電壓表介紹32.硬件單元電路設計32.1數字電壓表結構框圖32.1.1 AT89C51單片機簡介42.1.2 ADC0832轉換器簡介42.1.3 時鐘電路62.1.4 復位電路62.1.5 LED顯示電路73.軟件單元電路設計73.1 主程序流程圖73.2顯示子程序流程圖83.3 A/D轉換子程序流程圖93.4 數據處理子程序流程圖94.數字電壓表仿真設計圖與實物圖104.1 仿真圖104.2 器件清單104.3 硬件電路實物圖115.程序代碼126.項目設計總計197.參考文獻191. 緒論1.1 課程設計要求使用單片機AT89C51和ADC08

2、32設計一個數字電壓表,能夠測量05V之間的直流電壓值,兩位數碼顯示。在單片機的作用下,能監測兩路的輸入電壓值,用8位串行A/D轉換器,8位分辨率,逐次逼近型,基準電壓為 5V;能用兩位LED進行輪流顯示或單路選擇顯示,顯示精度0.1伏。1.2 數字電壓表介紹數字電壓表簡稱DVM,數字電壓表基本原理是將輸入的模擬電壓信號轉化為數字信號,再進行輸出顯示。而A/D轉換器的作用是將連續變化的模擬信號量轉化為離散的數字信號,器基本結構是由采樣保持,量化,編碼等幾部分組成。因此AD轉換是此次設計的核心元件。輸入的模擬量經過AD轉換器轉換,再由驅動器驅動顯示器輸出,便得到測量的數字電壓。2. 硬件單元電路

3、設計2.1數字電壓表結構框圖結構如(圖1)所示 圖12.1.1 AT89C51單片機簡介AT89C51是一個低功耗,高性能CMOS 8位單片機,片內含4k Bytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統及80C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,AT89C51在眾多嵌入式控制應用系統中得到廣泛應用。51單片機內包含以下幾個部件:1) 8位微處理器(CPU)。2) 數據存儲器(128B R

4、AM)。3) 程序存儲器(ROM/EPROM)。4) 4個8位可編程并行I/O口(P0口,P1口,P2口,P3口)。5) 1個全雙工的異步串行口。6) 2個16定時器/計數器。7) 中斷系統。8) 特殊功能寄存器(SFR)。圖2單片機片內結構如(圖2)所示: 2.1.2 ADC0832轉換器簡介ADC0832 是美國國家半導體公司生產的一種8 位分辨率、雙通道A/D轉換芯片。由于它體積小,兼容性強,性價比高而深受單片機愛好者及企業歡迎,其目前已經有很高的普及率。學習并使用ADC0832 可是使我們了解A/D轉換器的原理,有助于我們單片機技術水平的提高。芯片如下(圖3)所示:圖3芯片接口說明如下

5、:CS_ 片選使能,低電平芯片使能。CH0 模擬輸入通道0,或作為IN+/-使用。CH1 模擬輸入通道1,或作為IN+/-使用。GND 芯片參考0 電位(地)。DI 數據信號輸入,選擇通道控制。DO 數據信號輸出,轉換數據輸出。CLK 芯片時鐘輸入。Vcc/REF 電源輸入及參考電壓輸入(復用)。工作原理如下:正常情況下ADC0832 與單片機的接口應為4條數據線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時并未同時有效并與單片機的接口是雙向的,所以電路設計時可以將DO和DI 并聯在一根數據線上使用。當ADC0832未工作時其CS輸入端應為高電平,此時芯片禁用,CLK 和DO/

6、DI 的電平可任意。當要進行A/D轉換時,須先將CS使能端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端CLK 輸入時鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數據信號。在第1 個時鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號。在第2、3個脈沖下沉之前DI端應輸入2 位數據用于選擇通道功能。當此2 位數據為“1”、“0”時,只對CH0 進行單通道轉換。當2位數據為“1”、“1”時,只對CH1進行單通道轉換。當2 位數據為“0”、 “0”時,將CH0作為正輸入端IN+,CH1作為負輸入端IN-進行輸入。當2 位數據為“0”、“1”時,將C

7、H0作為負輸入端IN-,CH1 作為正輸入端IN+進行輸入。到第3 個脈沖的下沉之后DI端的輸入電平就失去輸入作用,此后DO/DI端則開始利用數據輸出DO進行轉換數據的讀取。從第4個脈沖下沉開始由DO端輸出轉換數據最高位DATA7,隨后每一個脈沖下沉DO端輸出下一位數據。直到第11個脈沖時發出最低位數據DATA0,一個字節的數據輸出完成。也正是從此位開始輸出下一個相反字節的數據,即從第11個字節的下沉輸出DATD0。隨后輸出8位數據,到第19 個脈沖時數據輸出完成,也標志著一次A/D轉換的結束。最后將CS置高電平禁用芯片,直接將轉換后的數據進行處理就可以了。2.1.3 時鐘電路XTAL1是片內

8、振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時,外部振蕩信號應直接加到XTAL1,而XTAL2懸空。內部方式時,時鐘發生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內選擇。電容取30PF左右。系統的時鐘電路設計是采用的內部方式,即利用芯片內部的振蕩電路如下(圖4)所示:圖42.1.4 復位電路由電容串聯電阻構成,由圖并結合"電容電壓不能突變"的性質,可以知道,當系統一上電,RST腳將會出現高電平,并且,這個高電平持續的時間由電路的RC值來決定.典型的51單片機當RST腳的高電平持續兩個機器周期以上就將復

9、位,所以,適當組合RC的取值就可以保證可靠的復位.一般教科書推薦C 取10u,R取8.2K.當然也有其他取法的,原則就是要讓RC組合可以在RST腳上產生不少于2個機周期的高電平.至于如何具體定量計算,可以參考電路分析相關書籍.復位電路如下(圖5)所示。圖52.1.5 LED顯示電路本項目所用顯示屏為4位LED顯示屏。本LED顯示器為8段(DP為小數點段),每一段為一個發光二極管。發光二極管有共陽極和共陰極兩種。本顯示器的發光二極管為共陽極數碼管。發光二極管的陽極連接在一起,通常在此共陽極接正電壓,當某個發光二極管的陰極接低電平時,發光二極管被點亮,相應的段被顯示。通過給LED顯示器提供不同的代

10、碼,是這些不同的LED顯示器相應的段發光顯示不同的字型,這些代碼稱為段碼。本項目所用段碼值如下 (表 1) 所示:顯示字符0123456789共陽極段碼0x030x9f0x250x0d0x990x490x410x1f0x0109表13. 軟件單元電路設計3.1 主程序流程圖主程序流程圖如下(圖6)所示:圖63.2顯示子程序流程圖顯示子程序流程圖如下(圖7)所示:圖73.3 A/D轉換子程序流程圖A/D轉換子程序流程圖如下(圖8)所示: 圖83.4 數據處理子程序流程圖數據處理子程序流程圖,如下(圖9)所示:圖9 4. 數字電壓表仿真設計圖與實物圖4.1 仿真圖如下(圖10)所示:圖104.2

11、器件清單表2如下(表2)所示所用器件名稱型號及大小個數單片機開發板AT89C51一個滑動變阻器10K兩個AD轉換器ADC0832一個LED共陽一個跳線插口-若干跳線-若干4.3 硬件電路實物圖圖11電路實物圖如下(圖11)所示:圖12電路實物圖如下(圖12)所示:5. 程序代碼#include <reg51.h>#include <intrins.h>/*端口定義*/sbit CS = P35;sbit Clk = P33;sbit DATI = P34;sbit DATO = P34;sbit P20=P24 ;/*定義全局變量*/unsigned char dat

12、= 0x00; /AD值unsigned char count = 0x00; /定時器計數unsigned char CH; /通道變量unsigned char dis = 0x00, 0x00,0x00; /顯示數值/*共陽LED段碼表*/unsigned char code tab=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09;char code tablewe= 0xfd,0xfb,0xf7,0xef,0xdf,0xfe ;/*函數功能:AD轉換子程序入口參數:CH出口參數:dat*/unsigned char adc0832(u

13、nsigned char CH) unsigned char i,test,adval; adval = 0x00; test = 0x00; Clk = 0; /初始化 DATI = 1; _nop_(); CS = 0; _nop_(); Clk = 1; _nop_(); if ( CH = 0x00 ) /通道選擇 Clk = 0; DATI = 1; /通道0的第一位 _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 0; /通道0的第二位 _nop_(); Clk = 1; _nop_(); else Clk = 0; DATI = 1; /通道

14、1的第一位 _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 1; /通道1的第二位 _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 1; for( i = 0;i < 8;i+ ) /讀取前8位的值 _nop_(); adval <<= 1; Clk = 1; _nop_(); Clk = 0; if (DATO) adval |= 0x01; else adval |= 0x00; for (i = 0; i < 8; i+) /讀取后8位的值 test >>= 1; if (DA

15、TO) test |= 0x80; else test |= 0x00; _nop_(); Clk = 1; _nop_(); Clk = 0; if (adval = test) /比較前8位與后8位的值,如果不相同舍去。若一直出現顯示為零,請將該行去掉 dat = test; nop_(); CS = 1; /釋放ADC0832 DATO = 1; Clk = 1; return dat;/*函數功能:延時子程序入口參數:出口參數:*/void delay(void) int k; for(k=10;k<500;k+);/*函數功能:將0-255級換算成0.00-5.00的電壓數值入

16、口參數:i出口參數:*/void convdata(unsigned char i) dis0 = i/51; /個位 dis1 = (i%51)*10/51; /小數點后第一位 dis2 = (i%51)*10%51)*10/51; /小數點后第二位/*函數功能:數碼管顯示子程序入口參數:出口參數:*/void display(void) P2=0xff; P0=tabdis0& 0xfe; /顯示個位和小數點11111110delay(); P2=0xdf; /11011111 delay(); P2=0xff; P0=tabdis1; /顯示小數點后第一位delay(); P2=

17、0xbf; /10111111 delay(); P2=0xff; P0=tabdis2; /顯示小數點后第二位delay(); P2=0x7f; /01111111 delay(); P2=0xff; P0=0xff; /顯示小數點后第二位delay(); P2=0xef; /11101111delay();/*函數功能:主程序入口參數:出口參數:*/void main(void) P2=0xff; /端口初始化 P0=0xff; delay();/延時 CH = 0x00; /在這里選擇通道 0x00或0x01 TMOD = 0x01; /設置中斷 TH0=(65536-50000)/25

18、6;/定時器1初值定時50msTL0=(65536-50000)%256; IE = 0x82; TR0 = 1; while(1) /主循環 dat = adc0832(CH); convdata(dat); /數據轉換 display(); /顯示數值 /*函數功能:定時器中斷延時程序 這一段的作用時隔一段時間抽樣一次 否側顯示的最后一位會不穩定入口參數:出口參數:*/void timer0(void) interrupt 1 TMOD = 0x01; TH0=(65536-50000)/256;/定時器1初值定時50msTL0=(65536-50000)%256; IE = 0x82; TR0 = 1; count+; if (count = 0x01) count = 0x00; dat = adc0832(CH); 6. 項目設計總計通過這次設計,使我深入了解了AT89C51單片機和ADC0832(AD轉換器)的結構和特點及數字電壓表的工作原理,加深了對課本理論知識的理解,鍛煉了實踐動手能

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論