欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3241|回復: 0
收起左側

基于單片機的數控直流穩壓電源資料下載

[復制鏈接]
ID:361750 發表于 2018-7-4 22:14 | 顯示全部樓層 |閱讀模式
數控直流穩壓電源就是能用數字來控制電源輸出電壓的大小,而且能使輸出的直流電壓能保持穩定、精確的直流電壓源。本文介紹了利用D/A轉換電路、輔助電源電路、去抖電路等組成的數控穩壓電源電路,詳述了電源的基本電路結構和控制策略。它與傳統的穩壓電源相比,具有操作方便,電壓穩定度高的特點,其結構簡單、制作方便、成本低,輸出電壓在1-10V之間連續可調,其輸出電壓大小以0.5V步進,輸出電壓的大小調節是通過“”、“-”兩個鍵操作的,而且可以根據實際要求組成具有不同的輸出電壓值的穩壓源電路。該電源控制電路選用89C51單片機控制主電路采用串聯調整穩壓技術具有線路簡單、響應迅速、穩定性好、效率高等特點。

第一章 緒論
引言
數控直流穩壓電源是一種常見的電子儀器,廣泛地應用于電子電路、教學實驗和科學研究等領域。但是,目前使用的直流穩壓電源大部分是線性電源,利用分立器件組成,其體積大、效率低,可靠性差,操作使用不方便,自我保護功能不夠,因而故障率高,隨著電子技術的飛速發展,各種電子、電器設備對穩壓電源的性能要求日益提高、穩壓電源不斷朝著小型化,高效率,低成本,高可靠性,低電磁干擾,模塊化智能化方向發展,以單片機系統為核心而設計制造出來的新一代穩壓電源不但電路簡單,結構緊湊,價格低廉,性能卓越,而且由于單片機具有計算和控制能力,利用它對采樣數據進行各種計算,從而可排除和減少由于騷擾信號和模擬電路引起的誤差,大大提高穩壓電源輸出電壓和控制電流精度,降低了對模擬電路的要求。智能穩壓電源可利用單片機設置周密的保護監測系統,確保電源運行可靠。輸出電壓和限定電流采用數字顯示,輸入采用鍵盤方式,電源的外表美觀,操作使用方便,具有較高的使用價值。
采用單片機的數字可調穩壓電源價格低廉采用普遍使用的元件就能實現其功能,顯示清晰直觀,傳統的模擬可調穩壓電源沒有讀數,在讀數過程中很不方便,并且長時間使用會造成輸出電壓不穩。數字可調穩壓電源克服了這個缺陷,它采用先進的數顯技術,使測量結果一目了然,只要儀表不發生跳數現象,測量結果就是唯一的,不僅保證讀數的客觀性與準確性,還符合人們的讀數習慣,能縮短讀數和記錄的時間。另外,模擬可調穩壓電源大多是通過調節電位器的阻值改變輸出直流電壓,電位器特別容易磨損,使用一段時間后就會出現接觸不良,引起輸出電壓不穩定。數字可調穩壓電源是通過接觸按鈕以步進方式選取不同的輸出電壓,再有數碼管顯示輸出電壓機器工作狀態,工作穩定可靠。采用單片機的數字可調穩壓電源,它具有輸出電壓容易改變、價格低廉、顯示清晰直觀、準確度高、擴展能力強等特點。
本文通過對一個基于51單片機的能實現數字可調的電壓源,詳細介紹了單片機應用中的數據處理,液晶顯示原理。從而達到學習、了解單片機相關指令在各方面的應用。系統由AT89C51單片機、DA轉換、數碼管等組成,能進行1-10V的電壓大小調節。

1.1 課題研究的背景
電源技術尤其是數控電源技術是一門實踐性很強的工程技術,服務于各行各業。當今電源技術融合了電氣、電子、系統集成、控制理論、材料等諸多學科領域。直流穩壓電源是電子技術常用的儀表設備之一,廣泛的應用于教學、科研等領域,是電子實驗員、電子設計人員及電路開發部門進行試驗操作和科學研究不可缺少的電子儀器。在電子電路中,通常都需要電壓穩定的直流電源來供電。而整個穩壓過程是由電源變壓器、整流、濾波、穩壓等四部分組成。然而這種傳統的直流穩壓電源功能簡單、不好控制、可靠性低、干擾大、精度低、復雜度高。普通的直流穩壓電源品種有很多,但均存在一下二個問題:輸出電壓是通過粗調(波段開關)及細調(電位器)來調節。這樣,當輸出電壓需要精確輸出,或需要在一個小范圍內改變時,困難就較大。另外,隨著使用時間的增加,波段開關及電位器難免接觸不良,對輸出會有影響。穩壓方式均是采用串聯型穩壓電路,對過載進行限流和截流保護,電路構成復雜,穩壓精度也不高。
在家用電器和其他各類電子設備中,通常都需要電壓穩定的直流電源供電。但在實際生活中,都是由220V的交流電網供電。這就需要通過變壓、整流、濾波、穩壓電路將交流電轉換成穩定的直流電。濾波器用于濾去整流輸出電壓中的紋波,一般傳統電路由濾波扼流圈和電容器組成,若由晶體管濾波器來代替,則可縮小直流電源的體積減輕其重量,且晶體管濾波直流電源代才真正的發展起來的,在以后的一段時間里,數控電源技術有了不需要直流穩壓器就能用作家用電器的電源,就既降低了家用電器的成本,由縮小了其體積,使家用電器小型化。傳統的直流穩壓電源通常采用電位器和波段開關來實現電壓的調節,并由電壓表指示電壓值的大小。因此,電壓的調節精度不高,讀數欠直觀,電位器也易磨損。而基于單片機控制的直流穩壓電源就較好地解決以上傳統穩壓電源的不足。
數控穩壓電源是電子行業發展的必然產物。近年來,隨著電子技術的發展可調穩壓電源應用的越來越廣泛。目前,由各種單片機構成的數字穩壓電源產品越來越多,已被廣泛用于家庭電器、工業電器、軍事電器等領域,顯示出強大的生命力。與此同時,由于它擴展能力很強,功能日趨完善而擴展到人們生活的各個方面。
電源技術尤其是數控電源技術是一門實踐性很強的工程技術,服務于各行各業,電力電子技術是電能的最佳應用技術之一。當今電源技術融合了電氣、電子、系統集成、控制理論和材料等諸多學科領域。隨著計算機和通訊技術發展而來的現代信息技術革命,給電力電子技術提供了廣闊的發展前景,同時也給電源提出了更高的要求。數控電源是從80年長期的發展。但其產品存在數控程度達不到要求、分辨率不高、功率密度比較低、可靠性較差的缺點。因此數控電源主要的發展方向,是針對上述缺點不斷加以改善。單片機技術及電壓轉換模塊的出現為精確數控電源的發展提供了有利的條件。

1.2 課題研究的意義
隨著時代的發展,數字電子技術已經普及到我們生活、工作和科研等各個領域。本文將介紹一種數控直流穩壓電源,本電源由直流電源、控制電路、顯示電路、數模轉換電路、電壓放大和射極輸出等部分組成。具體說采用51系列單片機作為整機的控制單元,通過改變輸入數字量來改變輸出電壓值,經集成運放放大和射極輸出器輸出,間接地改變輸出電壓的大小。與傳統的穩壓電源相比具有操作方便,電源穩定性高以及其輸出電壓大小采用數碼顯示等的特點。

1.3 課題設計目標
本課題以AT89C51單片機作為系統的核心,由D/A數字模擬轉換模塊、按鍵、LED串口顯示模塊等模塊組成一個數控電源。該系統實現了 輸出電壓:范圍 1.2V ~+10 V,步進0.5V(符合要求),紋波不大于30mV;輸出電流:500mA;輸出電壓值由數碼管顯示;由“+”、“-”兩鍵控制輸出電壓步進增減 。輸入模塊的按鍵按下之后,對單片機就有了一個輸入,單片機將輸入的數字一方面給顯示模塊,讓它們在數碼管中顯示出來;另一部分輸給DAC0808,讓它轉化為模擬量電流輸出,通過運算放大器將這模擬量轉化為相應的電壓,這電壓經過放大后控制LM317T的控制端,從而實現輸出電壓的控制
第二章 概述
2.1系統概述:
數控穩壓電源是電子設備的重要部分,其質量好壞直接影響著電子設備的可靠性,而且電子設備的故障60%來自電源。因此電源越來越受到人們的重視。電子電路及電子設備對電源最基本的要求就是電源的輸出電壓或輸出電流要穩定。通過查閱大量資料,顯示電路和控制電路是本電路的核心部分,對它的選擇有以下三種方案:
方案一:采用模擬電路
采用模擬電路的可調穩壓電路就是用一個多檔開關來控制輸出電壓,而所謂的顯示系統只是在多檔開關的每個檔的旁邊注明電壓值。隨著電子行業的發展,它不耐用的弊端已經使它逐漸離開歷史的舞臺。
方案二:采用純數字電路
純數字電路的穩壓電源避免了硬件之間的磨損,使得使用壽命大大提高,而且其輸出電壓也不會隨時間產生誤差。但是它的電路較為復雜,制作時很困難,由于電路的復雜產生的問題也會很多。
方案三:采用單片機的方法
采用單片機的數字穩壓電源是將數字電路和單片機很好地結合在一起,不但能夠達到數字電路的效果,而且能夠大大地簡化復雜的純數字電路。采用單片機后,還可以用軟件實現保護功能,要擴展其他的功能也非常容易。
通過多方面考慮和實用性,精確度,單片機進行處理,具有低功耗、高性能、抗干擾能力強等優點,故我們選擇方案三。
系統整體框圖
圖1 系統整體框圖

2.2系統整體概述
   本文設計整體框圖如圖1所示,主要分為單片機控制,顯示電路,按鍵,D/A轉換,變壓器,穩壓電路等模塊。這幾個模塊通過單片機的控制來協調工作。

2.2.1控制部分
本文采用AT89C51單片機來實現對整個系統的控制,與協調工作。如圖2 為單片機的原理圖:
  
圖2 單片機原理圖

2.2.2顯示部分
本文選用共陽極數碼管來作為顯示部分,因為所要顯示的數字較少,因而數碼管顯示能夠滿足要求。如圖3所示為數碼管的原理圖: 
圖3 數碼管原理圖

2.2.3鍵盤接口部分
    鍵盤是單片機應用系統中使用最廣泛的一種數據輸入設備。鍵盤分為獨立式鍵盤和矩陣鍵盤。
方案一,采用獨立式鍵盤
獨立式鍵盤,每個鍵占用一條I/O線,當按鍵數量較多時,I/O口,利用率不高,但是程序編制簡單,適用于所需按鍵較少的場合。
方案二,采用行列式矩陣鍵盤
電路連接復雜,但是提高了I/O口的利用率,軟件編程較復雜,適用于需要大量按鍵的場合。
因為本設計所需要的按鍵簡單,故選者方案一。

2.2.4 穩壓電源部分
本文選用三端穩壓電源,輸出15V,電流為1A。如圖4所示為其引腳圖:
圖4 LM7915外形引腳圖

2.2.5 D/A轉換器
本文數模轉換器選用DAC0808型號,它是一個8位的DAC轉換器,DAC0808是具有16個引腳的雙列直插式8位D/A轉換器件。其引腳功能分別為:1腳為空,2腳為GND,3腳為VEE,4腳為DAC輸出引腳,5-12腳為數據輸入引腳,13腳為VCC,14腳為基準電壓(VREF+),15腳為基準電壓(VREF-),16腳為COMPENSATION。當數據輸入量全為0時,其4腳輸出電壓最低,接近零;當數據輸入量全為1時,其4腳輸出電壓最高,電壓值由基準電壓VREF決定。因此,基準電壓的精度決定了D/A轉換的精度。

2.2.6 運放NE5532
NE5532是一種雙運放高性能低噪聲運算放大器。 相比較大多數標準運算放大器,如1458,它顯示出更好的噪聲性能,提高輸出驅動能力和相當高的小信號和電源帶寬。這使該器件特別適合應用在高品質和專業音響設備,儀器和控制電路和電話通道放大器。
引腳圖如圖5所示:
      
圖5 NE5532引腳圖      

第三章 系統硬件電路設計
3.1 系統硬件電路綜述
系統的采用了AT89C51,配合D/A轉換器件DAC0808和三端穩壓塊實現電壓連續可調(精度為:0.1V)。同時能通過LED數碼管顯示相應的電壓值,直觀、可靠、實用,電路結構簡單。
數字控制部分用+、-按鍵控制一可逆二進制計數器,二進制計數器的輸入輸出到D/A轉換器,經D/A轉換器轉換成相應的電壓,此電壓經過放大到適合的電壓值后,去控制穩壓電源的輸出,是穩壓電源的輸出電壓以0.1V的步進值增或減。
系統總設計部分為圖6:
圖6 系統硬件總設計
下面主要介紹下主要硬件模塊。

3.1單片機主控電路設計
本文采用AT89C51單片機來實現對整個系統的控制,與協調工作;單片計算機即單片微型計算機是集CPU ,RAM ,ROM ,定時,計數和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應用于智能產業和工業自動化上。而51系列單片機是各單片機中最為典型和最有代表性的一種。
3.2 穩壓電源部分
    如圖7所示,該部分主要是由三端穩壓器LM7815、LM7915、LM7805和若干個電容、二極管元器件組成,220V市電經220V/36V變壓器降壓后得到的雙15V交流電壓,經三端穩壓器LM7815和LM7915得到的+15V,再經過LM7805得到的+5V的電壓。
圖 7 穩壓電源圖
3.3顯示部分
在圖8中,顯示部分比較簡單,主要是由兩個數碼管和若干電阻組成,兩個數碼管分別顯示電壓的個位和十分位,該部分是由單片機完成的,數碼管的各個端口以依次連到AT89C51單片機的P01、P02、P03、P04口,完成電壓顯示部分。

圖8 顯示部分

3.4模數轉換部分
本系統中的數模轉換電路如圖9所示。它由DAC0808、兩級低漂移的運放電路組成。DAC0808和運放將CPU發出的8位二進制數據轉換成0~-5 V的電壓,然后經運放U8反向放大2倍,以得到0~10 V電壓。因此,該DAC的轉換分辨率為10/(28-1)=0.04 V,即CPU輸出給DAC的數據變化為1 Bit,DAC輸出電壓的變化為0.1 V。VREF電路為DAC提供基準電壓,調節R5A,可使基準電壓保持為5 V。
圖9
第四章   系統軟件設計

主程序流程如圖10所示
0.png
圖10

本電路采用51系列單片機作為整機的控制單元,通過改變輸入數字量來改變輸出電壓值,從而使輸出功率管的基極電壓發生變化,間接地改變輸出電壓的大小。為了能夠使系統具備檢測實際輸出電壓值的大小,可以經過ADC0809進行模數轉換,間接用單片機實時對電壓進行采樣,然后進行數據處理及顯示。采用軟件方法來解決數據的預置以及電流的步進控制,使系統硬件更加簡潔,各類功能易于實現本系統以直流電源為核心,利用51系列單片機為主控制器,通過鍵盤來設置直流電源的輸出電流,設置步進等級可達0.1V,并可由數碼管顯示實際輸出電壓值和電壓設定值。利用單片機程控輸出數字信號,經過D/A轉換器(DA0832)輸出模擬量,再經過運算放大器隔離放大,控制輸出功率管的基極,隨著功率管基極電電流的變化而輸出不同的電壓。單片機系統還兼顧對恒壓源進行實時監控,輸出電壓經過電流/電壓轉變后,通過A/D轉換芯片,實時把模擬量轉化為數據量,經單片機分析處理, 通過數據形式的反饋環節,使電壓更加穩定,構成穩定的壓控電壓源。

第五章 制作調試與結果分析
5.1 硬件電路的布線與焊接
電路圖經過我們在PROTEL中的自動排線和手動排線產生PCB原理圖,我們將原理圖打印在熱印紙上,然后在經過高溫,將墨覆到銅板上,產生清晰的電路布線圖。由于打印或人為的原因很可能出現斷線的結果,所以我們要認真檢查,如出現斷線我們可用油漆涂上,使斷口再次被連在一起。為了能使那些墨都能覆在覆銅板上我們最好把覆銅板在壓印機上過兩遍。
元器件的焊接:
①焊件必須具有良好的可焊性.不是所有的金屬都就有良好的可焊性.焊接時,由于高溫是焊件的表面產生氧化膜,影響焊件的可焊性.為了提高焊件的可焊性,一般采用表面鍍錫,鍍銀等措施來防御表面的氧化。
②為了使焊件和焊錫之間有良好的接觸,焊件表面必須保持清潔.在焊接前必須把氧化膜清除干凈,否則將無法保證焊接質量。
③要使用合適的助焊劑.不同的焊接工藝應使用不同的助焊劑.在焊接電子線路板等精密電子產品的時候,衛士焊接可靠穩定,通常采用松香助焊劑.一般使用酒精將松香溶解成松香水使用。
④焊件加熱到適當的溫度.需要強調的是,需要強調的是,不但焊錫要加熱到熔化,而且應當同時將焊件加熱到能夠熔化焊錫的溫度。

5.2 電路組裝和調試
實際電路圖

在電路組裝過程中,遇到的最大問題是,起初考慮不周全,芯片分布不夠合理,出現了許多"特長線"。不但影響布線速度,而且也會給后來的調試帶來不必要的麻煩。當時已經布線不少,不可能重新開始,再三權衡,最后只移動了一個芯片,問題就得到了很大改善。其次就是布線,因為要求不準交叉,且橫平豎直,所以在保證連通的情況下,在布線上也下了不少工夫。
調試過程中,第一輪用萬用表歐姆檔測試,就遇了實驗板上有插孔不通的情況,導致芯片不能正常工作。相對于別的辦法,我選擇了導線顯式連通,因為其更明晰,更易實現。對于高阻導線則只能換掉。第二輪接電后,用萬用表的電壓檔測試單元電路的狀態。如:經過每一級三端穩壓器后輸出的電壓否為穩定電壓,并且與所需電壓偏差會不會很大,根據測試結果對電路進行必要的改進,從而達到設計的目的。

第六章 分析與心得
在本次設計的過程中,我發現很多的問題,給我的感覺就是很難,很不順手,看似很簡單的電路,要動手把它給設計出來,是很難的一件事,主要原因是我們沒有經常動手設計過電路,還有資料的查找也是一大難題,這就要求我們在以后的學習中,應該注意到這一點,更重要的是我們要學會把從書本中學到的知識和實際的電路聯系起來,這不論是對我們以后就業還是學習,都會起到很大的促進和幫助,我相信,通過這次的設計,在以后的學習中我會更加努力,力爭把這門課學好,學精。同時,通過本次設計,鞏固了我們學習過的專業知識,也使我們把理論與實踐從真正意義。
在本次設計過程中,對紋波也沒有提出嚴格要求,所以常用的穩壓集成電路就可以滿足要求。在電路中采用了模擬器件和數字器件所以需要+5V、和-15V 電源供電。本設計輸出的電壓穩壓精度高,可以用在對直流電壓要求較高的設備上,或在科研實驗室中當作實驗電源使用。
題目是非常重要的,要選擇一個好的題目,就要滿足適合我們這組制作,并且也要考慮到自身能力,還有就是容易找到相關的參考資料等條件。只有符合以上所說的條件才能做出一個好的設計,所以我們就選擇了《數控直流穩壓電源》的設計課程。我們查找了大量這方面的相關參考資料,如《電子電路實驗及仿真》,《電路與電子技術實驗教程》等,還查閱了各種所需芯片的管腳資料。在這些參考資料的基礎上構想了幾個設計方案,并且確定了最后的設計方案。
當確定了最終的設計方向以后,我們就開始著手完善它的理論方案。根據設計方案的內容我們畫出了具體的原理圖,進行邏輯分析和理論計算,然后去電子市場根據設計要求購買了大量所需的原器件,準備好了設計所需的一切材料。在焊接問題上,我們也出了很多問題。首先,你必須知道那個電路版哪幾條線是通的,這樣對布線和擺放都有好處。再者,焊接的時候,注意焊錫焊接的邏輯對不對,這里我們犯了很多錯誤,比方說2個觸點本來是不連的,但是不小心就會焊接起來,花了我們很多時間找錯誤。最后一定要仔細地檢查一翻焊點,導線以及芯片的管腳的連線,這一點是相當重要的!
有了這次難忘的經歷,我覺得自己充實了許多,學到了很多東西,更重要的是我們學會了如何協同合作,學會了遇到問題應該如何解決。

結束語

本文設計的數控直流電壓源,利用AT89C51單片機及其外圍擴展電路,采用了鍵盤數碼顯示,該電源具有調整方便、步進精度高等特點,可作為電子儀器直流標準電壓源,其數字化的輸入快捷方便、簡潔明了。



附錄:程序
  1. #include <reg52.h>                                          //通用52單片機頭文件
  2. #define uchar unsigned char                                                         
  3. sbit RESET=P3^3;                               //DA轉換數值復位端口位定義
  4. sbit keyup=P3^4;                               //步進加端口位定義
  5. sbit keydown=P3^5;                               //步進減端口位定義
  6. sbit LEDwei1=P2^7;                               //低位數碼管位選
  7. sbit LEDwei2=P2^6;                               //高位數碼管位選
  8. #define duan P0            //段選宏定義
  9. void delay(int);                               //延時函數聲明
  10. void display(uchar);                 //顯示函數聲明
  11. uchar code LEDcode[]={0xc0,0xf9,0xa4,0xb0,0x99,
  12.                                                               0x92,0x82,0xF8,0x80,0x90,0x8e};       //共陽數碼管0-9和F(為段選所用)
  13. uchar code byte[]={ 0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,              0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,
  14.                                                                      
  15.                                                                       0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,              0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,
  16.                                                                      
  17.                                                                       0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,              0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e,
  18.                                                                      
  19.                                                                       0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,              0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e,
  20.                                                                      
  21.                                                                       0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,              0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,
  22.                                                                      
  23.                                                                       0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xac,0xae,              0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe,
  24.                                                                      
  25.                                                                       0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce,              0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde,
  26.                                                                      
  27.                                                                       0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee,              0xf0,0xf2,0xf4,0xf6,0xf8,0xfa,0xfc,0xfe,
  28.                                                                      
  29.                                                                       };//DA轉換數據

  30. uchar code table[]={0x11,0x12,15,16,17,18,20,21,22,23, 24,25,27,28,29,30,31,32,34,35,
  31.                                                                       36,37,38,39,41,42,43,44,45,47, 48,49,50,51,52,53,55,56,57,58,
  32.                                                                       59,61,62,63,64,65,66,68,69,70, 71,72,73,75,76,77,78,79,80,82,
  33.                                                                       83,84,85,86,87,89,90,91,92,93, 94,96,97,98,99};              //用于顯示電壓值的數組

  34. void main()
  35. {
  36.               uchar num=0;            
  37.               while(1)
  38.               {
  39.                                           if(keyup==0)                            //步進加端口為低電平,
  40.                                           {            
  41.                                                         delay(10);                              //稍作延時,消抖,
  42.                                                         if(keyup==0)                //步進加端口依然為低電平,說明的確是被按下,
  43.                                                         {            
  44.                                                                       if(num==128)  //執行電壓DA轉換數值步進增加一
  45.                                                                       num=0;
  46.                                                                       else
  47.                                                                       num++;
  48.                                                         }
  49.                                                         while(keyup==0);              //防止按死語句
  50.                                           }
  51.                             if(keydown==0)                                                        //步進減端口為低電平,
  52.                                           {
  53.                                                         delay(10);                                          //稍作延時,消抖,
  54.                                                         if(keydown==0)                            //步進減端口依然為低電平,說明的確是被按下,
  55.                                                         {            
  56.                                                                       if(num==0)                              //執行電壓DA轉換數值步進減一
  57.                                                                       num=128;
  58.                                                                       else
  59.                                                                       num--;
  60.                                                         }
  61.                                                         while(keydown==0);                //防止按死語句
  62.                                           }
  63.                             if(RESET==0)                                                          // 復位端口為低電平
  64.                                           {
  65.                                                         delay(10);                                            //稍作延時,消抖,
  66.                                                         if(RESET==0)                              //復位端口依然為低電平,說明的確是被按下,
  67.                                                         {            
  68.                                                                       num=0;                                            //執行復位操作
  69.                                                         }
  70.                                                         while(RESET==0);                 //防止按死語句
  71.                                           }
  72.             
  73.                             P1=byte[num];                 //給DA一個數值,轉化成相應的電壓值
  74.                             delay(10);
  75.                             display(num);                 //調用顯示函數顯示電壓值
  76.               }
  77. }

  78. void delay(int x)                               //12M晶振,約1ms延時函數
  79. {
  80.               int i;
  81.               for(;x>0;x--)
  82.               for(i=0;i<123;i++)
  83.                             ;
  84. }
  85. void display(uchar num)              //顯示函數
  86. {              uchar temp;
  87.               temp=table[num];
  88.               if(num<75)                            //電壓值小于10V的可以直接在數碼管上顯示出來
  89.               {
  90.                    duan=LEDcode[temp/10]&0x7f;        //顯示個位,并加顯小數點
  91.                             LEDwei1=1;
  92.                             delay(5);
  93.                             LEDwei1=0;
  94.                             duan=LEDcode[temp%10];;          //顯示小數點后一位
  95.                             LEDwei2=1;
  96.                             delay(5);
  97. ……………………

  98. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


完整的Word格式文檔51黑下載地址:
文檔.doc (939 KB, 下載次數: 56)


回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表