單片機課程設(shè)計--簡易數(shù)字電壓表的設(shè)計_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  題 目:簡易數(shù)字電壓表的設(shè)計</p><p><b>  姓 名: </b></p><p><b>  學(xué) 號: </b></p><p>  專 業(yè):電子信息科學(xué)與技術(shù)</p><p><b>  指導(dǎo)老師: </b></p>

2、;<p><b>  設(shè)計時間: </b></p><p><b>  目 錄</b></p><p><b>  1.引 言1</b></p><p>  1.1.設(shè)計意義1</p><p>  1.2.系統(tǒng)功能要求1</p><p

3、>  1.3.本組成員所做的工作2</p><p><b>  2.方案設(shè)計2</b></p><p><b>  3.硬件設(shè)計3</b></p><p>  3.1 單片機最小系統(tǒng)4</p><p>  3.1.1.主控芯片STC89C52單片機介紹4</p><

4、;p>  3.1.2. 復(fù)位電路6</p><p>  3.1.3. 時鐘電路6</p><p>  3.2數(shù)碼管顯示電路7</p><p>  3.2.1.四位一體共陽數(shù)碼管7</p><p>  3.2.2. 74LS244鎖存器8</p><p>  3.2.3.整體顯示電路9</p>

5、;<p>  3.3.模數(shù)轉(zhuǎn)換模塊10</p><p><b>  4.軟件設(shè)計13</b></p><p>  4.1.初始化程序13</p><p>  4.2. 主程序14</p><p>  4.3. 顯示子程序14</p><p>  4.4. A/D轉(zhuǎn)換測量子程

6、序15</p><p><b>  5.系統(tǒng)調(diào)試15</b></p><p>  5.1.調(diào)試過程15</p><p>  5.2.性能分析16</p><p><b>  6.設(shè)計總結(jié)16</b></p><p>  附 錄A 源程序17</p>

7、<p>  附 錄B 系統(tǒng)仿真圖22</p><p>  附 錄C 作品實物圖片23</p><p>  附 錄D 測試圖片24</p><p><b>  參考文獻26</b></p><p><b>  簡易電壓變的設(shè)計</b></p><p>

8、<b>  1.引 言</b></p><p><b>  1.1.設(shè)計意義</b></p><p>  數(shù)字電壓表(Digital Voltmeter)簡稱DVM,它是采用數(shù)字化測量技術(shù),連續(xù)的模擬量(直流輸入電壓)轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式并加以顯示的儀表。傳統(tǒng)的指針式電壓表功能單一、精度低,不能滿足數(shù)字化時代的需求,采用單片機的數(shù)字電壓表

9、,由精度高、抗干擾能力強,可擴展性強、集成方便,還可與PC進行實時通信。在電氣測量中,電壓是一個很重要的參數(shù)。如何準確地測量模擬信號的電壓值,一直是電測儀器研究的內(nèi)容之一。數(shù)字電壓表是通用儀器中使用較廣泛的一種測試儀器,很多電量或非電量經(jīng)變化后都用可數(shù)字電壓表完成測試。因此,數(shù)字電壓表被廣泛地應(yīng)用于科研和生產(chǎn)測試中。</p><p>  本設(shè)計主要研究的是以AT89C52單片機為核心的電壓測量系統(tǒng),該系統(tǒng)能夠在單

10、片機的控制下完成對電壓信號采集,能夠根據(jù)采樣值進行量程自動轉(zhuǎn)換,并且測量結(jié)果可通過四個數(shù)碼管顯示出來,從而實現(xiàn)人工智能。</p><p>  1.2.系統(tǒng)功能要求</p><p>  1.設(shè)計一款數(shù)字電壓表,以MCS-51系列單片機為核心器件,組成一個簡單 的直流數(shù)字電壓表,將模擬的電壓信號轉(zhuǎn)換出來顯示在數(shù)碼管上。</p><p>  2.可以測量0~5V范圍內(nèi)的8

11、路直流電壓值。在4位LED數(shù)碼管上輪流顯示各路電壓值或單路選擇顯示,其中3位LED數(shù)碼管顯示電壓值,顯示范圍為0.00V~5.00V,1位LED數(shù)碼管顯示路數(shù),8路分別為0-7。要求測量的最小分辨率為0.02V。</p><p>  3.要求穩(wěn)定,無抖動,盡量使用較少的元器件。</p><p>  1.3.本組成員所做的工作</p><p>  本次的單片機課程設(shè)計

12、我們組分工明確,張翼和郭大亨主要負責(zé)電路板的器件的布局以及連線,而我則負責(zé)程序的編寫與調(diào)試以及課程設(shè)計報告的編寫。</p><p>  當(dāng)電路板焊接完成后,我們一起進行硬件電路的檢測與調(diào)試。由于接線中存在虛焊和接線錯誤之類的問題,我們組員之間一起細心排查各個環(huán)節(jié),逐一進行調(diào)試,最后終于找出了錯誤。共同完成硬件電路的調(diào)試。</p><p><b>  2.方案設(shè)計</b>

13、;</p><p>  根據(jù)功能要求,提出合理的設(shè)計方案,畫出方案方框圖,并對系統(tǒng)工作原理進行闡述。</p><p>  按系統(tǒng)功能實現(xiàn)要求,決定控制系統(tǒng)采用AT89S51單片機,A/D轉(zhuǎn)換采用ADC0809。系統(tǒng)除了能確保實現(xiàn)要求的功能外,還可以方便地進行8路其他A/D轉(zhuǎn)換量的測量和遠程測量結(jié)果傳送等擴展功能。數(shù)字電壓表的系統(tǒng)設(shè)計方案如框圖1.1所示。</p><p&

14、gt;  圖1.1 數(shù)字電壓表系統(tǒng)設(shè)計方案框圖</p><p><b>  3.硬件設(shè)計</b></p><p>  硬件電路的設(shè)計主要包括單片機系統(tǒng)及顯示電路、超聲波發(fā)射電路和超聲波檢測接收電路三部分。單片機采用STC89C52或其兼容系列。采用12MHz高精度的晶振,以獲得較穩(wěn)定時鐘頻率,減小測量誤差。單片機用P1.0端口輸出超聲波換能器所需的40kHz的方波信

15、號,利用外中斷0口監(jiān)測超聲波接收電路輸出的返回信號。超聲波發(fā)射電路主要有反相器74HC04和超聲波發(fā)射換能器T構(gòu)成,超聲波檢測接收電路主要是由集成電路CX20106A組成,顯示電路采用簡單實用的LED數(shù)碼管顯示。</p><p>  3.1整體設(shè)計思路框圖及原理圖</p><p>  硬件電路設(shè)計由6個部分組成; A/D轉(zhuǎn)換電路,AT89C51單片機系統(tǒng),LED顯示系統(tǒng)、時鐘電路、復(fù)位電路

16、以及測量電壓輸入電路。</p><p>  A/D轉(zhuǎn)換由集成電路ADC0809完成。ADC0809具有8路模擬輸入端口,地址線(第23~25腳)可決定對哪一路模擬輸入作A/D轉(zhuǎn)換。第22腳為地址鎖存控制,當(dāng)輸入為高電平時,對地址信號進行鎖存。第6腳為測試控制,當(dāng)輸入一個2μs寬高電平脈沖時,就開始A/D轉(zhuǎn)換。第7腳為A/D轉(zhuǎn)換結(jié)束標(biāo)志,當(dāng)A/D轉(zhuǎn)換結(jié)束時,第7腳輸出高電平。 第9腳為A/D轉(zhuǎn)換數(shù)據(jù)輸出允許控制,當(dāng)

17、OE腳為高電平時,A/D轉(zhuǎn)換數(shù)據(jù)從端口輸出。第10腳為A/D轉(zhuǎn)換的時鐘輸入端,利用單片機第30腳的6分頻晶振頻率,再通過14024二分頻得到1MHz時鐘。</p><p>  單片機的P1,P3.0~P3.3端口作為4位LED數(shù)碼管顯示控制。P3.5端口用作單路顯示/循環(huán)顯示轉(zhuǎn)換按鈕,P3.6端口用作單路顯示時選擇顯示的通道。P0端口用作A/D轉(zhuǎn)換數(shù)據(jù)讀入,P2端口用作ADC0809的A/D轉(zhuǎn)換控制。</p

18、><p>  系統(tǒng)原理總圖如圖3-1:</p><p>  圖3-1 系統(tǒng)原理圖</p><p>  3.1 單片機最小系統(tǒng)</p><p>  單片機最小系統(tǒng)由單片機STC89C52芯片,復(fù)位電路,時鐘電路等構(gòu)成。</p><p>  3.1.1.主控芯片STC89C52單片機介紹</p><p&

19、gt;  STC89C52是一種低功耗、高性能、CMOS八位微處理器,片內(nèi)有4K字節(jié)的在線可重復(fù)編程、快速擦除快速寫入程序的存儲器,能重復(fù)寫入/擦除1000次,數(shù)據(jù)保存時間為十年。它與MCS-51系列單片機在指令系統(tǒng)和引腳上完全兼容,不僅可完全代替MCS-51系列單片機,而且能使系統(tǒng)具有許多MCS-51系列產(chǎn)品沒有的功能。</p><p>  STC89C52可構(gòu)成真正的單片機最小應(yīng)用系統(tǒng),縮小系統(tǒng)體積,增加系統(tǒng)

20、的可靠性,降低系統(tǒng)的成本。只要程序長度小于4K,四個I/O口全部提供給用戶??捎?V電壓編程,而且擦寫時間僅需10ms,僅為8751/87C51的擦寫時間的百分之一,與8751/87C51的12V電壓擦寫相比,不易損壞器件,沒有兩種電源的要求,改寫時不撥下芯片,適合許多嵌入式控制領(lǐng)域。工作電壓范圍寬(2.7V~6V),全靜態(tài)工作,工作頻率寬在0Hz~24 MHz,比8751/87C51等系列的6MHz~24 MHz更具有靈活性,系統(tǒng)能快

21、能慢。STC89C52芯片提供三級程序存儲器加密,提供了方便靈活而可靠的硬加密手段,能完全保證程序或者系統(tǒng)不被仿制。STC89C52單片機為40引腳芯片,如下圖3-1所示。</p><p>  P0口:三態(tài)雙向口,通稱數(shù)據(jù)總線口,因為只有該口能直接用于對外部存儲器的讀/寫操作。也用以輸出外部存儲器的低8位地址。由于是分時輸出,故應(yīng)在外部價鎖存器將此地址數(shù)據(jù)鎖存。地址鎖存信號用ALE。</p><

22、;p>  P1口:專門供用戶使用的I/O口,是準雙向口。</p><p>  P2口:從系統(tǒng)擴展時作為高8位地址線用。不擴展外部存儲器時,也可以作為用戶I/O口線使用,是準雙向口。</p><p>  P3口:雙功能口,該口的每一位均可獨立地定義為第一I/O功能或者第二I/O功能。作為第一功能使用時操作同P1口。第二功能如下表3-1所示。</p><p>  

23、圖3-1 STC89C52引腳圖</p><p>  表3-1 P3口的第二功能</p><p>  RST:當(dāng)晶振工作時,RST引腳持續(xù)2個機器周期高電平將使單片機復(fù)位。</p><p>  XTAL1:反相振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p><p>  XTAL2:來自反相振蕩器的輸出。</p><p&

24、gt;  3.1.2. 復(fù)位電路</p><p>  單片機上電時,當(dāng)振蕩器正在運行時,只要持續(xù)給出RST引腳兩個機器周期的高電平,便可完成系統(tǒng)復(fù)位。外部復(fù)位電路是為提供兩個機器周期以上的高電平而設(shè)計的。系統(tǒng)采用上電自動復(fù)位,上電瞬間電容器上的電壓不能突變,RST上的電壓是Vcc上的電壓與電容器上的電壓之差,因而RST上的電壓與Vcc上的電壓相同。隨著充電的進行,電容器上的電壓不斷上升,RST上的電壓就隨著下降,

25、RST腳上只要保持10ms以上高電平,系統(tǒng)就會有效復(fù)位。</p><p>  復(fù)位電路的實現(xiàn)可以有很多種方法,但是從功能上一般分為兩種:一種是電源復(fù)位,即外部的復(fù)位電路在系統(tǒng)通上電源之后直接使單片機工作,單片機的起停通過電源控制;另一種方法是在復(fù)位電路中設(shè)計按鍵開關(guān),通過按鍵開關(guān)觸發(fā)復(fù)位電平,控制單片機的復(fù)位。本設(shè)計使用了第一種方法,其電路圖如圖3-2所示。</p><p>  圖3-2

26、STC89C52單片機最小系統(tǒng)</p><p>  3.1.3. 時鐘電路</p><p>  STC89C52單片機有一個用于構(gòu)成內(nèi)部振蕩器的反相放大器,XTAL1和XTAL2分別是放大器的輸入、輸出端,外接石英晶體或陶瓷振蕩器以及補償電容C2、C3構(gòu)成并聯(lián)諧振電路。當(dāng)外接石英晶體時,電容C2、C3選30pF±10pF;當(dāng)外接陶瓷振蕩器時,電容C2、C3選40pF±1

27、0pF。STC89C52系統(tǒng)中晶振頻率一般在1.2~12MHz選擇。外接電容C2、C3的大小會影響振蕩器頻率的高低、振蕩頻率的穩(wěn)定度、起振時間及溫度穩(wěn)定性。在設(shè)計電路板時,晶振和電容應(yīng)靠近單片機,以便減少寄生電容,保證振蕩器穩(wěn)定可靠工作。</p><p>  3.2數(shù)碼管顯示電路</p><p>  3.2.1.四位一體共陽數(shù)碼管</p><p>  數(shù)碼管按段數(shù)分

28、為七段數(shù)碼管和八段數(shù)碼管,八段比七段多一個發(fā)光二極管單元(小數(shù)點);按能顯示多少個“8”可分為1位、2位、4位或多位數(shù)碼管。按發(fā)光二極管單元連接方式分為共陽數(shù)碼管和共陰數(shù)碼管,本課題中使用的就是四位一體共陽數(shù)碼管,其引腳圖如下圖3-3所示:</p><p>  圖3-3 四位一體共陽數(shù)碼管引腳圖</p><p>  共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管

29、,它在應(yīng)用時應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮。當(dāng)某一字段的陰極為高電平時,相應(yīng)字段就不亮。數(shù)碼管邏輯功能圖如下圖3-4所示:</p><p>  圖3-4 數(shù)碼管邏輯功能圖</p><p>  3.2.2. 74LS244鎖存器</p><p>  總線驅(qū)動器74LS244和74LS245經(jīng)常用作三態(tài)數(shù)據(jù)緩沖器,74

30、LS244為單向三態(tài)數(shù)據(jù)緩沖器,而74LS245為雙向三態(tài)數(shù)據(jù)緩沖器。單向的內(nèi)部有8個三態(tài)驅(qū)動器,分成兩組,分別由控制端1G和2G控制; 雙向的有16個三態(tài)驅(qū)動器,每個方向8個。在控制端G有效時(G為低電平),由DIR端控制驅(qū)動方向:DIR為“1”時方向從左到右(輸出允許),DIR為“0”時方向從右到左(輸入允許)。74LS244和74LS245的引腳圖如圖3-5所示。</p><p>  圖3-5 74LS24

31、4以及74LS245引腳圖</p><p>  74LS245內(nèi)部結(jié)構(gòu)及真值表如下圖3-6所示。</p><p>  圖3-6 74LS245真值表以及內(nèi)部結(jié)構(gòu)圖</p><p>  G=0,DIR=0,B->A;G=0, DIR=1, A->B;G=1, DIR=X, X=0或者1,輸入和輸出均為高阻態(tài);高阻態(tài)的含意就是相當(dāng)于沒有這個芯片</

32、p><p>  74LS245是8路3態(tài) 雙向緩沖驅(qū)動,也叫做總線驅(qū)動門電路或線驅(qū)動。主要使用在數(shù)據(jù)的雙向緩沖,原來常見于51的數(shù)據(jù)接口電路,比如,早期電路中,擴展了很多的8255/8155/8251/8253/573等芯片的時候,擔(dān)心8031的數(shù)據(jù)驅(qū)動能力不足,就使用一片245作為數(shù)據(jù)緩沖電路,增強驅(qū)動能力;也常見與ISA卡的接口電路.</p><p>  3.2.3.整體顯示電路</

33、p><p>  由于單片機的并行口不能直接驅(qū)動LED顯示器,所以,在一般情況下,必須采用專用的驅(qū)動電路芯片,使之產(chǎn)生足夠大的電流,顯示器才能正常工作[7]。如果驅(qū)動電路能力差,即負載能力不夠時,顯示器亮度就低,而且驅(qū)動電路長期在超負荷下運行容易損壞,因此,LED顯示器的驅(qū)動電路設(shè)計是一個非常重要的問題。</p><p>  為了簡化數(shù)字式直流電壓表的電路設(shè)計,在LED驅(qū)動電路的設(shè)計上,以利用單

34、片機P1口經(jīng)過鎖存器LS244限流電阻連接到數(shù)碼管的段選,如下圖所</p><p>  3.3.模數(shù)轉(zhuǎn)換模塊</p><p>  ADC0809是帶有8位A/D轉(zhuǎn)換器、8路多路開關(guān)以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉(zhuǎn)換器,可以和單片機直接接口。 (1)ADC0809的內(nèi)部邏輯結(jié)構(gòu) </p><p>  由下圖可知,ADC0809由一個8

35、路模擬開關(guān)、一個地址鎖存與譯碼器、一個A/D轉(zhuǎn)換器和一個三態(tài)輸出鎖存器組成。多路開關(guān)可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉(zhuǎn)換器進行轉(zhuǎn)換。三態(tài)輸出鎖器用于鎖存A/D轉(zhuǎn)換完的數(shù)字量,當(dāng)OE端為高電平時,才可以從三態(tài)輸出鎖存器取走轉(zhuǎn)換完的數(shù)據(jù)。</p><p> ?。?).ADC0809引腳結(jié)構(gòu) </p><p>  ADC0809各腳功能如下:D7-D0:8位數(shù)字量輸出引腳

36、。IN0-IN7:8位模擬量輸入引腳。VCC:+5V工作電壓。GND:地。REF(+):參考電壓正端。REF(-):參考電壓負端。START:A/D轉(zhuǎn)換啟動信號輸入端。ALE:地址鎖存允許信號輸入端。(以上兩種信號用于啟動A/D轉(zhuǎn)換).EOC:轉(zhuǎn)換結(jié)束信號輸出引腳,開始轉(zhuǎn)換時為低電平,當(dāng)轉(zhuǎn)換結(jié)束時為高電平。OE:輸出允許控制端,用以打開三態(tài)數(shù)據(jù)輸出鎖存器。CLK:時鐘信號輸入端(一般為500KHz)。A、B、C:

37、地址輸入線。</p><p>  ADC0809對輸入模擬量要求:信號單極性,電壓范圍是0-5V,若信號太小,必須進行放大;輸入的模擬量在轉(zhuǎn)換過程中應(yīng)該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。 </p><p>  地址輸入和控制線:4條 </p><p>  ALE為地址鎖存允許輸入線,高電平有效。當(dāng)ALE線為高電平時,地址鎖存與譯碼器將A,

38、B,C三條地址線的地址信號進行鎖存,經(jīng)譯碼后被選中的通道的模擬量進入轉(zhuǎn)換器進行轉(zhuǎn)換。A,B和C為地址輸入線,用于選通IN0-IN7上的一路模擬量輸入。通道選擇表如下表所示。</p><p>  數(shù)字量輸出及控制線:11條 </p><p>  ST為轉(zhuǎn)換啟動信號。當(dāng)ST上跳沿時,所有內(nèi)部寄存器清零;下跳沿時,開始進行A/D轉(zhuǎn)換;在轉(zhuǎn)換期間,ST應(yīng)保持低電平。EOC為轉(zhuǎn)換結(jié)束信號。當(dāng)EOC為

39、高電平時,表明轉(zhuǎn)換結(jié)束;否則,表明正在進行A/D轉(zhuǎn)換。OE為輸出允許信號,用于控制三條輸出鎖存器向單片機輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù);OE=0,輸出數(shù)據(jù)線呈高阻狀態(tài)。D7-D0為數(shù)字量輸出線。 </p><p>  CLK為時鐘輸入信號線。因ADC0809的內(nèi)部沒有時鐘電路,所需時鐘信號必須由外界提供,通常使用頻率為500KHZ, </p><p>  VREF(+),

40、VREF(-)為參考電壓輸入。 </p><p>  2. ADC0809應(yīng)用說明 </p><p> ?。?). ADC0809內(nèi)部帶有輸出鎖存器,可以與AT89S51單片機直接相連。 </p><p>  (2). 初始化時,使ST和OE信號全為低電平。 </p><p> ?。?). 送要轉(zhuǎn)換的哪一通道的地址到A,B,C端口上。 <

41、;/p><p>  (4). 在ST端給出一個至少有100ns寬的正脈沖信號。 </p><p>  (5). 是否轉(zhuǎn)換完畢,我們根據(jù)EOC信號來判斷。 </p><p> ?。?). 當(dāng)EOC變?yōu)楦唠娖綍r,這時給OE為高電平,轉(zhuǎn)換的數(shù)據(jù)就輸出給單片機了。 </p><p><b>  4.軟件設(shè)計</b></p>

42、;<p>  整個系統(tǒng)的程序包括初始化程序、主程序、顯示子程序、A/D轉(zhuǎn)換測量子程序,下面就各個分塊的程序進行分析:</p><p><b>  4.1.初始化程序</b></p><p>  系統(tǒng)上電時,初始化程序主要用來執(zhí)行對單片機各個端口的初始化,包括P0-P3口,另外初始化的另一個作用是對定時器的初始化,確定其工作方式。</p>&

43、lt;p><b>  4.2. 主程序</b></p><p>  在剛上電時,系統(tǒng)默認為循環(huán)顯示8個通道的電壓值狀態(tài)。當(dāng)進行一次測量后,將顯示每一通道的A/D轉(zhuǎn)換值,每個通道的數(shù)據(jù)顯示時間在1s左后。主程序在調(diào)用顯示子程序與測量程序之間循環(huán)。</p><p>  主程序流程圖如圖4-1所示。</p><p>  圖4-1 主程序流程圖&

44、lt;/p><p>  4.3. 顯示子程序</p><p>  顯示子程序采用動態(tài)掃描法實現(xiàn)4位數(shù)碼管的數(shù)值顯示。測量所得的A/D轉(zhuǎn)換數(shù)據(jù)放在70H-77H內(nèi)存單元中,測量數(shù)據(jù)在顯示時須經(jīng)過轉(zhuǎn)換成十進制BCD碼放在78H-7BH單元中,其中7BH存放通道標(biāo)志數(shù)。寄存器R3用作8路循環(huán)控制,R0用作顯示數(shù)據(jù)地址指針。</p><p>  4.4. A/D轉(zhuǎn)換測量子程序

45、</p><p>  A/D轉(zhuǎn)換測量子程序用來對ADC0809的8路模擬輸入電壓的A/D轉(zhuǎn)換,并將對應(yīng)數(shù)值移入70H-77H單元中。</p><p>  A/D轉(zhuǎn)換測量子程序流程圖如圖4-2所示。</p><p>  圖4-2 A/D轉(zhuǎn)換測量子程序流程圖</p><p><b>  5.系統(tǒng)調(diào)試</b></p>

46、;<p><b>  5.1.調(diào)試過程</b></p><p>  這次的單片機課程設(shè)計雖然簡單,但調(diào)試時還是很麻煩。首先,我們要清楚地了解整個簡易電壓表各個部分的工作原理以及各個部分的作用,只有這樣才能在調(diào)試當(dāng)中對出現(xiàn)問題進行合理的分析與排查。</p><p>  我們這次系統(tǒng)的調(diào)試,剛焊接完成,我們將初步寫好的測試程序燒進單片機,進行硬件電路的調(diào)試,

47、初步檢測完畢上電時數(shù)碼管并沒有亮,整個系統(tǒng)沒什么反應(yīng),于是我們對每個芯片進行測試,看是否為其提供了工作電壓,結(jié)果發(fā)現(xiàn)用于分頻的CD4024沒有工作,電源的正極沒有加上去。排查這個錯誤后,我們再次上電,這次數(shù)碼管上的碼顯示得不對,出現(xiàn)了亂碼的現(xiàn)象。進過分析,只有兩種可能,一是數(shù)碼管的段選和位選接錯了,二是鎖存器接得有問題,后經(jīng)過組員們的檢查,發(fā)現(xiàn)是鎖存器接得有問題,于是我們又將鎖存器重新接了下。最終,進過我們的共同努力,我們的電路板在硬件

48、上沒有了問題。</p><p>  在保證硬件沒問題的前提下,我們對軟件進行進一步完善,使硬件能很好地與軟件融合,讓整個系統(tǒng)能按預(yù)期的目標(biāo)工作。在調(diào)試軟件時,一上電時,數(shù)碼管就有顯示,我檢測了程序的初始化部分,自己把P1口的初始化加了進去,使在沒有輸入電壓時,數(shù)碼管顯示為零。但再一次上電測試時,數(shù)碼管還是有顯示,上網(wǎng)查閱了相關(guān)資料,有可能是懸空電壓所致,所以雖沒接輸入電壓,但還是有個電壓值。</p>

49、<p><b>  5.2.性能分析</b></p><p> ?。?)由于單片機為8位處理器,當(dāng)輸入電壓為5.00V時,ADC0809輸出數(shù)據(jù)值為255(FFH),因此單片機最高的數(shù)值分辨率為0.0196V(5/255)。這就決定了該電壓表最高分辨率(精度)只能達到0.0196V,測量時電壓一般以0.02V的幅度變化。如果要獲得更高的精度要求,則應(yīng)采用12位、13位的A/D轉(zhuǎn)換

50、器。</p><p> ?。?)關(guān)于實際測量結(jié)果(見附錄C),從圖中可以看出自己所做的電壓表與實際的數(shù)字電壓表的數(shù)值上有些誤差,但誤差值都在0.1V以內(nèi),對要求不太高的場合沒有多大影響。</p><p> ?。?)關(guān)于懸空電壓的問題,就是在AD模塊沒有接輸入時,數(shù)碼管上有顯示,經(jīng)查閱資料可知可通過接大電阻接地來消除。</p><p><b>  6.設(shè)計總

51、結(jié)</b></p><p>  經(jīng)過近二周的單片機課程設(shè)計,終于完成了我的數(shù)字電壓表的設(shè)計,基本達到設(shè)計要求。 </p><p>  對于此次課程設(shè)計,有許多的感觸與體會,遇到的難題多,學(xué)習(xí)到的知識也就更多。 </p><p>  第一,硬件電路遇到了ADC0809 無內(nèi)部時鐘,需外接外部時鐘,如何解決這個問題,我 們小組進行了多次討論,最終確定了在程序

52、中提供時鐘信號,大大降低了硬件電路的復(fù)雜度。 </p><p>  第二,則是解決程序設(shè)計的問題,而程序設(shè)計是一個很靈活的東西,它反映了你解決問 題的邏輯思維和創(chuàng)新能力,它才是一個設(shè)計的靈魂所在。因此在整個設(shè)計過程中大部分時間 是用在程序上面的。其中,我遇到了很多的問題,雖然以前還做過這樣的設(shè)計,但是以前的 都是用C 語言進行編程。而此次運用匯編語言編程,著實讓我當(dāng)頭一棒,因為除了微機原理 實驗進行過相關(guān)編程,匯

53、編語言的編程能力還停留在理論階段。在此次編程中,首先,我是 先用C 語言編程,進行調(diào)試后,成功的達到了課程設(shè)計的要求。其次,查找匯編語言的相關(guān) 資料,經(jīng)過不懈的努力與調(diào)試,終于將匯編語言版的成功編程出來。 </p><p>  第三,在一個課題中,要設(shè)計一個成功的電路,必須要有耐心,要有堅持的毅力。在整個電路的設(shè)計過程中,重要的是各個單元電路的連接及電路的細節(jié)設(shè)計上,如在多種方案的 選擇中,我們仔細比較分析其原理

54、以及可行的原因。這就要求我們對硬件系統(tǒng)中各組件部分 有充分透徹的理解和研究,并能對之靈活應(yīng)用。完成這次設(shè)計后,我在書本理論知識的基礎(chǔ) 上又有了更深層次的理解。 第四,在本次設(shè)計的過程中,我還學(xué)會了高效率的查閱資料、運用工具書、利用網(wǎng)絡(luò)查 找資料。我發(fā)現(xiàn),在我們所使用的書籍上有一些知識在實際應(yīng)用中其實并不是十分理想,各 種參數(shù)都需要自己去調(diào)整,這就要求我們應(yīng)更加注重實踐環(huán)節(jié)。 </p><p>  最后,還要在此感

55、謝課程設(shè)計的指導(dǎo)老師和我的組員們,他們在整個過程中都給予了我充分的幫助與支持。這次單片機課程設(shè)計,雖然做的是簡單的數(shù)字電壓表,所涉及到的器件也不是很多,但此次還是有所收獲。</p><p><b>  附 錄A 源程序</b></p><p>  #include<reg52.h></p><p>  #include<in

56、trins.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  sbit wei1=P3^0; //定義數(shù)碼管位選端口</p><p>  sbit wei2=P3^1;</p><p&g

57、t;  sbit wei3=P3^2;</p><p>  sbit wei4=P3^3;</p><p>  sbit s1=P3^5; //定義“單路/循環(huán)”端口</p><p>  sbit s2=P3^6; //定義“通道選擇”端口</p><p>  sbit eoc=P3^7; //定義外部觸發(fā)信號的端

58、口,單片機正常工作時,此頻率為時鐘震蕩頻率的1/6</p><p>  sbit oe=P2^5; //定義ADC0809輸出允許控制端</p><p>  sbit start=P2^4; //定義A/D轉(zhuǎn)換啟動信號輸入端</p><p>  sbit ale=P2^3; //定義ADC0809地址鎖存信號輸入端</p><

59、;p>  sbit cc=P2^2; //定義地址輸入線C,B,A</p><p>  sbit bb=P2^1;</p><p>  sbit aa=P2^0;</p><p>  uint count=0,num,ch,flag,bai,shi,ge,t; //定義無符號變臉</p><p>  uchar tem

60、p; //定義無符號字符變量 </p><p>  uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //定義0-9的編碼</p><p>  uchar code table_d[10]={0x40,0x79,0x24,0x3

61、0,0x19,0x12,0x02,0x78,0x00,0x10};</p><p>  void display(); //聲明顯示函數(shù)</p><p><b>  /*延時函數(shù)*/</b></p><p>  void delay(uint del)</p><p><b>  {</

62、b></p><p><b>  uint x,y;</b></p><p>  for(x=0;x<del;x++)</p><p>  for(y=0;y<50;y++);</p><p><b>  } </b></p><p>  /*循環(huán)顯示函數(shù)*

63、/</p><p>  void delay1(uint m)</p><p><b>  {</b></p><p><b>  uint i;</b></p><p>  for(i=0;i<=m;i++)</p><p><b>  {</b>

64、;</p><p>  display(); //調(diào)用顯示函數(shù)</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /*初始化函數(shù)*/</b></p><p>  void i

65、nit()</p><p><b>  {</b></p><p>  TMOD=0x01; //確定定時器T0工作方式為方式1,即16位計數(shù)器</p><p>  TH0=0x4c; //裝計數(shù)初值</p><p>  TL0=0x00; </p><p

66、>  EA=1; //開總中斷</p><p>  ET0=1; //開定時器T0允許位</p><p>  TR0=1; //啟動定時器T0</p><p>  P3=0xff; //P3口置高電平</p><p>  P0=0xff;

67、 //P0口置高電平,沒有數(shù)據(jù)寫入</p><p>  P2=0x00; //P2口置低電平,此時ADC0809不能工作</p><p>  P1=0xff; //P1口置高電平,數(shù)碼管全滅</p><p><b>  }</b></p><p>  /*定時器中斷服務(wù)程序*/&l

68、t;/p><p>  void time0() interrupt 1</p><p><b>  {</b></p><p>  TH0=0x4c; //重裝初值</p><p><b>  TL0=0x00;</b></p><p>  count++;

69、 //技術(shù)值加1</p><p>  if(count==40) //判斷是否計數(shù)到40次</p><p><b>  {</b></p><p>  count=0; //如果計數(shù)滿40次,則計數(shù)標(biāo)記位清零</p><p>  ch++; //通道計數(shù)標(biāo)志位加1 </p>

70、;<p>  if(ch==8) //判斷8通道是否循環(huán)了一次</p><p>  ch=0; //若8個通道循環(huán)顯示了一遍,則通道計數(shù)標(biāo)志位置0</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*ADC0809調(diào)用函數(shù)*

71、/</p><p>  void ad0809()</p><p><b>  {</b></p><p>  ale=1; //地址鎖存允許位置1</p><p>  _nop_();_nop_(); //調(diào)用延時函數(shù),待數(shù)據(jù)穩(wěn)定</p><p>  ale=0;

72、 //地址鎖存允許位置0</p><p>  start=1; //啟動ADC0809</p><p>  _nop_();_nop_(); //調(diào)用延時函數(shù),待數(shù)據(jù)穩(wěn)定</p><p>  start=0; //關(guān)閉ADC0809</p><p>  _nop_();_nop_();_no

73、p_();_nop_(); //調(diào)用延時函數(shù),待數(shù)據(jù)穩(wěn)定</p><p>  while(eoc==0); //</p><p>  oe=1; //輸出允許端置1</p><p>  temp=P0;

74、//將P0口數(shù)據(jù)賦給temp </p><p><b>  }</b></p><p><b>  /*顯示函數(shù)*/</b></p><p>  void display()</p><p><b>  {</b></p><p>  n

75、um=temp; //將temp的值賦給num </p><p>  bai=num/51; //百位轉(zhuǎn)換為BCD碼</p><p>  t=num%51; </p><p><b>  t=t*10;</b></p><p>  shi

76、=t/51; //十位轉(zhuǎn)換為BCD碼</p><p><b>  t=shi%51;</b></p><p><b>  t=t*10;</b></p><p>  ge=t/51; //個位轉(zhuǎn)換為BCD碼</p><p>  P1=0xff;

77、 //數(shù)碼管全滅,消去余暉 </p><p>  wei4=1; //關(guān)第4位,開第1位</p><p><b>  wei1=0;</b></p><p>  P1=table[ch%10]; //將表中數(shù)值賦給P1口</p><p><b>  delay(1);&

78、lt;/b></p><p><b>  P1=0xff;</b></p><p>  wei1=1; //關(guān)第1位,開第2位</p><p><b>  wei2=0;</b></p><p>  P1=table_d[bai];</p><p&g

79、t;<b>  delay(1);</b></p><p><b>  P1=0xff;</b></p><p><b>  wei2=1;</b></p><p><b>  wei3=0;</b></p><p>  P1=table[shi];<

80、;/p><p><b>  delay(1);</b></p><p><b>  P1=0xff;</b></p><p><b>  wei3=1;</b></p><p><b>  wei4=0;</b></p><p>  P

81、1=table[ge];</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  /*按鍵掃描函數(shù)*/</p><p>  void keyscan()</p><p><b>  {</b>&

82、lt;/p><p>  if((s1==0)||(s2==0)) //判斷s1和s2中是否有按鍵被按下</p><p><b>  {</b></p><p>  delay1(5);</p><p>  if((flag==0)||(flag==2)) //判斷是哪個鍵被按下</p><p>

83、;<b>  {</b></p><p>  if(s1==0) //“單路/循環(huán)”選擇鍵被按下</p><p><b>  {</b></p><p>  flag++; </p><p>  while(!s1)</p><p><

84、b>  {</b></p><p>  display(); </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(flag==2)&l

85、t;/p><p><b>  {</b></p><p>  if(s2==0) //“通道選擇”鍵被按下</p><p><b>  {</b></p><p>  ch++; //循環(huán)狀態(tài)時,通道數(shù)自加1</p><p>  if(ch==8)

86、 //判斷8個通道是否都掃描了一次</p><p>  ch=0; //8通道掃描完后,進行下一次掃描</p><p>  while(!s2) //單通道時,選擇通道后,指定通道顯示測量值</p><p><b>  {</b></p><p>  display();</p>

87、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><

88、;p><b>  /*主函數(shù)*/</b></p><p>  void main()</p><p><b>  {</b></p><p>  init(); //調(diào)用初始化函數(shù)</p><p>  while(1) //等待中斷</p&g

89、t;<p><b>  { </b></p><p>  keyscan(); //調(diào)用按鍵掃描函數(shù)</p><p>  switch(ch) //通道選擇</p><p><b>  {</b></p><p>  case 0:cc=0;bb=0;aa=

90、0;break; //通道0-7</p><p>  case 1:cc=0;bb=0;aa=1;break;</p><p>  case 2:cc=0;bb=1;aa=0;break;</p><p>  case 3:cc=0;bb=1;aa=1;break;</p><p>  case 4:cc=4;bb=0;aa=

91、0;break;</p><p>  case 5:cc=1;bb=0;aa=1;break;</p><p>  case 6:cc=1;bb=1;aa=0;break;</p><p>  case 7:cc=1;bb=1;aa=1;break;</p><p><b>  }</b></p><

92、p>  ad0809(); //調(diào)用ADC0809函數(shù)</p><p>  display(); //調(diào)用顯示函數(shù)</p><p>  if(flag==3)</p><p><b>  { </b></p><p>  TH0=0x4c; //重

93、裝初值</p><p><b>  TL0=0x00;</b></p><p>  count=0; //計數(shù)值清零</p><p>  TR0=1; //啟動定時器T0</p><p>  flag=0; //標(biāo)志位清零</p>

94、<p><b>  ch=0;</b></p><p><b>  }</b></p><p>  if(flag==1)</p><p><b>  {</b></p><p>  TR0=0; //關(guān)閉定時器T0</p>

95、<p><b>  ch=0;</b></p><p>  flag=2; //標(biāo)志位置2</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b>&l

96、t;/p><p>  附 錄B 系統(tǒng)仿真圖</p><p>  附 錄C 作品實物圖片</p><p><b>  正面實物圖:</b></p><p><b>  反面焊接圖:</b></p><p>  附 錄D 測試圖片</p><p>  通

97、道0電壓測量值測試</p><p>  其他通道測試圖(以通道4為例)</p><p><b>  參考文獻</b></p><p>  [1] 張毅剛.單片機原理及應(yīng)用(第二版)[M].北京:高等教育出版社,2010.</p><p>  [2] 樓然苗,李光飛.單片機課程設(shè)計指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,

98、2007.</p><p>  [3] 譚浩強.C程序設(shè)計(第四版)[M].北京:清華大學(xué)出版社,2010. </p><p>  [4] 周荷琴,吳秀清.微型計算機原理與接口技術(shù)(第四版)[M].合肥:中國科學(xué)技術(shù)大學(xué)出版社,2008. </p><p>  [5] 李忠明.微機原理與接口技術(shù)[M].武漢:華中科技大學(xué)出版社,2011. </p>&

溫馨提示

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

評論

0/150

提交評論