第1章 前言1.1研究背景及意義電源技術(shù)尤其是數(shù)控電源技術(shù)是一門實踐性很強的工程技術(shù),服務(wù)于各行各業(yè)。當(dāng)今電源技術(shù)融合了電氣、電子、系統(tǒng)集成、控制理論、材料等諸多學(xué)科領(lǐng)域。直流穩(wěn)壓電源是電子技術(shù)常用的儀器設(shè)備之一,廣泛的應(yīng)用于教學(xué)、科研等領(lǐng)域,是電子實驗員、電子設(shè)計人員及電路開發(fā)部門進行實驗操作和 研究不可缺少的電子儀器。在電子電路中,通常都需要電壓穩(wěn)定的直流電源來供電。而整個穩(wěn)壓過程是由電源變壓器、整流、濾波、穩(wěn)壓等四部分組成。然而這種傳統(tǒng)的直流穩(wěn)壓電源功能簡單、不好控制、可靠性低、干擾大、精度低且體積大、復(fù)雜度高。普通的直流穩(wěn)壓電源品種有很多,但均存在以下兩個問題:輸出電壓是通過粗調(diào)(波段開關(guān))及細(xì)調(diào)(電位器)來調(diào)節(jié)。這樣,當(dāng)輸出電壓需要精確輸出,或需要在一個小范圍內(nèi)改變時,困難就較大。另外,隨著使用時間的增加,波段開關(guān)及電位器難免接觸不良,對輸出會有影響。穩(wěn)壓方式均是采用串聯(lián)型穩(wěn)壓電路,對過載進行限流或截流型保護,電路構(gòu)成復(fù)雜,穩(wěn)壓精度也不高。在家用電器和其他各類電子設(shè)備中,通常都需要電壓穩(wěn)定的直流電源供電。但在實際生活中,都是有220V的交流電網(wǎng)供電。這就需要通過變壓、整流、濾波、穩(wěn)壓電路將交流電轉(zhuǎn)換成穩(wěn)定的直流電。濾波器用于濾去整流輸出電壓中的紋波,一般傳統(tǒng)電路由濾波扼流圈和電容器組成,若由晶體管濾波器來替代,則可縮小直流電源的體積,減輕其重量,且晶體管濾波直流電源不需直流穩(wěn)壓器就能用作家用電器的電源,這既降低了家用電器的成本,有縮小了其體積,使家用電器小型化。傳統(tǒng)的直流穩(wěn)壓電源通常采用電位器和波段開關(guān)來實現(xiàn)電壓的調(diào)節(jié),并有電壓表指示電壓值的大小。因此,電壓的調(diào)整精度不高,讀數(shù)欠直觀,電位器也易磨損。而基于單片機控制的直流穩(wěn)壓電源能較好地解決以上傳統(tǒng)穩(wěn)壓電源的不足。
隨著科學(xué)技術(shù)的不斷發(fā)展,特別是計算機技術(shù)的突飛猛進,現(xiàn)代工業(yè)應(yīng)用的工控產(chǎn)品均需要有低紋波、寬調(diào)整范圍的高壓電源,而在一些高能物理領(lǐng)域,更是急需電腦或單片機控制的低紋波、寬調(diào)整范圍的電源。
1.2國內(nèi)外研究現(xiàn)狀從十九世紀(jì)90年代末起,隨著對系統(tǒng)更高效率和更低功耗的需求,電信與數(shù)據(jù)通訊設(shè)備的技術(shù)更新推動電源行業(yè)中交流/直流電源行業(yè)正面臨著新的挑戰(zhàn),即如何在現(xiàn)有系統(tǒng)加入嵌入式電源智能系統(tǒng)和數(shù)字控制。隨著科學(xué)技術(shù)的迅速發(fā)展,人們對物質(zhì)需求也越來越高,特別是一些高新技術(shù)產(chǎn)品。如今隨著直流電源技術(shù)的飛躍發(fā)展,整流系統(tǒng)有一千的分立元件和集成電路控制發(fā)展為微機控制,從而使直流電源智能化,具有遙控測、遙信、遙控的三控功能,基本實現(xiàn)了直流電源的無人值守。并且,當(dāng)今科技快速發(fā)展過程中,模塊化是直流電源的發(fā)展趨勢,并聯(lián)運行是電源產(chǎn)品大容量話的一個有效手段,可以通過設(shè)計N+1冗電源系統(tǒng),實現(xiàn)容量擴展,提高電源系統(tǒng)的可靠性、可用性,縮短維修、維護時間,從而使企業(yè)產(chǎn)生更大的效益。如:揚州鼎華公司近些年來結(jié)合美國Sorensen Amrel等公司的先進技術(shù),成功開發(fā)了單機最大功率120KW智能模塊電源,可以并聯(lián)32臺(可擴展到64臺),使最大輸出功率可以達(dá)到7600KW以上。智能模塊電源采用電流型控制模式,集中式散熱技術(shù),實時多任務(wù)監(jiān)控,具有高效、高可靠、超低輻射,維護快捷等優(yōu)點,跡象結(jié)構(gòu)緊湊,防腐與散熱也作了多方面的加強。它的應(yīng)用將會克服大功率電源的制造、運輸及維修等困難。而且和傳統(tǒng)可控硅電源相比節(jié)電20%-30%節(jié)能優(yōu)勢,奠定了它將是未來大功率直流電源的首選。
1.3課題的主要內(nèi)容系統(tǒng)設(shè)計的目的是要用微處理器來替代傳統(tǒng)直流穩(wěn)壓電源中手動旋轉(zhuǎn)電位器,實現(xiàn)輸出電壓在電源量程范圍內(nèi)步進可調(diào),精度要求高。實現(xiàn)的途徑很多,可以用DAC的模擬輸出控制電源的基準(zhǔn)電壓或分壓電阻,或者用其它更有效地方法,因此如何選擇簡單有效地方法是本課題余姚解決的首要問題。
數(shù)控直流穩(wěn)壓電源要實現(xiàn)電壓的鍵盤化控制,同時要具備輸出、過壓過流保護及數(shù)組存貯與預(yù)置等功能。另外,根據(jù)要求電源還應(yīng)該可以通過按鍵選擇一些特殊的功能。如何有效地實現(xiàn)這些功能也是本課題所需研究解決的問題。
輸出最大電壓:25V
輸出最大電流:2.5A
電壓步進:0.1V
電壓分辨率:0.02V
1.4論文的總體結(jié)構(gòu)第一部分簡要介紹課題的背景、意義、國內(nèi)外研究現(xiàn)狀,介紹本文的主要研究內(nèi)容,包括實現(xiàn)的目標(biāo)、功能的完備和性能指標(biāo)。
第二部分提出了數(shù)控直流電源的總的設(shè)計思路和實現(xiàn)方案,以及相關(guān)系統(tǒng)實現(xiàn)的功能,選擇了一種基于51單片機系統(tǒng)的數(shù)控直流電源的方案,并對該方案運用的基本知識和使用的器件作出扼要的介紹。
第三部分模塊化闡述了基于51單片機數(shù)控直流電源的系統(tǒng)整體結(jié)構(gòu)和設(shè)計框圖,包括數(shù)據(jù)單片機控制模塊、穩(wěn)壓控制模塊、電壓/電流采樣模塊、電源模塊及鍵盤模塊。
第四部分主要闡述了數(shù)控直流電源的軟件系統(tǒng)的設(shè)計思路和軟件設(shè)計流程。
第五部分對數(shù)控直流穩(wěn)壓電源的性能參數(shù)進行測量與評估,以及對誤差進行分析。
第六部分針對本數(shù)控直流電源給出了本課題的 ,并對其發(fā)展前景進行了展望。
第2章 方案與設(shè)計基礎(chǔ)知識2.1方案設(shè)計與論證根據(jù)設(shè)計的要求:
- 最高輸出電壓25V,最大輸出電流2.5A。
- 電壓步進0.1V。
- 紋波系數(shù)盡可能小,輸出穩(wěn)定。
- 有限按鍵操作方便,LCD顯示界面。
特色及基本技術(shù)路線:
- 低成本解決方案。
- 直觀的實驗效果。
- 經(jīng)典理論驗證平臺先硬件后軟件,先局部后整體。
我設(shè)計出以下方案:
用D/A和運算放大器做電流源,即采用D/A輸出調(diào)節(jié)晶體管的偏置電流(電壓);使用電壓/電流采樣電路,通過A/D轉(zhuǎn)換實現(xiàn)閉環(huán)控制。能有效的縮短調(diào)節(jié)時間,進一步提高輸出精度。設(shè)計方案,其主要有微控制器模塊、穩(wěn)壓控制模塊、電壓/電流采樣模塊、顯示模塊、鍵盤模塊、電源模塊五部分構(gòu)成。液晶屏顯示電路,該系統(tǒng)使用LCD1602液晶顯示屏,可以清晰地顯示分別組成顯示電路的十位、個位、小數(shù)點位,同時還能顯示英文名稱和電壓/電流單位。
方案原理示意圖見圖2-1:
圖2-1
2.2主控單片機(MCU)2.2.1 AT89S51簡介 AT89S51是一個低功耗,高性能CMOS 8位單片機,片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,功能強大的微型計算機的AT89S51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價比的解決方案。
AT89S51具有如下特點:40個引腳,4k Bytes Flash片內(nèi)程序存儲器,128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時鐘振蕩器。
此外,AT89S51設(shè)計和配置了振蕩頻率可為0Hz并可通過軟件設(shè)置省電模式。空閑模式下,CPU暫停工作,而RAM定時計數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。
2.2.2 主要特征及引腳說明 1.主要特性:
• 8031 CPU與MCS-51 兼容
• 4K字節(jié)可編程FLASH存儲器(壽命:1000寫/擦循環(huán))
• 全靜態(tài)工作:0Hz-24KHz
• 三級程序存儲器保密鎖定
• 128*8位內(nèi)部RAM
• 32條可編程I/O線
• 兩個16位定時器/計數(shù)器
• 6個中斷源
• 可編程串行通道
• 低功耗的閑置和掉電模式
• 片內(nèi)振蕩器和時鐘電路
2.管腳說明:
VCC:供電電壓。
GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外部中斷0)
P3.3 /INT1(外部中斷1)
P3.4 T0(記時器0外部輸入)
P3.5 T1(記時器1外部輸入)
P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)
P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)
P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。
/EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
2.3液晶顯示屏(1602)2.3.1 LCD1602簡介LCD1602可以在LCD顯示屏上完整顯示32個英文字符和日文等一些字符,適合顯示英文文字信息量較小的地方?梢詰(yīng)用在計算器、頻率計、信號發(fā)生器、時鐘等產(chǎn)品上。
- 顯示容量:16*2個字符
- 芯片工作電壓:4.5-5.5V
- 工作電流2MA(5.0V)部包括背光電流
- 模塊最佳工作電壓為5V
- 字符尺寸:2.95*4.35(WXH)mm
- 帶有英文和日文字庫,使用方便
2.3.2引腳接口說明
2.4固定三端穩(wěn)壓器2.4.1固定三端穩(wěn)壓器簡介 三端穩(wěn)壓器,主要有兩種,一種輸出電壓是固定的,稱為固定輸出三端穩(wěn)壓器,另一種輸出電壓是可調(diào)的,稱為可調(diào)輸出三端穩(wěn)壓器,其基本原理相同,均采用串聯(lián)型穩(wěn)壓電路。在線性集成穩(wěn)壓器中,由于三端穩(wěn)壓器只有三個引出端子,具有外接元件少,使用方便,性能穩(wěn)定,價格低廉等優(yōu)點,因而得到廣泛應(yīng)用。
2.4.2固定三端穩(wěn)壓器的類別 三端穩(wěn)壓器的通用產(chǎn)品有78系列(下電源)和79系列(負(fù)電源),輸出電壓由具體型號中的后面兩個數(shù)字代表,有5V,6V,8V,9V,12V,15V,18V,24V等檔次。輸出電流以78(或79)后面加字母來區(qū)分L表示0.1;AM表示0.5A,無字母表示1.5A,如78L05表求5V 0.1A。
1、使用注意事項:
在使用時必須注意:(VI)和(Vo)之間的關(guān)系,以7805為例,該三端穩(wěn)壓器的固定輸出電壓是5V,而輸入電壓至少大于7V,這樣輸入/輸出之間有2-3V及以上的壓差。使調(diào)整管保證工作在放大區(qū)。但壓差取得大時,又會增加集成塊的功耗,所以,兩者應(yīng)兼顧,即保證在最大負(fù)載電流時調(diào)整管不進入飽和,又不致于功耗偏大。
另外一般在三端穩(wěn)壓器的輸入輸出端接一個二極管,用來防止輸入端短路時,輸出端存儲的電荷通過穩(wěn)壓器,而損壞器件。
2、用途:
一般穩(wěn)壓管和穩(wěn)壓三級管的用途是一樣的,都用于控制板電路的穩(wěn)壓.以防止電壓過高燒毀電路.
2.4.3三端穩(wěn)壓器(78、79系列)管腳序號判斷技巧 在78**、79**系列三端穩(wěn)壓器中最常應(yīng)用的是TO-220和TO-202兩種封裝。這兩種封裝的圖形以及引腳序號、引腳功能如附圖所示。
圖中的引腳號標(biāo)注方法是按照引腳電位從高到底的順序標(biāo)注的。這樣標(biāo)注便于記憶。引腳①為最高電位,③腳為最低電位,②腳居中。從圖中可以看出,不論正壓還是負(fù)壓,②腳均為輸出端。對于78**正壓系列,輸入是最高電位,自然是①腳,地端為最低電位,即③腳,如附圖所示。對與79**負(fù)壓系列,輸入為最低電位,自然是③腳,而地端為最高電位,即①腳,如附圖所示。

用萬用表判斷三端穩(wěn)壓器的方法與三極管的判斷方法相同,三端穩(wěn)壓器相當(dāng)于大功率三極管。
此外,還應(yīng)注意,散熱片總是和最低電位的第③腳相連。這樣在78**系列中,散熱片和地相連接,而在79**系列中,散熱片卻和輸入端相連接。
2.5通用型低功耗集成四運放LM324LM324是四運放集成電路,它采用14腳雙列直插塑料封裝,外形如圖2所示。它的內(nèi)部包含四組形式完全相同的運算放大器,除電源共用外,四組運放相互獨立。每一組運算放大器可用圖1所示的符號來表示,它有5個引出腳,其中“+”、“-”為兩個信號輸入端,“V+”、“V-”為正、負(fù)電源端,“Vo”為輸出端。兩個信號輸入端中,Vi-(-)為反相輸入端,表示運放輸出端Vo的信號與該輸入端的位相反;Vi+(+)為同相輸入端,表示運放輸出端Vo的信號與該輸入端的相位相同。
2.5.1 LM324四運放的特點:1.短路保護輸出
2.真差動輸入級
3.可單電源工作:3V-32V
4.低偏置電流:最大100nA(LM324A)
5.每封裝含四個運算放大器
6.具有內(nèi)部補償?shù)墓δ?/font>
7.共模范圍擴展到負(fù)電源
8.行業(yè)標(biāo)準(zhǔn)的引腳排列
9.輸入端具有靜電保護功能
2.5.2 LM324四運放的應(yīng)用 由于LM324四運放電路具有電源電壓范圍寬,靜態(tài)功耗小,可單電源使用,價格低廉等優(yōu)點,因此被廣泛應(yīng)用在各種電路中。
反相交流放大器
電路見附圖。此放大器可代替晶體管進行交流放大,可用于擴音機前置放大等。電路無需調(diào)試。放大器采用單電源供電,由R1、R2組成1/2V+偏置,C1是消振電容。
放大器電壓放大倍數(shù)Av僅由外接電阻Ri、Rf決定:Av=-Rf/Ri。負(fù)號表示輸出信號與輸入信號相位相反。按圖中所給數(shù)值,Av=-10。此電路輸入電阻為Ri。一般情況下先取Ri與信號源內(nèi)阻相等,然后根據(jù)要求的放大倍數(shù)在選定Rf。Co和Ci為耦合電容。
同相交流放大器
見附圖。同相交流放大器的特點是輸入阻抗高。其中的R1、R2組成1/2V+分壓電路,通過R3對運放進行偏置。電路的電壓放大倍數(shù)Av也僅由外接電阻決定:Av=1+Rf/R4,電路輸入電阻為R3。R4的阻值范圍為幾千歐姆到幾十千歐姆。
比較器
當(dāng)去掉運放的反饋電阻時,或者說反饋電阻趨于無窮大時(即開環(huán)狀態(tài)),理論上認(rèn)為運放的開環(huán)放大倍數(shù)也為無窮大(實際上是很大,如LM324運放開環(huán)放大倍數(shù)為100dB,既10萬倍)。此時運放便形成一個電壓比較器,其輸出如不是高電平(V+),就是低電平(V-或接地)。當(dāng)正輸入端電壓高于負(fù)輸入端電壓時,運放輸出低電平。
附圖中使用兩個運放組成一個電壓上下限比較器,電阻R1、R1ˊ組成分壓電路,為運放A1設(shè)定比較電平U1;電阻R2、R2ˊ組成分壓電路,為運放A2設(shè)定比較電平U2。輸入電壓U1同時加到A1的正輸入端和A2的負(fù)輸入端之間,當(dāng)Ui >U1時,運放A1輸出高電平;當(dāng)Ui 時,運放A2輸出高電平。運放A1、A2只要有一個輸出高電平,晶體管BG1就會導(dǎo)通,發(fā)光二極管LED就 會點亮。若選擇U1>U2,則當(dāng)輸入電壓Ui越出[U2,U1]區(qū)間范圍時,LED點亮,這便是一個電壓雙限指示器。若選擇U2 > U1,則當(dāng)輸入電壓在[U2,U1]區(qū)間范圍時,LED點亮,這是一個“窗口”電壓指示器。此電路與各類傳感器配合使用,稍加變通,便可用于各種物理量的雙限檢測、短路、斷路報警等。
2.6 數(shù)模轉(zhuǎn)換芯片DAC0832芯片內(nèi)有兩級輸入寄存器,使DAC0832具備雙緩沖、單緩沖和直通三種輸入方式,以便適于各種電路的需要(如要求多路D/A異步輸入、同步轉(zhuǎn)換等)。D/A轉(zhuǎn)換結(jié)果采用電流形式輸出。要是需要相應(yīng)的模擬信號,可通過一個高輸入阻抗的線性運算放大器實現(xiàn)這個供功能。
該片邏輯輸入滿足TTL電壓電平范圍,可直接與TTL電路或微機電路相接,下面是芯片電路原理圖:
DAC0832引腳圖和內(nèi)部結(jié)構(gòu)電路圖
DAC0832引腳功能說明:
DI0~DI7:數(shù)據(jù)輸入線,TLL電平。
ILE:數(shù)據(jù)鎖存允許控制信號輸入線,高電平有效。
CS:片選信號輸入線,低電平有效。
WR1:為輸入寄存器的寫選通信號。
XFER:數(shù)據(jù)傳送控制信號輸入線,低電平有效。
WR2:為DAC寄存器寫選通輸入線。
Iout1:電流輸出線。當(dāng)輸入全為1時Iout1最大。
Iout2: 電流輸出線。其值與Iout1之和為一常數(shù)。
Rfb:反饋信號輸入線,芯片內(nèi)部有反饋電阻.
Vcc:電源輸入線 (+5v~+15v)
Vref:基準(zhǔn)電壓輸入線 (-10v~+10v)
AGND:模擬地,摸擬信號和基準(zhǔn)電源的參考地.
DGND:數(shù)字地,兩種地線在基準(zhǔn)電源處共地比較好.
2.7模數(shù)轉(zhuǎn)換芯片2.7.1 ADC0804簡介ADC0804型8位全MOS A/D轉(zhuǎn)換器。它是中速廉價型產(chǎn)品之一。片內(nèi)有三態(tài)數(shù)據(jù)輸出鎖存器,與微處理器兼容,輸入方式為單通道,轉(zhuǎn)換時間約為100µs。它的非線形誤差為±1LSB。電源電壓為單一+5V。
2.7.2 ADC0804的引腳及其功能

、

、

(引腳1、2、3):是數(shù)字控制輸入端,滿足標(biāo)準(zhǔn)TTL邏輯電平。其中

和

用來控制A/D轉(zhuǎn)換的啟動信號。

、

用來讀A/D轉(zhuǎn)換的結(jié)果,當(dāng)它們同時為低電平時,輸出數(shù)據(jù)鎖存器DB0~DB7各端上出現(xiàn)8位并行二進制數(shù)碼。
CLK(引腳4)、CLKR(引腳19):ADC0801~0805片內(nèi)有時鐘電路,只要在外部“CLKR”和“CLK”兩端外接一對電阻電容即可產(chǎn)生

轉(zhuǎn)換所需要的時鐘,其振蕩頻率為

≈

RC。其典型應(yīng)用參數(shù)為:R=10kΩ,C=150pF,

≈640kHz,每秒鐘可轉(zhuǎn)換1萬次。若采用外部時鐘,則外部

可從CLK端送入,此時不接R、C。允許的時鐘頻率范圍為100KHZ~1460KHZ。

(引腳5):轉(zhuǎn)換結(jié)束信號輸出端,輸出電平高跳到低表示本次轉(zhuǎn)換已經(jīng)完成,可作為中斷或查詢信號。如果

和

端與

端相連,則ADC0804就處于自動循環(huán)轉(zhuǎn)換狀態(tài)。

(引腳6)和

(引腳7):被轉(zhuǎn)換的電壓信號從

和

輸入,允許此信號是差動的或不共地的電壓信號。如果輸入電壓

的變化范圍從0V到

,則芯片的

端接地,輸入電壓加到

端。對于差動輸入,輸入電壓可以從非零開始,即

到

。此時

端應(yīng)接至等于

的恒定電壓上,而輸入電壓

仍加到

端上。
AGND(引腳8)、DGND(引腳10):A/D轉(zhuǎn)換器一般都有這兩個引腳。模擬地AGND和數(shù)字地DGND分別設(shè)置引入端,使數(shù)字電路的地電流不影響模擬信號回路,一防止寄生耦合造成的干擾。
VREF/2(引腳9):參考電壓VREF/2可以有外部電路供給,從“VREF/2”端直接送入,VREF/2端的電壓值應(yīng)是輸入電壓范圍的二分之一。所以輸出電壓的范圍可以通過調(diào)整VREF/2引腳處的電壓加以改變,轉(zhuǎn)換器的零點無需調(diào)整。
第3章 系統(tǒng)電路原理及硬件實現(xiàn)3.1系統(tǒng)總體框圖系統(tǒng)的總體設(shè)計方案主要由微控制器模塊、穩(wěn)壓控制模塊、電壓/電流采樣模塊、顯示模塊、鍵盤模塊、電源模塊五部分構(gòu)成。
3.2系統(tǒng)模塊電路設(shè)計3.2.1 單片機控制模塊 MCU模塊即為單片機部分,整個控制都是依靠單片機完成。從功能和價位以及本題目要求來看,我選擇51系列AT89S51作為本方案的控制核心,P0口接液晶顯示LCD1602作為輸出數(shù)據(jù)顯示傳輸,同時P25/P26/P27是液晶LCD控制端口;P3口接DAC0832作為輸出數(shù)據(jù)傳輸;P20、P21、P22接三個獨立按鍵作為輸入數(shù)據(jù)傳輸;P36/P37接容量為2K的數(shù)據(jù)存儲器24C02,可以實現(xiàn)掉電數(shù)據(jù)貯存和預(yù)置數(shù)據(jù)貯存;P1口接ADC0804作為輸入/輸出數(shù)據(jù)傳輸。如圖所示:
3.2.2 穩(wěn)壓控制模塊 通過鍵盤控制MCU產(chǎn)生8位數(shù)字信號(0-255),通過P3口送至8位數(shù)模轉(zhuǎn)換芯片(DAC0832)轉(zhuǎn)換成模擬電流信號,再經(jīng)運放作I/U轉(zhuǎn)換,得到控制穩(wěn)壓電源輸出部分的基準(zhǔn)電壓;
3.2.3 電壓與電流采樣模塊電壓與電流采樣模塊是系統(tǒng)的重要組成部分,對ADC的說明:以輸入電壓為標(biāo)準(zhǔn),如果輸入電壓大于設(shè)定的電壓值,則減小DA輸出電壓一位數(shù)值,再采樣比較,如此循環(huán),直到輸入的電壓等于設(shè)定的電壓值或者接近設(shè)定的電壓值(有事不可能完全相等)。同理,如果輸入電壓小于設(shè)定的電壓,則增大DA輸出電壓一位數(shù)值,再采樣比較,如此循環(huán),直到輸入的電壓等于設(shè)定的電壓值或者接近設(shè)定的電壓值。這樣,就能達(dá)到閉環(huán)反饋的目的。
利用DAC0832控制的基準(zhǔn)電壓驅(qū)動功率管穩(wěn)壓輸出,反饋部分是通過電阻R3,VR2將取樣電壓輸入運放的反相端比較,VR2可作小范圍調(diào)整;如圖所示:
采用8位模數(shù)轉(zhuǎn)換芯片(ADC0804)作為顯示電流的模數(shù)轉(zhuǎn)換器件,ADC0804的取樣電壓由串聯(lián)在電源輸出電路的電流取樣電阻(0.1Ω)分壓取得,并由運放按一定倍數(shù)放大后送至Vin(+),ADC0804把轉(zhuǎn)換結(jié)果送至單片機的P1口,再由程序?qū)?shù)據(jù)處理后送LCD1602顯示當(dāng)前電流;
3.2.4 顯示模塊 顯示的方式很多,主要分為兩類:LED顯示,LCD顯示。前者顯示高,制作成本低,適合做遠(yuǎn)距離顯示,但由于其耗電較大,所以端口隨顯示的數(shù)據(jù)位數(shù)增加而增加。如果采用動態(tài)掃描方式顯示,則占用CPU的時間,如果采用靜態(tài)顯示則需要加鎖存器,耗費硬件制作時間,就該題目要求來說,需要設(shè)定電壓顯示,又與實際電壓比較再顯示,LCD顯示更為清晰、直觀,從上面諸多因素來看,采用LCD顯示比較理想。LCD最常用的就是1602液晶模塊。LCD1602可以在LCD顯示屏上完整顯示32個英文字符和日文等一些字符,適合顯示英文文字信息量較小的地方,可以清晰顯示出英文名稱和電壓/電流單位,電壓(三位數(shù)字:十位、個位、小數(shù)位),電流(三位數(shù)字:個位,兩位小數(shù))。通過單片機編程控制第4腳RS數(shù)據(jù)/命令選擇端,第5腳R/W讀/寫選擇端,第6腳E使能信號,從而實現(xiàn)顯示效果。它的顯示運行原理如下:
讀狀態(tài):輸入:RS=0,RW=1,E=1;輸出:D0~D7=狀態(tài)字
寫指令:輸入:RS=0,RW=0,D0~D7=指令碼,E=高脈沖;輸出:無
讀指令:輸入:RS=1,RW=1,E=1;輸出:D0~D7=數(shù)據(jù)
寫數(shù)據(jù):輸入:RS=0,RW=0,D0~D7=數(shù)據(jù),E=高脈沖;輸出:無
如圖所示:
3.2.5 鍵盤模塊系統(tǒng)中鍵盤模塊設(shè)計四個按鍵S1、S2、S3、S4,分別由單片機RST端、P20、P21、P21口輸入。S1為復(fù)位鍵;S4為翻頁按鍵,最近設(shè)置的電壓大小保存在EEPROM里面,比如5個電壓,按一下S2,電壓變?yōu)橄乱粋,省去了反復(fù)設(shè)置電壓的麻煩;S3為電壓+,S2為電壓-,按一下S3,當(dāng)前電壓增加0.1V,按一下S2,當(dāng)前電壓減小0.1V。如圖所示:
3.2.6 電源模塊電源模塊是讓AC220V電源通過變壓器降壓,整流濾波后得到要調(diào)節(jié)電壓輸入端;降壓為AC15V整流濾波后經(jīng)過三端穩(wěn)壓7812、7912得到DC±12V電壓為運算放大器供電;同時,又經(jīng)過三端穩(wěn)壓7805、7905得到DC±5V為ADC0804、DAC0832D等芯片提供工作電源。如圖所示:
3.3系統(tǒng)整體原理圖系統(tǒng)整體原理圖(見附錄1)。
第4章 系統(tǒng)的軟件設(shè)計4.1軟件設(shè)計思路當(dāng)系統(tǒng)上電,立即進行初始化,分別是端口初始化,D/A、A/D初始化,定時器初始化;然后系統(tǒng)默認(rèn)電壓,默認(rèn)電流;舅悸罚喊存I掃描 — D/A轉(zhuǎn)換、電壓/電流數(shù)值顯示 — 讀A/D轉(zhuǎn)換并比較糾正電壓/電流數(shù)值顯示 — 按鍵掃描,按前述循環(huán)。
4.2系統(tǒng)軟件流程4.2.1 主程序模塊 流程圖如圖4-1所示,負(fù)責(zé)與個子程序模塊的接口和檢查鍵盤功能號。程序運行后,開始檢測是否有鍵按下,若有則進入設(shè)定按鍵功能。液晶LCD1602直接顯示CPU設(shè)定的數(shù)值,使CPU資源得到充分利用。同時系統(tǒng)不斷采集外部數(shù)據(jù),經(jīng)過相關(guān)運算、分析,然后發(fā)出命令對實際值進行相應(yīng)的修正,控制輸出電壓可調(diào)、穩(wěn)定。
主程序流程圖
第5章 系統(tǒng)測試與誤差分析5.1系統(tǒng)測試5.1.1 軟件測試1、測試軟件
程序編輯器keil uvision2
程序燒制器STC-ISP V35
2、編譯結(jié)果
在編制完C語言后,即keil uvision2界面下,進行了調(diào)試,根據(jù)提示,我找到了程序在編寫上的錯誤,加以改正,再次驚醒調(diào)試。通過上述簡單的測試,證明此次設(shè)計的程序基本上正確無誤。然后,將燒錄了程序的單片機AT89S51接到系統(tǒng)電路中,查看系統(tǒng)電路的運行情況;如果程序邏輯有問題可進一步修改,直到系統(tǒng)正常運行。
5.1.2 硬件測試1、電源部分提供整個電路所需各種電壓(包括DAC芯片所需的基準(zhǔn)穩(wěn)壓-5V和89S51的+5V),由電源變壓器和整流濾波電路及兩個輔助穩(wěn)壓輸出構(gòu)成,電源變壓器的功率由需要輸出的電流大小決定,確保有充足的功率余量。
2、電流取樣電阻R1要選擇大功率的電阻(5W或10W)。也可使用廢舊萬用表上拆下來的電阻線。檢查電路連接無誤后,即可試機。找一塊數(shù)字表將其并聯(lián)在輸出電路上,按S1或S2設(shè)定一個電壓,此時LCD1602第一行顯示的電壓可能會有誤差,適當(dāng)微調(diào)反饋電路的VR2,使其與數(shù)字表讀數(shù)一致,再將數(shù)字表串聯(lián)在電源的輸出電路上,選擇適當(dāng)?shù)碾娏鳈n,接上一定的負(fù)載。此時,LCD1602第二行會顯示出電流值,適當(dāng)?shù)恼{(diào)節(jié)VR3改變ADC0804參考電壓,直至顯示的電流值與萬用表顯示的電流值一致為止,校正完成后即可使用。
注意事項:電流取樣電阻發(fā)熱量大不能貼PCB板安裝,應(yīng)該將其適當(dāng)升高再安裝;運放TL084可用LM324代換,功率管建議用TO-3金屬封裝的2N3055,可用TIP3055或C3182等大功率NPN管代換,功率調(diào)整管工作時發(fā)熱量較大,散熱片要盡可能大些或采用CPU風(fēng)扇散熱。
5.1.3 系統(tǒng)整體測試1、測試工具
開關(guān)電源T-50系列
雙蹤示波器
數(shù)字萬用表
表5-1 電壓測試表
系統(tǒng)由于剛啟動在電壓方面不穩(wěn)定,存在一定誤差,但是單片機會對其進行控制,使系統(tǒng)再次穩(wěn)定。
3、精度分析
絕對誤差:ΔU=(0.2+0.1+…...+0.2+0.2)/12=0.11V
相對誤差:γA=ΔU/U=(0.2/3.0+0.1/4.0+……+0.2/9.0+0.2/10)/12=1.8%
線性度:γL=ΔLmax/YFS=0.2/15=1.3%
靈敏度:K=0.1V
5.2誤差分析從電路的原理框圖可以看出,系統(tǒng)的誤差來源于四個方面:
- DAC0832的量化誤差。
- 基準(zhǔn)電壓溫漂引入的誤差。
- 三端穩(wěn)壓器的電路引起的誤差。
- 其它器件和線路由于溫漂、不穩(wěn)定等原因引起的誤差。
第6章 設(shè)計總結(jié)和展望6.1總結(jié) 經(jīng)過幾十天的艱苦奮戰(zhàn),我最終完成了畢業(yè)設(shè)計的基本要求。雖然過程是艱苦的,但最終成功的喜悅同樣令我快樂!
此設(shè)計用D/A和運算放大器做電源,及采用D/A輸出調(diào)節(jié)晶體管的偏值電流{電壓}。采用此方案能有效地縮短調(diào)節(jié)時間,并能提高輸出精度,經(jīng)計算需要采用8位的D/A芯片。
為了爭取時間,降低成本,我的解決方案是采用51單片機。改變電壓的大小,當(dāng)單片機通過閉環(huán)負(fù)反饋調(diào)節(jié)回路的A/D轉(zhuǎn)換檢測到電壓達(dá)到設(shè)定值時,將再次對輸出電壓進行調(diào)制,直到輸出電壓達(dá)到設(shè)定值;電壓值理論上是象形變化的,不會產(chǎn)生高次諧波,基本實現(xiàn)了任務(wù)書中的各項要求和目標(biāo),達(dá)到了此次畢業(yè)設(shè)計的預(yù)期目的。但更重要的是培養(yǎng)了我的動手能力,使我進一步了解畢業(yè)設(shè)計的基本知識,能零花和靈活運用畢業(yè)設(shè)計中的目標(biāo)任務(wù)、計劃、過程控制、總結(jié)反饋等各個環(huán)節(jié)所涉及的內(nèi)容,并且具備了迅速接受新知識的能力,對新的挑戰(zhàn)具有一定的適應(yīng)能力。
- 收集相關(guān)資料。一方面利用學(xué)校圖書館資源,另一方面利用網(wǎng)上資源。
- 提高涉及效率,遇到不解的疑惑與老師、其他同學(xué)及時溝通,以迅速解決設(shè)計中遇到的問題。
- 盡早落實工作,剩下時間專心致志做好畢業(yè)設(shè)計。
- 同學(xué)之間相互學(xué)習(xí)、溝通、鼓勵、支持。
本次設(shè)計過程中,對紋波也沒有提出嚴(yán)格的要求,所以常用的穩(wěn)壓集成電路就可以滿足要求。本設(shè)計輸出的電壓穩(wěn)壓精度高,可以用在對直流電壓要求較高的設(shè)備上,或在實驗室中當(dāng)作實驗電源使用。在本次設(shè)計的過程中,我發(fā)現(xiàn)很多的問題,給我的感覺就是很難,很不順手,看似原理比較簡單的電路,要動手把它給設(shè)計出來時很難的一件事,主要原因是我們沒有經(jīng)常動手設(shè)計過電路,還有資料的查找也是一大難題,這就要求我們在以后的學(xué)習(xí)中,應(yīng)該注意到這一點,更重要的是我們要學(xué)會把從書本中學(xué)到的知識和實際的電路聯(lián)系起來,這不論是對我們以后的就業(yè)還是學(xué)習(xí),都會起到很大的促進和幫助,我相信,通過這次的畢業(yè)設(shè)計,在下一階段的學(xué)習(xí)中我會更加努力,力爭把功課學(xué)好,學(xué)精。同時,通過本次畢業(yè)設(shè)計,鞏固了我們學(xué)習(xí)過的專業(yè)知識,也使我們把理論與實踐從真正意義上相結(jié)合了起來;考驗了我們借助互聯(lián)網(wǎng)搜集、查閱相關(guān)文獻資料,和組織材料的綜合能力;從中可以自我測驗,認(rèn)識到自己哪方面有欠缺、不足,以便于在日后的學(xué)習(xí)中得到改進、提高。
6.2展望放眼今后,直流穩(wěn)壓電源今后的發(fā)展方向之一是以微處理器為核心的數(shù)控直流穩(wěn)壓電源,它將利用最新的計算機技術(shù)、網(wǎng)絡(luò)技術(shù)及數(shù)字化技術(shù),充分發(fā)揮微處理器強大的信息處理能力,使其突破傳統(tǒng)直流穩(wěn)壓電源的概念,傳統(tǒng)直流穩(wěn)壓電源的高穩(wěn)定性輸出僅是這種數(shù)控直流穩(wěn)壓電源其眾多功能之一。它的功能包括:控制的智能化,即控制電路采用全數(shù)字化,控制手段用微處理器和單片機組成的軟件控制方式,達(dá)到了較高的智能化程度,并且進一步提高了電路設(shè)備的可靠性;將隨著微處理器和監(jiān)控軟件的引入,電源的自我監(jiān)控能力普遍增強,可以實時地監(jiān)控設(shè)備本身的各種運行參數(shù)和狀態(tài),預(yù)警功能和故障診斷功能,有效地實現(xiàn)了實驗電源的無人值守;隨著胡兩旺技術(shù)應(yīng)用日益普及和信息處理技術(shù)的不斷發(fā)展,在管理上達(dá)到網(wǎng)絡(luò)化,電源設(shè)備數(shù)據(jù)處理和通信能力,通過其智慧型人機界面,使網(wǎng)路技術(shù)人員可以隨時監(jiān)視電源設(shè)備運行狀態(tài),各項技術(shù)參數(shù);具有遠(yuǎn)程開關(guān)機功能,使網(wǎng)絡(luò)技術(shù)人員可定時開關(guān)電源。
隨著科學(xué)技術(shù)的發(fā)展,直流穩(wěn)壓電源等儀表數(shù)字化、智能化、網(wǎng)絡(luò)化將是發(fā)展方向。高精度數(shù)控直流穩(wěn)壓電源的研制對準(zhǔn)了這個發(fā)展方向,加上計算機技術(shù)的迅速發(fā)展,使之具有非常廣闊的發(fā)展空間。
附錄1 系統(tǒng)整體原理圖
附錄2 系統(tǒng)源程序
單片機源程序如下:
- #include <reg52.h> //52系列頭文件
- #define Disdata P0 //液晶數(shù)據(jù)端口
- #define uchar unsigned char //無符號字符8位
- #define uint unsigned int //無符號整數(shù)8位
- uint data dis[4]={0x00,0x00,0x00,0x00};//4個數(shù)據(jù)單元和一個
- uchar code table[]="OUTPUT: . V "; //定義初始上電液晶默認(rèn)顯示狀態(tài)
- uchar code table1[]="designed by :";
- uchar code table3[]=" Li Xiaojun";
- uchar code table2[]="INPUT: . V ";
- sbit lcden=P2^7; //定義液晶使能端
- sbit lcdrs=P2^5; //定義液晶RS端
- sbit rw=P2 ^6; //定義液晶RW端
- sbit cs_ad=P2^4;
- sbit dout=P2^3;
- sbit clk=P2^2; //轉(zhuǎn)換結(jié)束標(biāo)志位
- sbit da_wr=P2^1;
- sbit da_cs=P2^0;
- sbit beep=P1^7;//蜂鳴器
- data int result;//測量變量暫存地址
- uchar num,num1,num2,num3,num4,num5;
- uchar shii,gei;
- uchar shuru;
- uchar dagg,dass;
- uchar key,temp;
- uchar cvc,mma,mmb;
- uchar ddf;
- uint ddt;
- //********延時函數(shù)************
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
-
- //*************
- void di()
- {
- beep=0;
- delay(100);
- beep=1;
- }void write_com(uchar com) //液晶寫命令函數(shù)
- {
- lcdrs=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_data(uchar date) //液晶寫數(shù)據(jù)函數(shù)
- {
- lcdrs=1;
- P0=date;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_sg(uchar add,uchar date) //寫整數(shù)位和小數(shù)位函數(shù)
- {
- uint shi,ge;
- shi=date/10; //分解出一個2位數(shù)的十位
- ge=date%10;
- write_com(0x80+0x40+add); //設(shè)置顯示位置
- write_data(0x30+shi); //送去液晶顯示十位
- write_data(0x30+ge); //送去液晶顯示個位
- }
- //void write_da(uchar sps,uchar uru)
- //{ uchar yuy,rur;
- // yuy=uru;
- // rur=0;
- // write_com(0x80+sps); //設(shè)置顯示位置
- //if(cvc==8)
- // {
- // write_data(0x30+yuy); //送去液晶顯示十位
- // write_data(0x30+rur); //送去液晶顯示個位
- // }
- /// else
- // write_data(0x30+rur); //送去液晶顯示十位
- // write_data(0x30+yuy);
- //}void init()
- {
- shuru=0;
- rw=0;
- lcden=0;
- shii=0;
- gei=0;
- dagg=0;
- dass=0;
- write_com(0x38); //初始化1602液晶
- write_com(0x0c);
- write_com(0x06);
- write_com(0x01);
- write_com(0x80); //設(shè)置顯示初始坐標(biāo) for(num2=0;num2<13;num2++)
- {
- write_data(table1[num2]);
- delay(5);
- }
- write_com(0x80+40);
- for(num3;num3<16;num3++)
- {
- write_data(table3[num3]);
- delay(5);
- }
- delay(3000);
-
- } //*******************************
- void scan1()
- {
- write_com(0x80);
- for(num1;num1<16;num1++)
- {
- write_data(table2[num1]);
- delay(5);
- }
- // write_da(8,dass);
- //write_da(11,dagg); write_com(0x80+0x40); //設(shè)置顯示初始坐標(biāo)
- for(num=0;num<16;num++)
- {
- write_data(table[num]);
- delay(5);
- }
- write_sg(8,shii);
- write_sg(11,gei);
-
- }
-
- //****TLC1549轉(zhuǎn)換處理子函數(shù)********void test()
- {
-
- data uchar i;
-
- cs_ad=1; //禁止i/o clock
- cs_ad=0; //開啟控制電路,使能data out和i/o clock
- result=0; //清轉(zhuǎn)換變量
- for(i=0;i<10;i++) //采集10次 ,即10bit
- {
- clk=0;
- result*=2;
- if(dout) result++;
- clk=1;
- }
- delay(590);
- cs_ad=1; ;;;; //data out 返回到高阻狀態(tài)而終止序列
- //****數(shù)據(jù)轉(zhuǎn)換處理**********
- result=result*2;
- dis[2]=result/205; //計算整數(shù)位
- dis[3]=result%205; //余數(shù)暫存
- dis[3]=dis[3]*10; //計算小數(shù)第一位
- dis[1]=dis[3]/205;
- dis[3]=dis[3]%205;
- dis[3]=dis[3]*10; //計算小數(shù)第二位
- dis[0]=dis[3]/205;
- shii=dis[2];
- gei=dis[1]*10+dis[0];
- write_sg(8,shii);
- write_sg(11,gei);
-
- }
- //***********************
- void test_da()
- {
-
-
- ddf=mma+mmb*0.1-0.7;
- ddf=ddf*25.6;
- ddt=ddf;
- da_wr=0;
- da_cs=0;
- P3=ddt;
- delay(1);
- }//*************************
- void markey()
- {
-
- P1=0xfe;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0);
- {
- temp=P1;
- switch(temp)
- {
- case 0xee:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+1);
- di();
- cvc++;
- key=1;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+1);
- write_data(0x30+0);
- key=1;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xde:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+2);
- di();
- cvc++;
- key=2;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+2);
- write_data(0x30+0);
- key=2;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
-
-
- case 0xbe:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+3);
- di();
- cvc++;
- key=3;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+3);
- write_data(0x30+0);
- key=3;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- }
- while(temp!=0xf0)
- {
- temp=P1;
- temp=temp&0xf0;
- }
-
- }
-
-
- } P1=0xfd;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0);
- {
- temp=P1;
- switch(temp)
- {
- case 0xed:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+4);
- di();
- cvc++;
- key=4;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+4);
- write_data(0x30+0);
- key=4;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xdd:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+5);
- di();
- cvc++;
- key=5;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+5);
- write_data(0x30+0);
- key=5;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xbd:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+6);
- di();
- cvc++;
- key=6;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+6);
- write_data(0x30+0);
- key=6;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- }
- while(temp!=0xf0)
- {
- temp=P1;
- temp=temp&0xf0;
- }
-
- }
- } P1=0xfb;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0);
- {
- temp=P1;
- switch(temp)
- {
- case 0xeb:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+7);
- di();
- cvc++;
- key=7;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+7);
- write_data(0x30+0);
- key=7;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xdb:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+8);
- di();
- cvc++;
- key=8;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+8);
- write_data(0x30+0);
- key=8;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xbb:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+9);
- di();
- cvc++;
- key=9;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+9);
- write_data(0x30+0);
- key=9;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
-
- }
- while(temp!=0xf0)
- {
- temp=P1;
- temp=temp&0xf0;
- }
-
- }
-
- }
-
- P1=0xf7;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0);
- {
- temp=P1;
- switch(temp)
- {
- case 0xe7:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+0);
- di();
- cvc++;
- key=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
基于51單片機數(shù)控直流電源的設(shè)計.docx
(330.6 KB, 下載次數(shù): 206)
2018-4-15 21:42 上傳
點擊文件名下載附件