版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 題 目:簡易數(shù)字電壓表的設(shè)計(jì)</p><p><b> 姓 名: </b></p><p><b> 學(xué) 號(hào): </b></p><p> 專 業(yè):電子信息科學(xué)與技術(shù)</p><p><b> 指導(dǎo)老師: </b></p>
2、;<p><b> 設(shè)計(jì)時(shí)間: </b></p><p><b> 目 錄</b></p><p><b> 1.引 言1</b></p><p> 1.1.設(shè)計(jì)意義1</p><p> 1.2.系統(tǒng)功能要求1</p><p
3、> 1.3.本組成員所做的工作2</p><p><b> 2.方案設(shè)計(jì)2</b></p><p><b> 3.硬件設(shè)計(jì)3</b></p><p> 3.1 單片機(jī)最小系統(tǒng)4</p><p> 3.1.1.主控芯片STC89C52單片機(jī)介紹4</p><
4、;p> 3.1.2. 復(fù)位電路6</p><p> 3.1.3. 時(shí)鐘電路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è)計(jì)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)換測(cè)量子程
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è)計(jì)總結(jié)16</b></p><p> 附 錄A 源程序17</p>
7、<p> 附 錄B 系統(tǒng)仿真圖22</p><p> 附 錄C 作品實(shí)物圖片23</p><p> 附 錄D 測(cè)試圖片24</p><p><b> 參考文獻(xiàn)26</b></p><p><b> 簡易電壓變的設(shè)計(jì)</b></p><p>
8、<b> 1.引 言</b></p><p><b> 1.1.設(shè)計(jì)意義</b></p><p> 數(shù)字電壓表(Digital Voltmeter)簡稱DVM,它是采用數(shù)字化測(cè)量技術(shù),連續(xù)的模擬量(直流輸入電壓)轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式并加以顯示的儀表。傳統(tǒng)的指針式電壓表功能單一、精度低,不能滿足數(shù)字化時(shí)代的需求,采用單片機(jī)的數(shù)字電壓表
9、,由精度高、抗干擾能力強(qiáng),可擴(kuò)展性強(qiáng)、集成方便,還可與PC進(jìn)行實(shí)時(shí)通信。在電氣測(cè)量中,電壓是一個(gè)很重要的參數(shù)。如何準(zhǔn)確地測(cè)量模擬信號(hào)的電壓值,一直是電測(cè)儀器研究的內(nèi)容之一。數(shù)字電壓表是通用儀器中使用較廣泛的一種測(cè)試儀器,很多電量或非電量經(jīng)變化后都用可數(shù)字電壓表完成測(cè)試。因此,數(shù)字電壓表被廣泛地應(yīng)用于科研和生產(chǎn)測(cè)試中。</p><p> 本設(shè)計(jì)主要研究的是以AT89C52單片機(jī)為核心的電壓測(cè)量系統(tǒng),該系統(tǒng)能夠在單
10、片機(jī)的控制下完成對(duì)電壓信號(hào)采集,能夠根據(jù)采樣值進(jìn)行量程自動(dòng)轉(zhuǎn)換,并且測(cè)量結(jié)果可通過四個(gè)數(shù)碼管顯示出來,從而實(shí)現(xiàn)人工智能。</p><p> 1.2.系統(tǒng)功能要求</p><p> 1.設(shè)計(jì)一款數(shù)字電壓表,以MCS-51系列單片機(jī)為核心器件,組成一個(gè)簡單 的直流數(shù)字電壓表,將模擬的電壓信號(hào)轉(zhuǎn)換出來顯示在數(shù)碼管上。</p><p> 2.可以測(cè)量0~5V范圍內(nèi)的8
11、路直流電壓值。在4位LED數(shù)碼管上輪流顯示各路電壓值或單路選擇顯示,其中3位LED數(shù)碼管顯示電壓值,顯示范圍為0.00V~5.00V,1位LED數(shù)碼管顯示路數(shù),8路分別為0-7。要求測(cè)量的最小分辨率為0.02V。</p><p> 3.要求穩(wěn)定,無抖動(dòng),盡量使用較少的元器件。</p><p> 1.3.本組成員所做的工作</p><p> 本次的單片機(jī)課程設(shè)計(jì)
12、我們組分工明確,張翼和郭大亨主要負(fù)責(zé)電路板的器件的布局以及連線,而我則負(fù)責(zé)程序的編寫與調(diào)試以及課程設(shè)計(jì)報(bào)告的編寫。</p><p> 當(dāng)電路板焊接完成后,我們一起進(jìn)行硬件電路的檢測(cè)與調(diào)試。由于接線中存在虛焊和接線錯(cuò)誤之類的問題,我們組員之間一起細(xì)心排查各個(gè)環(huán)節(jié),逐一進(jìn)行調(diào)試,最后終于找出了錯(cuò)誤。共同完成硬件電路的調(diào)試。</p><p><b> 2.方案設(shè)計(jì)</b>
13、;</p><p> 根據(jù)功能要求,提出合理的設(shè)計(jì)方案,畫出方案方框圖,并對(duì)系統(tǒng)工作原理進(jìn)行闡述。</p><p> 按系統(tǒng)功能實(shí)現(xiàn)要求,決定控制系統(tǒng)采用AT89S51單片機(jī),A/D轉(zhuǎn)換采用ADC0809。系統(tǒng)除了能確保實(shí)現(xiàn)要求的功能外,還可以方便地進(jìn)行8路其他A/D轉(zhuǎn)換量的測(cè)量和遠(yuǎn)程測(cè)量結(jié)果傳送等擴(kuò)展功能。數(shù)字電壓表的系統(tǒng)設(shè)計(jì)方案如框圖1.1所示。</p><p&
14、gt; 圖1.1 數(shù)字電壓表系統(tǒng)設(shè)計(jì)方案框圖</p><p><b> 3.硬件設(shè)計(jì)</b></p><p> 硬件電路的設(shè)計(jì)主要包括單片機(jī)系統(tǒng)及顯示電路、超聲波發(fā)射電路和超聲波檢測(cè)接收電路三部分。單片機(jī)采用STC89C52或其兼容系列。采用12MHz高精度的晶振,以獲得較穩(wěn)定時(shí)鐘頻率,減小測(cè)量誤差。單片機(jī)用P1.0端口輸出超聲波換能器所需的40kHz的方波信
15、號(hào),利用外中斷0口監(jiān)測(cè)超聲波接收電路輸出的返回信號(hào)。超聲波發(fā)射電路主要有反相器74HC04和超聲波發(fā)射換能器T構(gòu)成,超聲波檢測(cè)接收電路主要是由集成電路CX20106A組成,顯示電路采用簡單實(shí)用的LED數(shù)碼管顯示。</p><p> 3.1整體設(shè)計(jì)思路框圖及原理圖</p><p> 硬件電路設(shè)計(jì)由6個(gè)部分組成; A/D轉(zhuǎn)換電路,AT89C51單片機(jī)系統(tǒng),LED顯示系統(tǒng)、時(shí)鐘電路、復(fù)位電路
16、以及測(cè)量電壓輸入電路。</p><p> A/D轉(zhuǎn)換由集成電路ADC0809完成。ADC0809具有8路模擬輸入端口,地址線(第23~25腳)可決定對(duì)哪一路模擬輸入作A/D轉(zhuǎn)換。第22腳為地址鎖存控制,當(dāng)輸入為高電平時(shí),對(duì)地址信號(hào)進(jìn)行鎖存。第6腳為測(cè)試控制,當(dāng)輸入一個(gè)2μs寬高電平脈沖時(shí),就開始A/D轉(zhuǎn)換。第7腳為A/D轉(zhuǎn)換結(jié)束標(biāo)志,當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),第7腳輸出高電平。 第9腳為A/D轉(zhuǎn)換數(shù)據(jù)輸出允許控制,當(dāng)
17、OE腳為高電平時(shí),A/D轉(zhuǎn)換數(shù)據(jù)從端口輸出。第10腳為A/D轉(zhuǎn)換的時(shí)鐘輸入端,利用單片機(jī)第30腳的6分頻晶振頻率,再通過14024二分頻得到1MHz時(shí)鐘。</p><p> 單片機(jī)的P1,P3.0~P3.3端口作為4位LED數(shù)碼管顯示控制。P3.5端口用作單路顯示/循環(huán)顯示轉(zhuǎn)換按鈕,P3.6端口用作單路顯示時(shí)選擇顯示的通道。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 單片機(jī)最小系統(tǒng)</p><p> 單片機(jī)最小系統(tǒng)由單片機(jī)STC89C52芯片,復(fù)位電路,時(shí)鐘電路等構(gòu)成。</p><p> 3.1.1.主控芯片STC89C52單片機(jī)介紹</p><p&
19、gt; STC89C52是一種低功耗、高性能、CMOS八位微處理器,片內(nèi)有4K字節(jié)的在線可重復(fù)編程、快速擦除快速寫入程序的存儲(chǔ)器,能重復(fù)寫入/擦除1000次,數(shù)據(jù)保存時(shí)間為十年。它與MCS-51系列單片機(jī)在指令系統(tǒng)和引腳上完全兼容,不僅可完全代替MCS-51系列單片機(jī),而且能使系統(tǒng)具有許多MCS-51系列產(chǎn)品沒有的功能。</p><p> STC89C52可構(gòu)成真正的單片機(jī)最小應(yīng)用系統(tǒng),縮小系統(tǒng)體積,增加系統(tǒng)
20、的可靠性,降低系統(tǒng)的成本。只要程序長度小于4K,四個(gè)I/O口全部提供給用戶。可用5V電壓編程,而且擦寫時(shí)間僅需10ms,僅為8751/87C51的擦寫時(shí)間的百分之一,與8751/87C51的12V電壓擦寫相比,不易損壞器件,沒有兩種電源的要求,改寫時(shí)不撥下芯片,適合許多嵌入式控制領(lǐng)域。工作電壓范圍寬(2.7V~6V),全靜態(tài)工作,工作頻率寬在0Hz~24 MHz,比8751/87C51等系列的6MHz~24 MHz更具有靈活性,系統(tǒng)能快
21、能慢。STC89C52芯片提供三級(jí)程序存儲(chǔ)器加密,提供了方便靈活而可靠的硬加密手段,能完全保證程序或者系統(tǒng)不被仿制。STC89C52單片機(jī)為40引腳芯片,如下圖3-1所示。</p><p> P0口:三態(tài)雙向口,通稱數(shù)據(jù)總線口,因?yàn)橹挥性摽谀苤苯佑糜趯?duì)外部存儲(chǔ)器的讀/寫操作。也用以輸出外部存儲(chǔ)器的低8位地址。由于是分時(shí)輸出,故應(yīng)在外部價(jià)鎖存器將此地址數(shù)據(jù)鎖存。地址鎖存信號(hào)用ALE。</p><
22、;p> P1口:專門供用戶使用的I/O口,是準(zhǔn)雙向口。</p><p> P2口:從系統(tǒng)擴(kuò)展時(shí)作為高8位地址線用。不擴(kuò)展外部存儲(chǔ)器時(shí),也可以作為用戶I/O口線使用,是準(zhǔn)雙向口。</p><p> P3口:雙功能口,該口的每一位均可獨(dú)立地定義為第一I/O功能或者第二I/O功能。作為第一功能使用時(shí)操作同P1口。第二功能如下表3-1所示。</p><p>
23、圖3-1 STC89C52引腳圖</p><p> 表3-1 P3口的第二功能</p><p> RST:當(dāng)晶振工作時(shí),RST引腳持續(xù)2個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位。</p><p> XTAL1:反相振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p> XTAL2:來自反相振蕩器的輸出。</p><p&
24、gt; 3.1.2. 復(fù)位電路</p><p> 單片機(jī)上電時(shí),當(dāng)振蕩器正在運(yùn)行時(shí),只要持續(xù)給出RST引腳兩個(gè)機(jī)器周期的高電平,便可完成系統(tǒng)復(fù)位。外部復(fù)位電路是為提供兩個(gè)機(jī)器周期以上的高電平而設(shè)計(jì)的。系統(tǒng)采用上電自動(dòng)復(fù)位,上電瞬間電容器上的電壓不能突變,RST上的電壓是Vcc上的電壓與電容器上的電壓之差,因而RST上的電壓與Vcc上的電壓相同。隨著充電的進(jìn)行,電容器上的電壓不斷上升,RST上的電壓就隨著下降,
25、RST腳上只要保持10ms以上高電平,系統(tǒng)就會(huì)有效復(fù)位。</p><p> 復(fù)位電路的實(shí)現(xiàn)可以有很多種方法,但是從功能上一般分為兩種:一種是電源復(fù)位,即外部的復(fù)位電路在系統(tǒng)通上電源之后直接使單片機(jī)工作,單片機(jī)的起停通過電源控制;另一種方法是在復(fù)位電路中設(shè)計(jì)按鍵開關(guān),通過按鍵開關(guān)觸發(fā)復(fù)位電平,控制單片機(jī)的復(fù)位。本設(shè)計(jì)使用了第一種方法,其電路圖如圖3-2所示。</p><p> 圖3-2
26、STC89C52單片機(jī)最小系統(tǒng)</p><p> 3.1.3. 時(shí)鐘電路</p><p> STC89C52單片機(jī)有一個(gè)用于構(gòu)成內(nèi)部振蕩器的反相放大器,XTAL1和XTAL2分別是放大器的輸入、輸出端,外接石英晶體或陶瓷振蕩器以及補(bǔ)償電容C2、C3構(gòu)成并聯(lián)諧振電路。當(dāng)外接石英晶體時(shí),電容C2、C3選30pF±10pF;當(dāng)外接陶瓷振蕩器時(shí),電容C2、C3選40pF±1
27、0pF。STC89C52系統(tǒng)中晶振頻率一般在1.2~12MHz選擇。外接電容C2、C3的大小會(huì)影響振蕩器頻率的高低、振蕩頻率的穩(wěn)定度、起振時(shí)間及溫度穩(wěn)定性。在設(shè)計(jì)電路板時(shí),晶振和電容應(yīng)靠近單片機(jī),以便減少寄生電容,保證振蕩器穩(wěn)定可靠工作。</p><p> 3.2數(shù)碼管顯示電路</p><p> 3.2.1.四位一體共陽數(shù)碼管</p><p> 數(shù)碼管按段數(shù)分
28、為七段數(shù)碼管和八段數(shù)碼管,八段比七段多一個(gè)發(fā)光二極管單元(小數(shù)點(diǎn));按能顯示多少個(gè)“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)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。數(shù)碼管邏輯功能圖如下圖3-4所示:</p><p> 圖3-4 數(shù)碼管邏輯功能圖</p><p> 3.2.2. 74LS244鎖存器</p><p> 總線驅(qū)動(dòng)器74LS244和74LS245經(jīng)常用作三態(tài)數(shù)據(jù)緩沖器,74
30、LS244為單向三態(tài)數(shù)據(jù)緩沖器,而74LS245為雙向三態(tài)數(shù)據(jù)緩沖器。單向的內(nèi)部有8個(gè)三態(tài)驅(qū)動(dòng)器,分成兩組,分別由控制端1G和2G控制; 雙向的有16個(gè)三態(tài)驅(qū)動(dòng)器,每個(gè)方向8個(gè)。在控制端G有效時(shí)(G為低電平),由DIR端控制驅(qū)動(dòng)方向:DIR為“1”時(shí)方向從左到右(輸出允許),DIR為“0”時(shí)方向從右到左(輸入允許)。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)于沒有這個(gè)芯片</
32、p><p> 74LS245是8路3態(tài) 雙向緩沖驅(qū)動(dòng),也叫做總線驅(qū)動(dòng)門電路或線驅(qū)動(dòng)。主要使用在數(shù)據(jù)的雙向緩沖,原來常見于51的數(shù)據(jù)接口電路,比如,早期電路中,擴(kuò)展了很多的8255/8155/8251/8253/573等芯片的時(shí)候,擔(dān)心8031的數(shù)據(jù)驅(qū)動(dòng)能力不足,就使用一片245作為數(shù)據(jù)緩沖電路,增強(qiáng)驅(qū)動(dòng)能力;也常見與ISA卡的接口電路.</p><p> 3.2.3.整體顯示電路</
33、p><p> 由于單片機(jī)的并行口不能直接驅(qū)動(dòng)LED顯示器,所以,在一般情況下,必須采用專用的驅(qū)動(dòng)電路芯片,使之產(chǎn)生足夠大的電流,顯示器才能正常工作[7]。如果驅(qū)動(dòng)電路能力差,即負(fù)載能力不夠時(shí),顯示器亮度就低,而且驅(qū)動(dòng)電路長期在超負(fù)荷下運(yùn)行容易損壞,因此,LED顯示器的驅(qū)動(dòng)電路設(shè)計(jì)是一個(gè)非常重要的問題。</p><p> 為了簡化數(shù)字式直流電壓表的電路設(shè)計(jì),在LED驅(qū)動(dòng)電路的設(shè)計(jì)上,以利用單
34、片機(jī)P1口經(jīng)過鎖存器LS244限流電阻連接到數(shù)碼管的段選,如下圖所</p><p> 3.3.模數(shù)轉(zhuǎn)換模塊</p><p> ADC0809是帶有8位A/D轉(zhuǎn)換器、8路多路開關(guān)以及微處理機(jī)兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉(zhuǎn)換器,可以和單片機(jī)直接接口。 (1)ADC0809的內(nèi)部邏輯結(jié)構(gòu) </p><p> 由下圖可知,ADC0809由一個(gè)8
35、路模擬開關(guān)、一個(gè)地址鎖存與譯碼器、一個(gè)A/D轉(zhuǎn)換器和一個(gè)三態(tài)輸出鎖存器組成。多路開關(guān)可選通8個(gè)模擬通道,允許8路模擬量分時(shí)輸入,共用A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。三態(tài)輸出鎖器用于鎖存A/D轉(zhuǎn)換完的數(shù)字量,當(dāng)OE端為高電平時(shí),才可以從三態(tài)輸出鎖存器取走轉(zhuǎn)換完的數(shù)據(jù)。</p><p> (2).ADC0809引腳結(jié)構(gòu) </p><p> ADC0809各腳功能如下:D7-D0:8位數(shù)字量輸出引腳
36、。IN0-IN7:8位模擬量輸入引腳。VCC:+5V工作電壓。GND:地。REF(+):參考電壓正端。REF(-):參考電壓負(fù)端。START:A/D轉(zhuǎn)換啟動(dòng)信號(hào)輸入端。ALE:地址鎖存允許信號(hào)輸入端。(以上兩種信號(hào)用于啟動(dòng)A/D轉(zhuǎn)換).EOC:轉(zhuǎn)換結(jié)束信號(hào)輸出引腳,開始轉(zhuǎn)換時(shí)為低電平,當(dāng)轉(zhuǎn)換結(jié)束時(shí)為高電平。OE:輸出允許控制端,用以打開三態(tài)數(shù)據(jù)輸出鎖存器。CLK:時(shí)鐘信號(hào)輸入端(一般為500KHz)。A、B、C:
37、地址輸入線。</p><p> ADC0809對(duì)輸入模擬量要求:信號(hào)單極性,電壓范圍是0-5V,若信號(hào)太小,必須進(jìn)行放大;輸入的模擬量在轉(zhuǎn)換過程中應(yīng)該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。 </p><p> 地址輸入和控制線:4條 </p><p> ALE為地址鎖存允許輸入線,高電平有效。當(dāng)ALE線為高電平時(shí),地址鎖存與譯碼器將A,
38、B,C三條地址線的地址信號(hào)進(jìn)行鎖存,經(jīng)譯碼后被選中的通道的模擬量進(jìn)入轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。A,B和C為地址輸入線,用于選通IN0-IN7上的一路模擬量輸入。通道選擇表如下表所示。</p><p> 數(shù)字量輸出及控制線:11條 </p><p> ST為轉(zhuǎn)換啟動(dòng)信號(hào)。當(dāng)ST上跳沿時(shí),所有內(nèi)部寄存器清零;下跳沿時(shí),開始進(jìn)行A/D轉(zhuǎn)換;在轉(zhuǎn)換期間,ST應(yīng)保持低電平。EOC為轉(zhuǎn)換結(jié)束信號(hào)。當(dāng)EOC為
39、高電平時(shí),表明轉(zhuǎn)換結(jié)束;否則,表明正在進(jìn)行A/D轉(zhuǎn)換。OE為輸出允許信號(hào),用于控制三條輸出鎖存器向單片機(jī)輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù);OE=0,輸出數(shù)據(jù)線呈高阻狀態(tài)。D7-D0為數(shù)字量輸出線。 </p><p> CLK為時(shí)鐘輸入信號(hào)線。因ADC0809的內(nèi)部沒有時(shí)鐘電路,所需時(shí)鐘信號(hào)必須由外界提供,通常使用頻率為500KHZ, </p><p> VREF(+),
40、VREF(-)為參考電壓輸入。 </p><p> 2. ADC0809應(yīng)用說明 </p><p> ?。?). ADC0809內(nèi)部帶有輸出鎖存器,可以與AT89S51單片機(jī)直接相連。 </p><p> ?。?). 初始化時(shí),使ST和OE信號(hào)全為低電平。 </p><p> ?。?). 送要轉(zhuǎn)換的哪一通道的地址到A,B,C端口上。 <
41、;/p><p> ?。?). 在ST端給出一個(gè)至少有100ns寬的正脈沖信號(hào)。 </p><p> ?。?). 是否轉(zhuǎn)換完畢,我們根據(jù)EOC信號(hào)來判斷。 </p><p> ?。?). 當(dāng)EOC變?yōu)楦唠娖綍r(shí),這時(shí)給OE為高電平,轉(zhuǎn)換的數(shù)據(jù)就輸出給單片機(jī)了。 </p><p><b> 4.軟件設(shè)計(jì)</b></p>
42、;<p> 整個(gè)系統(tǒng)的程序包括初始化程序、主程序、顯示子程序、A/D轉(zhuǎn)換測(cè)量子程序,下面就各個(gè)分塊的程序進(jìn)行分析:</p><p><b> 4.1.初始化程序</b></p><p> 系統(tǒng)上電時(shí),初始化程序主要用來執(zhí)行對(duì)單片機(jī)各個(gè)端口的初始化,包括P0-P3口,另外初始化的另一個(gè)作用是對(duì)定時(shí)器的初始化,確定其工作方式。</p>&
43、lt;p><b> 4.2. 主程序</b></p><p> 在剛上電時(shí),系統(tǒng)默認(rèn)為循環(huán)顯示8個(gè)通道的電壓值狀態(tài)。當(dāng)進(jìn)行一次測(cè)量后,將顯示每一通道的A/D轉(zhuǎn)換值,每個(gè)通道的數(shù)據(jù)顯示時(shí)間在1s左后。主程序在調(diào)用顯示子程序與測(cè)量程序之間循環(huán)。</p><p> 主程序流程圖如圖4-1所示。</p><p> 圖4-1 主程序流程圖&
44、lt;/p><p> 4.3. 顯示子程序</p><p> 顯示子程序采用動(dòng)態(tài)掃描法實(shí)現(xiàn)4位數(shù)碼管的數(shù)值顯示。測(cè)量所得的A/D轉(zhuǎn)換數(shù)據(jù)放在70H-77H內(nèi)存單元中,測(cè)量數(shù)據(jù)在顯示時(shí)須經(jīng)過轉(zhuǎn)換成十進(jìn)制BCD碼放在78H-7BH單元中,其中7BH存放通道標(biāo)志數(shù)。寄存器R3用作8路循環(huán)控制,R0用作顯示數(shù)據(jù)地址指針。</p><p> 4.4. A/D轉(zhuǎn)換測(cè)量子程序
45、</p><p> A/D轉(zhuǎn)換測(cè)量子程序用來對(duì)ADC0809的8路模擬輸入電壓的A/D轉(zhuǎn)換,并將對(duì)應(yīng)數(shù)值移入70H-77H單元中。</p><p> A/D轉(zhuǎn)換測(cè)量子程序流程圖如圖4-2所示。</p><p> 圖4-2 A/D轉(zhuǎn)換測(cè)量子程序流程圖</p><p><b> 5.系統(tǒng)調(diào)試</b></p>
46、;<p><b> 5.1.調(diào)試過程</b></p><p> 這次的單片機(jī)課程設(shè)計(jì)雖然簡單,但調(diào)試時(shí)還是很麻煩。首先,我們要清楚地了解整個(gè)簡易電壓表各個(gè)部分的工作原理以及各個(gè)部分的作用,只有這樣才能在調(diào)試當(dāng)中對(duì)出現(xiàn)問題進(jìn)行合理的分析與排查。</p><p> 我們這次系統(tǒng)的調(diào)試,剛焊接完成,我們將初步寫好的測(cè)試程序燒進(jìn)單片機(jī),進(jìn)行硬件電路的調(diào)試,
47、初步檢測(cè)完畢上電時(shí)數(shù)碼管并沒有亮,整個(gè)系統(tǒng)沒什么反應(yīng),于是我們對(duì)每個(gè)芯片進(jìn)行測(cè)試,看是否為其提供了工作電壓,結(jié)果發(fā)現(xiàn)用于分頻的CD4024沒有工作,電源的正極沒有加上去。排查這個(gè)錯(cuò)誤后,我們?cè)俅紊想?,這次數(shù)碼管上的碼顯示得不對(duì),出現(xiàn)了亂碼的現(xiàn)象。進(jìn)過分析,只有兩種可能,一是數(shù)碼管的段選和位選接錯(cuò)了,二是鎖存器接得有問題,后經(jīng)過組員們的檢查,發(fā)現(xiàn)是鎖存器接得有問題,于是我們又將鎖存器重新接了下。最終,進(jìn)過我們的共同努力,我們的電路板在硬件
48、上沒有了問題。</p><p> 在保證硬件沒問題的前提下,我們對(duì)軟件進(jìn)行進(jìn)一步完善,使硬件能很好地與軟件融合,讓整個(gè)系統(tǒng)能按預(yù)期的目標(biāo)工作。在調(diào)試軟件時(shí),一上電時(shí),數(shù)碼管就有顯示,我檢測(cè)了程序的初始化部分,自己把P1口的初始化加了進(jìn)去,使在沒有輸入電壓時(shí),數(shù)碼管顯示為零。但再一次上電測(cè)試時(shí),數(shù)碼管還是有顯示,上網(wǎng)查閱了相關(guān)資料,有可能是懸空電壓所致,所以雖沒接輸入電壓,但還是有個(gè)電壓值。</p>
49、<p><b> 5.2.性能分析</b></p><p> (1)由于單片機(jī)為8位處理器,當(dāng)輸入電壓為5.00V時(shí),ADC0809輸出數(shù)據(jù)值為255(FFH),因此單片機(jī)最高的數(shù)值分辨率為0.0196V(5/255)。這就決定了該電壓表最高分辨率(精度)只能達(dá)到0.0196V,測(cè)量時(shí)電壓一般以0.02V的幅度變化。如果要獲得更高的精度要求,則應(yīng)采用12位、13位的A/D轉(zhuǎn)換
50、器。</p><p> ?。?)關(guān)于實(shí)際測(cè)量結(jié)果(見附錄C),從圖中可以看出自己所做的電壓表與實(shí)際的數(shù)字電壓表的數(shù)值上有些誤差,但誤差值都在0.1V以內(nèi),對(duì)要求不太高的場(chǎng)合沒有多大影響。</p><p> (3)關(guān)于懸空電壓的問題,就是在AD模塊沒有接輸入時(shí),數(shù)碼管上有顯示,經(jīng)查閱資料可知可通過接大電阻接地來消除。</p><p><b> 6.設(shè)計(jì)總
51、結(jié)</b></p><p> 經(jīng)過近二周的單片機(jī)課程設(shè)計(jì),終于完成了我的數(shù)字電壓表的設(shè)計(jì),基本達(dá)到設(shè)計(jì)要求。 </p><p> 對(duì)于此次課程設(shè)計(jì),有許多的感觸與體會(huì),遇到的難題多,學(xué)習(xí)到的知識(shí)也就更多。 </p><p> 第一,硬件電路遇到了ADC0809 無內(nèi)部時(shí)鐘,需外接外部時(shí)鐘,如何解決這個(gè)問題,我 們小組進(jìn)行了多次討論,最終確定了在程序
52、中提供時(shí)鐘信號(hào),大大降低了硬件電路的復(fù)雜度。 </p><p> 第二,則是解決程序設(shè)計(jì)的問題,而程序設(shè)計(jì)是一個(gè)很靈活的東西,它反映了你解決問 題的邏輯思維和創(chuàng)新能力,它才是一個(gè)設(shè)計(jì)的靈魂所在。因此在整個(gè)設(shè)計(jì)過程中大部分時(shí)間 是用在程序上面的。其中,我遇到了很多的問題,雖然以前還做過這樣的設(shè)計(jì),但是以前的 都是用C 語言進(jìn)行編程。而此次運(yùn)用匯編語言編程,著實(shí)讓我當(dāng)頭一棒,因?yàn)槌宋C(jī)原理 實(shí)驗(yàn)進(jìn)行過相關(guān)編程,匯
53、編語言的編程能力還停留在理論階段。在此次編程中,首先,我是 先用C 語言編程,進(jìn)行調(diào)試后,成功的達(dá)到了課程設(shè)計(jì)的要求。其次,查找匯編語言的相關(guān) 資料,經(jīng)過不懈的努力與調(diào)試,終于將匯編語言版的成功編程出來。 </p><p> 第三,在一個(gè)課題中,要設(shè)計(jì)一個(gè)成功的電路,必須要有耐心,要有堅(jiān)持的毅力。在整個(gè)電路的設(shè)計(jì)過程中,重要的是各個(gè)單元電路的連接及電路的細(xì)節(jié)設(shè)計(jì)上,如在多種方案的 選擇中,我們仔細(xì)比較分析其原理
54、以及可行的原因。這就要求我們對(duì)硬件系統(tǒng)中各組件部分 有充分透徹的理解和研究,并能對(duì)之靈活應(yīng)用。完成這次設(shè)計(jì)后,我在書本理論知識(shí)的基礎(chǔ) 上又有了更深層次的理解。 第四,在本次設(shè)計(jì)的過程中,我還學(xué)會(huì)了高效率的查閱資料、運(yùn)用工具書、利用網(wǎng)絡(luò)查 找資料。我發(fā)現(xiàn),在我們所使用的書籍上有一些知識(shí)在實(shí)際應(yīng)用中其實(shí)并不是十分理想,各 種參數(shù)都需要自己去調(diào)整,這就要求我們應(yīng)更加注重實(shí)踐環(huán)節(jié)。 </p><p> 最后,還要在此感
55、謝課程設(shè)計(jì)的指導(dǎo)老師和我的組員們,他們?cè)谡麄€(gè)過程中都給予了我充分的幫助與支持。這次單片機(jī)課程設(shè)計(jì),雖然做的是簡單的數(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ā)信號(hào)的端
58、口,單片機(jī)正常工作時(shí),此頻率為時(shí)鐘震蕩頻率的1/6</p><p> sbit oe=P2^5; //定義ADC0809輸出允許控制端</p><p> sbit start=P2^4; //定義A/D轉(zhuǎn)換啟動(dòng)信號(hào)輸入端</p><p> sbit ale=P2^3; //定義ADC0809地址鎖存信號(hào)輸入端</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; //定義無符號(hào)變臉</p><p> uchar tem
60、p; //定義無符號(hào)字符變量 </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í)函數(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; //確定定時(shí)器T0工作方式為方式1,即16位計(jì)數(shù)器</p><p> TH0=0x4c; //裝計(jì)數(shù)初值</p><p> TL0=0x00; </p><p
66、> EA=1; //開總中斷</p><p> ET0=1; //開定時(shí)器T0允許位</p><p> TR0=1; //啟動(dòng)定時(shí)器T0</p><p> P3=0xff; //P3口置高電平</p><p> P0=0xff;
67、 //P0口置高電平,沒有數(shù)據(jù)寫入</p><p> P2=0x00; //P2口置低電平,此時(shí)ADC0809不能工作</p><p> P1=0xff; //P1口置高電平,數(shù)碼管全滅</p><p><b> }</b></p><p> /*定時(shí)器中斷服務(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) //判斷是否計(jì)數(shù)到40次</p><p><b> {</b></p><p> count=0; //如果計(jì)數(shù)滿40次,則計(jì)數(shù)標(biāo)記位清零</p><p> ch++; //通道計(jì)數(shù)標(biāo)志位加1 </p>
70、;<p> if(ch==8) //判斷8通道是否循環(huán)了一次</p><p> ch=0; //若8個(gè)通道循環(huán)顯示了一遍,則通道計(jì)數(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ù),待數(shù)據(jù)穩(wěn)定</p><p> ale=0;
72、 //地址鎖存允許位置0</p><p> start=1; //啟動(dòng)ADC0809</p><p> _nop_();_nop_(); //調(diào)用延時(shí)函數(shù),待數(shù)據(jù)穩(wěn)定</p><p> start=0; //關(guān)閉ADC0809</p><p> _nop_();_nop_();_no
73、p_();_nop_(); //調(diào)用延時(shí)函數(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; //個(gè)位轉(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)) //判斷是哪個(gè)鍵被按下</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í),通道數(shù)自加1</p><p> if(ch==8)
86、 //判斷8個(gè)通道是否都掃描了一次</p><p> ch=0; //8通道掃描完后,進(jìn)行下一次掃描</p><p> while(!s2) //單通道時(shí),選擇通道后,指定通道顯示測(cè)量值</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; //計(jì)數(shù)值清零</p><p> TR0=1; //啟動(dòng)定時(shí)器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)閉定時(shí)器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 作品實(shí)物圖片</p><p><b> 正面實(shí)物圖:</b></p><p><b> 反面焊接圖:</b></p><p> 附 錄D 測(cè)試圖片</p><p> 通
97、道0電壓測(cè)量值測(cè)試</p><p> 其他通道測(cè)試圖(以通道4為例)</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 張毅剛.單片機(jī)原理及應(yīng)用(第二版)[M].北京:高等教育出版社,2010.</p><p> [2] 樓然苗,李光飛.單片機(jī)課程設(shè)計(jì)指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,
98、2007.</p><p> [3] 譚浩強(qiáng).C程序設(shè)計(jì)(第四版)[M].北京:清華大學(xué)出版社,2010. </p><p> [4] 周荷琴,吳秀清.微型計(jì)算機(jī)原理與接口技術(shù)(第四版)[M].合肥:中國科學(xué)技術(shù)大學(xué)出版社,2008. </p><p> [5] 李忠明.微機(jī)原理與接口技術(shù)[M].武漢:華中科技大學(xué)出版社,2011. </p>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)----單片機(jī)簡易數(shù)字電壓表
- 單片機(jī)課程設(shè)計(jì)--簡易數(shù)字電壓表的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--簡易數(shù)字電壓表的設(shè)計(jì)
- 數(shù)字電壓表課程設(shè)計(jì)--基于單片機(jī)的簡易數(shù)字電壓表的設(shè)計(jì)
- 數(shù)字電壓表課程設(shè)計(jì)--基于單片機(jī)的簡易數(shù)字電壓表的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的簡易數(shù)字電壓表設(shè)計(jì)
- 簡易數(shù)字電壓表單片機(jī)課程設(shè)計(jì)
- 簡易數(shù)字電壓表單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-多通路簡易數(shù)字電壓表
- 單片機(jī)課程設(shè)計(jì)-數(shù)字電壓表
- 單片機(jī)課程設(shè)計(jì)---數(shù)字電壓表
- 單片機(jī)課程設(shè)計(jì)-數(shù)字電壓表
- 單片機(jī)(數(shù)字電壓表)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)----數(shù)字電壓表
- 單片機(jī)課程設(shè)計(jì)-數(shù)字電壓表
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電壓表
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電壓表
- 單片機(jī)課程設(shè)計(jì)---數(shù)字電壓表設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---數(shù)字電壓表設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---數(shù)字電壓表設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論