基于單片機(jī)的數(shù)控電壓源課程設(shè)計(jì)畢業(yè)設(shè)計(jì)_第1頁
基于單片機(jī)的數(shù)控電壓源課程設(shè)計(jì)畢業(yè)設(shè)計(jì)_第2頁
基于單片機(jī)的數(shù)控電壓源課程設(shè)計(jì)畢業(yè)設(shè)計(jì)_第3頁
基于單片機(jī)的數(shù)控電壓源課程設(shè)計(jì)畢業(yè)設(shè)計(jì)_第4頁
基于單片機(jī)的數(shù)控電壓源課程設(shè)計(jì)畢業(yè)設(shè)計(jì)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于單片機(jī)的數(shù)控電壓源課程設(shè)計(jì)一系統(tǒng)硬件設(shè)計(jì)結(jié)構(gòu)框圖本數(shù)控直流穩(wěn)壓電源的設(shè)計(jì)以一穩(wěn)壓電源為基礎(chǔ),以高性能單片機(jī)系統(tǒng)為控制核心,以穩(wěn)壓驅(qū)動放大電路、短路保護(hù)電路為外圍的硬件系統(tǒng),在檢測與控制軟件的支持下實(shí)現(xiàn)對電壓輸出的數(shù)字控制,通過對穩(wěn)壓電源輸出的電壓進(jìn)行數(shù)據(jù)采樣與給定數(shù)據(jù)比較,從而調(diào)整和控制穩(wěn)壓電源的工作狀態(tài)及監(jiān)測開關(guān)電路的輸出電流大小。本數(shù)控直流穩(wěn)壓電源實(shí)現(xiàn)以下功能:鍵盤可以直接設(shè)定輸出電壓值;可快速調(diào)整電壓;lcd顯示電壓值等。at89s51矩陣鍵盤lcd顯示d/a轉(zhuǎn)換dac0832a/d轉(zhuǎn)換adc0809可調(diào)穩(wěn)壓源穩(wěn)壓電源+5v+15-15v鍵盤編碼mm74c9221.1 8051簡介我

2、們采用8051系列的at89s51作為cpu,at89s51是一種帶4k字節(jié)flash可編程可擦除只讀存儲器(fperomflash programmable and erasable read only memory)的低電壓,高性能cmos8位微處理器。該器件采用atmel高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的mcs-51指令集和輸出管腳相兼容。12 主要特性1)與mcs-51兼容 ;2)8位字長的cpu;3)可在線isp編程的4kb片內(nèi)flash存儲器,用于程序存儲,可擦寫1000次;4) 256b的片內(nèi)數(shù)據(jù)存儲器,其中高128字節(jié)地址被特殊功能寄存器sfr占用;5)可編程的32根

3、i/o口線(p0p3);6)2個(gè)可編程16位定時(shí)器;7)一個(gè)數(shù)據(jù)指針dptr;8)1個(gè)可編程的全雙工串行通信口;9)具有“空閑”和“掉電”兩種低功耗工作方式;10)可編程的3級程序鎖定位;11)工作電源的電壓為5(10.2)v;12)振蕩器最高頻率為24mhz;13)編程頻率3 24 mhz,編程電流1ma,編程電壓為5v。13芯片引腳排列與名稱dip封裝形式的at89s51的芯片引腳排列與名稱如圖1所示。vcc:供電電壓。gnd:接地。p0口:p0口為一個(gè)8位,并行, 圖1 at89s51的芯片引腳排列與名稱漏極開路雙向i/o口,作為輸出時(shí)可驅(qū)動8個(gè)ttl負(fù)載。該口內(nèi)無上拉電阻,在設(shè)計(jì)中作為

4、d/a,a/d及液晶顯示器的數(shù)據(jù)口。p1口:p1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4個(gè)ttl門電流。p1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,該口在設(shè)計(jì)中低四位作為鍵盤輸入口,高四位與rst作為在線編程下載口。p2口:p2口為一個(gè)內(nèi)部上拉電阻的8位雙向i/o口,p2口緩沖器可接收/輸出4個(gè)ttl門電流,當(dāng)p2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,可作為輸入。在作為輸出時(shí),p2口的管腳被外部拉低,將輸出電流。該口在設(shè)計(jì)中作為d/a,a/d及液晶顯示器的控制口。p3口:p3口管腳是帶內(nèi)部上拉電阻的8位雙向i/o口,可接收輸出4個(gè)ttl門電流。當(dāng)p3口寫入“

5、1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3口將輸出電流,這是由于上拉的緣故。p3口也可作為at89s51的一些特殊功能口,如下表1所示:表1 各端口引腳與復(fù)用功能表端口引腳復(fù)用功能p3.0txd(串行輸入口)p3.1rxd(串行輸出口)p3.2/int0(外部中斷0)p3.3/int1(外部中斷1)p3.4t0(記時(shí)器0外部輸入)p3.5t1(記時(shí)器1外部輸入)p3.6/wr(外部數(shù)據(jù)存儲器寫選通)p3.7/rd(外部數(shù)據(jù)存儲器讀選通)該口在設(shè)計(jì)中使用其特殊功能作為d/a,a/d讀寫信號的控制口。和a/d的中斷輸入口。rst:該引腳為復(fù)位信號輸入端,高電平

6、有效。在振蕩器穩(wěn)定工作情況下,該引腳被置成高電平并持續(xù)兩個(gè)機(jī)器周期以上是系統(tǒng)復(fù)位。ale/prog:當(dāng)訪問外部存儲器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。該引腳在設(shè)計(jì)中作為鎖存器器和a/d的時(shí)鐘信號。/psen:外部程序存儲器的選通信號。/ea/vpp:/ea為訪問芯片內(nèi)部和芯片外部程序存儲器的選擇信號。在flash編程期間,此引腳也用于施加12v編程電源(vpp)。xtal1:芯片內(nèi)振蕩器放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。xtal2:芯片內(nèi)振蕩器放大器的輸出。 2 鍵盤控制器mm74c92221 簡介鍵盤的作用是對單片機(jī)輸入數(shù)據(jù),

7、設(shè)計(jì)中要求能是電壓進(jìn)行“+”,“-”,及電壓值的設(shè)定,所以采用鍵盤為44的薄膜矩陣鍵盤,用mm74c922芯片進(jìn)行識別按鍵后送at89s51的并行口p1, p1.0p1.3作為鍵盤輸入口。傳統(tǒng)的44矩陣鍵盤識別處理程序的編寫相對煩瑣。所以采用mm74c922芯片來將44矩陣鍵盤的鍵值轉(zhuǎn)換成4位bcd碼以簡化程序的編寫。22 主要特性cmos工藝技術(shù)制造,工作電壓3-15v,“二鍵鎖定”功能,編碼輸出為三態(tài)輸出,可直接與微處理器數(shù)據(jù)總線相連,內(nèi)部振蕩器能完成44矩陣鍵盤掃描,亦可用外部振蕩器使鍵盤操作與其他處理同步,通過外接電容避免開關(guān)發(fā)生前、后沿彈跳所許的延時(shí)。有按鍵按下時(shí)數(shù)據(jù)有效線變高,同時(shí)

8、封鎖其他鍵,片內(nèi)鎖存器將保持鍵盤矩陣的4位編盤,可由微處理器讀出23 芯片引腳排列與名稱 dip封裝形式的mm74c922的芯片引腳排列與名稱如圖4所示。vcc:供電電壓(+5+15);gnd:接地; y1y2:矩陣鍵盤行輸入, 圖4 mm74c922芯片引腳排列與名稱其內(nèi)部接有上拉電阻; x1x2:矩陣鍵盤列輸入; out1out2:矩陣鍵盤列輸出;osc:振蕩器輸入;da:按鍵有效輸出,當(dāng)有任意鍵按下是da輸出高電平; /oe:輸出有效端,低電平有效。3 d/a轉(zhuǎn)換器dac0832331簡介設(shè)計(jì)要求電壓輸出范圍是0.0v9.9v,步進(jìn)0.1v,共有100種狀態(tài),因此采用8位的d/a轉(zhuǎn)換器就

9、能滿足設(shè)計(jì)要求。因此采用常用的dac0832芯片。8位字長的d/a轉(zhuǎn)換器dac0832具有256種狀態(tài),能滿足設(shè)計(jì)要求。dac0832芯片是具有兩個(gè)輸入數(shù)據(jù)寄存器的8位dac,它能直接與at89s51單片機(jī)相連接,32 主要特性1)8位分辨率;2)電流型輸出,穩(wěn)定時(shí)間為1us;3)可雙緩沖輸入,單緩沖輸入或直接數(shù)字輸入;4)單一電源供電(+5+15v);5 低功耗(20mw;)33 芯片引腳排列與名稱dip封裝形式的dac0832的芯片引腳排列與名稱如圖51所示。vcc:電源電壓,+5v。gnd:地線輸入端。 圖5 dac0832的芯片引腳排列與名稱d0d7:8位數(shù)字量輸入引腳。單片機(jī)由這8根

10、線傳送給d/a轉(zhuǎn)換數(shù)字量。d7為最高有效位,d0為最低有效位。vref:參考電壓端。/cs:片選信號,當(dāng)/cs為低電平時(shí)候,芯片被選中工作。ile:允許數(shù)字量輸入線。高電平有效。/xref:傳送控制輸入線,低電平有效。/wr1,/wr2:寫命令輸入線。ffb:運(yùn)算放大器反饋線。iout1,iout2:模擬電流輸出線,iout1+iout2為一常數(shù)。二硬件電路設(shè)計(jì)1.a/d轉(zhuǎn)換器adc080911 簡介adc0809是美國國家半導(dǎo)體公司生產(chǎn)的8位adc,它是采用逐次逼近的方法完成a/d轉(zhuǎn)換的。adc0809的內(nèi)部結(jié)構(gòu)框圖如圖 所示。adc0809由單一+5v電源供電,片內(nèi)有帶鎖存功能的8路模擬多

11、路開關(guān),可對8路05v的輸入模擬電壓信號分時(shí)進(jìn)行轉(zhuǎn)換,完成一次轉(zhuǎn)換約需100us;輸出具有ttl三臺鎖存緩沖器,可以直接接到單片機(jī)數(shù)據(jù)總線上。通過適當(dāng)?shù)耐饨与娐?,adc0809可對05v的雙級性模擬信號進(jìn)行轉(zhuǎn)換。12主要特性1)8路8位ad轉(zhuǎn)換器,即分辨率8位。 2)具有轉(zhuǎn)換起??刂贫?。 3)轉(zhuǎn)換時(shí)間為100s4)單5v電源供電 5)模擬輸入電壓范圍05v,不需零點(diǎn)和滿刻度校準(zhǔn)。 6)工作溫度范圍為-4085攝氏度 7)低功耗,約15mw。13 芯片引腳排列與名稱dip封裝形式的adc0809的芯片引腳排列與名稱如圖6所示各引腳功能說明如下:vcc:電源電壓,+5v。gnd:地線輸入端。d0d

12、7:8位數(shù)字量輸出引腳。a/d轉(zhuǎn)換結(jié)果由這8根線傳送給單片機(jī)。d7為最高有效位, 圖6 0809引腳圖排列與名稱d0為最低有效位。in0in7:8路模擬量輸入引腳。vref(+):參考電壓正端。vref(-):參考電壓負(fù)端。start:啟動信號輸入端,start為正脈沖,其上升沿清除adc0808的內(nèi)部的各寄存器,其下降沿啟動a/d開始轉(zhuǎn)換。ale:地址鎖存啟動信號,在ale的上升沿,將a、b、c上的通道地址鎖存到內(nèi)部的地址鎖存器。start和ale兩信號用于啟動a/d轉(zhuǎn)換。eoc:轉(zhuǎn)換完成信號,當(dāng)eoc上升為高電平時(shí),表明內(nèi)部a/d轉(zhuǎn)換已完成。oe:允許輸出信號。當(dāng)oe=1時(shí),即為高電平,允

13、許輸出鎖存器輸出數(shù)據(jù)。clk:時(shí)鐘輸入信號,0809的時(shí)鐘頻率范圍在101200khz,典型值為640khz。a、b、c:3位地址輸入線,經(jīng)過譯碼后可選通in0in78個(gè)通道中的一個(gè)通道進(jìn)行轉(zhuǎn)換。a、b、c的輸入與選通的通道的關(guān)系如表2所示:表2被選通的通道c b a被選通的通道c b ain00 0 0in41 0 0in10 0 1in51 0 1in20 1 0in61 1 0in30 1 1in71 1 12 顯示器設(shè)計(jì)要求能顯示當(dāng)前電壓值,因此可采用液晶顯示或者數(shù)碼管顯示兩種方法??紤]到數(shù)碼管顯示過于單調(diào),因此采用采用液晶顯示。液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富等特點(diǎn),現(xiàn)在

14、點(diǎn)陣型液晶顯示模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中常用的信息顯示器件了。21 簡介本設(shè)計(jì)中采用了1602c型點(diǎn)陣式液晶顯示模塊。lcd技術(shù)和半導(dǎo)體技術(shù)的結(jié)合使該顯示模塊具有高可靠性和低功耗的特點(diǎn)。1602c型點(diǎn)陣式液晶顯示模塊內(nèi)部有字符產(chǎn)生存儲器和數(shù)據(jù)存儲器。該顯示模塊可直接與at89s51單片機(jī)相接,所有的顯示功能由控制器用指令實(shí)現(xiàn)。由單一的+5v的電源供電,數(shù)據(jù)傳送方式有4位和8位兩種選擇。內(nèi)有顯示92個(gè)ascii字符和92個(gè)特殊字符的字庫。22 引腳排列與名稱1602c引腳排列與名稱如圖7所示。gnd:電源地;vcc:電源正極,4.55.5v,通常使用5v電壓;vo:lcd對比度調(diào)節(jié)端,電壓調(diào)節(jié)范

15、圍為05v;rs:寫入數(shù)據(jù)或者指令選擇端。要寫入指令時(shí),使rs為低電平;要寫入數(shù)據(jù)時(shí),使rs為高電平; r/w:讀寫控制端。r/w為高電平時(shí),讀取數(shù)據(jù);r/w為低電平時(shí),寫入數(shù)據(jù); e:lcd模塊使能信號控制端。寫數(shù)據(jù)時(shí), 圖7 1602c引腳排列與名稱需要下降沿觸發(fā);。db0db7:8位數(shù)據(jù)總線,三態(tài)雙向。如果i/o口資源緊張的話,該模塊也可以只使用4位數(shù)據(jù)線db4db7接口傳送數(shù)據(jù)。a: led背光正極。需要背光時(shí),a串接一個(gè)限流電阻接vdd,k接地,實(shí)測該模塊的背光電流為50ma左右;k: led背光地端31 mm74c922接口電路設(shè)計(jì)中mm74c922的輸出口與p1口的低四位相接,d

16、a端通過反向器與p32相接。每當(dāng)有按鍵按下時(shí),da就產(chǎn)生高電平,同時(shí)向p1口低四位傳送16進(jìn)制的bcd碼,分別對應(yīng)16個(gè)按鍵。mm74c922與鍵盤及at89s51的接線圖見圖9圖9 mm74c922接口電路32 dac0832接口電路dac0832 最具特色是輸入為雙緩沖結(jié)構(gòu),數(shù)字信號在進(jìn)入d/a 轉(zhuǎn)換前,需經(jīng)過兩個(gè)獨(dú)立控制的8 位鎖存器傳送。其優(yōu)點(diǎn)是d/a 轉(zhuǎn)換的同時(shí),dac 寄存器中保留現(xiàn)有的數(shù)據(jù),而在輸入寄存器中可送入新的數(shù)據(jù)。系統(tǒng)中多個(gè)d/a 轉(zhuǎn)換器內(nèi)容可用一公共的選通信號選通輸出。設(shè)計(jì)中用2個(gè)電壓控制字代表0.1v當(dāng)電壓控制字從0,2,4,到198時(shí),可調(diào)穩(wěn)壓源輸出0.0,0.1,

17、9.9。由于dac0832是電流輸出型,輸出的電流隨輸入的電壓控制字線性變化。若要得到電壓,還需要外接一片運(yùn)放來實(shí)現(xiàn)電流到電壓的轉(zhuǎn)換。由于dac0832 輸出級沒有加集成運(yùn)放,所以需外加lm324 相配適用??紤]到設(shè)計(jì)需要,采用了單緩沖雙級性的接法,如圖10所示:圖10 dac0832接口電路其計(jì)算公式為:其中vref為參考電壓,d為dac0832接收到的數(shù)據(jù)。5為dac0832基準(zhǔn)電壓。如果圖中所示電阻rx,ry,rz的阻值選取適當(dāng),則輸出電壓范圍在電壓控制字從0,2,4,到198變換時(shí)根據(jù)上式計(jì)算可得輸出電壓為+4.9v-5v,正好滿足后續(xù)電路的要求。其中p2.7為dac0832的片選控制

18、端。33 adc0809接口電路由于輸出電壓范圍是0.0v9.9v超出了adc0809的測量范圍,因此使用電位器將輸出電壓分壓后送至adc0809的輸入端。adc0809與at89s51的接口電路如圖11所示圖11 adc0809接口電路其中p2.6為0809的片選信號,與wr和rd分別通過或非門接到0809的start和oe上,eoc通過非門與at89s51的int0相接。由于0809需要時(shí)鐘信號,因此可以從at89s51的ale端得到6分頻的振蕩信號,為了使6分頻后的信號能滿足0809的需求,我們采用的是4m的晶體振蕩器。34 lcd1602c接口電路lcd1602c與at89s51的接口

19、電路如圖12所示圖12 lcd顯示電路3.5 可調(diào)穩(wěn)壓源電路為了獲得大的負(fù)載電流,可調(diào)穩(wěn)壓部分使用了最大輸出電流為1a 的7805三端集成穩(wěn)壓塊。7805原本是輸出固定電壓為5v的集成穩(wěn)壓塊,但可以外接電路來改變輸出電壓值。可調(diào)穩(wěn)壓的電路見圖13:設(shè)運(yùn)放理想。這時(shí),可認(rèn)為運(yùn)放輸入電壓很小。即: 圖13 可調(diào)穩(wěn)壓電路 其中vin為d/a部分輸出的雙級性電壓,5為7805的穩(wěn)壓值。由上式可見,vout與vin之間成線形關(guān)系,當(dāng)vin變化時(shí),輸出電壓改變。由于vin是dac0832輸出的范圍是+4.9v-5v的電壓,因而vout的變化可以從0.0v9.9v。經(jīng)實(shí)驗(yàn)證明:這種可調(diào)穩(wěn)壓輸出具有良好的負(fù)載

20、特性,輸出最大負(fù)載電流可達(dá)到1a。電壓輸出端接上500ma負(fù)載與未接負(fù)載(空載)之間輸出電壓僅相差0.04v以內(nèi)。由于。3.6流穩(wěn)壓電路本設(shè)計(jì)共用到電源有三種:即15v,+5v ??蛇x用的有開關(guān)電源和穩(wěn)壓電源兩種,由于開關(guān)電源的紋波系數(shù)比較大,且設(shè)計(jì)要求電壓紋波不大于10mv 。因此采用常用的穩(wěn)壓電源來作為整個(gè)系統(tǒng)的電源。穩(wěn)壓電源由電源變壓器、整流電路、濾波電路和穩(wěn)壓電路組成,如圖14所示 圖14 電源方框及波形圖整流和濾波電路:整流作用是將交流電壓u2變換成脈動電壓u3。濾波電路一般由電容組成,其作用是脈動電壓u3中的大部分紋波加以濾除,以得到較平滑的直流電壓u4。再通過穩(wěn)壓電路得到平直的直

21、流電壓u5。電源變壓器采用了雙17.2v的變壓器,輸入220v,50hz交流電,經(jīng)全橋整流,濾波,穩(wěn)壓后得到15v和+5v三種輸出,+5v部分供單片機(jī)及d/a,a/d,顯示等部分使用,電流最大約400ma;+15v和-15v部分供運(yùn)放使用,最大電流不超過50ma。電路如圖15所示:圖15 電源部分原理圖圖中繼電器部分是一個(gè)開關(guān)電路及短路保護(hù)電路。當(dāng)系統(tǒng)接到220v交流電后經(jīng)變壓器降壓,整流橋整流后接到k1,此時(shí)由于u1(7815)沒有輸入,所以k1沒有供電,整個(gè)后續(xù)系統(tǒng)處于關(guān)閉狀態(tài),當(dāng)按下sw_on鍵時(shí)u1得到輸入,產(chǎn)生+15v的輸出,同時(shí)k1得電吸合,形成自鎖狀態(tài),同時(shí)79l15也得電輸出-

22、15v電壓。松開sw_on鍵后由于k1處于自鎖狀態(tài),整個(gè)系統(tǒng)處于開啟狀態(tài)。當(dāng)按下sw_off鍵時(shí),k1被短路,從而斷開電源達(dá)到關(guān)機(jī)的目的。同樣,在任一時(shí)刻如果產(chǎn)生短路,則k1也會斷開達(dá)到短路保護(hù)的目的。+5v部分的供電電流在400ma左右,因此采用了最大輸出電流為1a 的7805三端穩(wěn)壓集成電路,由于功耗大,負(fù)載重,加裝了散熱片。而+15v和-15v部分最大電流不超過50ma。在設(shè)計(jì)過程中發(fā)現(xiàn)中兩片7805的均使用了散熱片且溫度偏高,因此加裝了風(fēng)扇,使用+15v電源,將78l15該為7815后可滿足風(fēng)扇需求。這樣在保證性能的同時(shí)也降低了成本。三程序設(shè)計(jì)1主控程序圖16為系統(tǒng)主控程序。開始系統(tǒng)初

23、始化d/a子程序鍵盤處理子程序a/d子程序有鍵按下?顯示子程序是否圖16 系統(tǒng)主控程序框圖2 d/a子程序圖17為d/a子程序框圖。開始將顯示值轉(zhuǎn)換成對應(yīng)的數(shù)字量數(shù)字量送d/a返回1圖17 d/a子程序框圖可以看出,d/a子程序的作用是將設(shè)定的數(shù)字量通過變換送給d/a。3 a/d子程序開始返回將輸出電壓轉(zhuǎn)換成數(shù)字量與送d/a數(shù)字量相比較是否相等?將送d/a數(shù)字量減01h相等不等大于送d/a數(shù)字量?是否將送d/a數(shù)字量加01h1圖18 a/d子程序框圖由a/d子程序框圖看出,修改精度為一個(gè)數(shù)字量,由于a/d和d/a的精度限制,修改量只能達(dá)到0.05v,但足已滿足設(shè)計(jì)需要。4 鍵盤子程序圖19為鍵

24、盤子程序框圖。開始判斷按鍵+-設(shè) 置其 它步進(jìn),步減子程序設(shè) 置子程序返回圖19 鍵盤子程序框圖框圖41 步進(jìn)步減子程序開始d/a數(shù)字量加02h為“+”?1否是d/a數(shù)字量加02h返回是否為9.9v否是否為0.0v否保持不變?yōu)椤?”?是是是圖20 步進(jìn),步減子程序框圖 由步進(jìn),步減子程序框圖可以看出,如果每次把d/a的數(shù)字量加01h,可以使步進(jìn)量和步減量由0.1v變?yōu)?.05v。如果采用更高位的d/a轉(zhuǎn)換器??梢允共竭M(jìn)量和步減量進(jìn)一步的減小,以滿足更高的要求。42 設(shè)置子程序開始返回?cái)?shù)字鍵?顯示please setvoltage v判斷按鍵顯示please set voltage x v否判斷

25、按鍵是顯示please set voltage x. v是取消鍵?顯示 set cancle voltage a.b v(ab為設(shè)置前電壓值)是否判斷按鍵“。”鍵?否取消鍵?是22否3數(shù)字鍵?否取消鍵?是否3判斷按鍵顯示please set voltage x.y v是4確認(rèn)鍵?否取消鍵?否是4顯示set complate voltage x.y v是圖21 設(shè)置子程序框圖由設(shè)置子程序可以看出,進(jìn)入設(shè)置子程序后就屏蔽了“+”,“-”和設(shè)置鍵。然后逐步判斷按鍵,執(zhí)行相應(yīng)程序。5 設(shè)計(jì)總結(jié)六附件a、程 序 實(shí) 現(xiàn)單片機(jī)系統(tǒng)初始化和存儲器分配程序$nomod51;-; this file is pa

26、rt of the c51 compiler package /這個(gè)文件是c51 鏈接的數(shù)據(jù);-; startup.a51: this code is executed after processor reset. 這個(gè)代碼在程序重啟之后執(zhí)行; to translate this file use a51 with the following invocation:; a51 startup.a51; to link the modified startup.obj file to your application use the following; bl51 invocation:; bl

27、51 , startup.obj ;-; user-defined power-on initialization of memory; with the following equ statements the initialization of memory; at processor reset can be defined:; ; the absolute start-address of idata memory is always 0idatalen equ 80h ; the length of idata memory in bytes. idata存儲的字節(jié)長度;xdatas

28、tart equ 0h ; the absolute start-address of xdata memory xdata 存儲的實(shí)際起始地址xdatalen equ 0h ; the length of xdata memory in bytes.;pdatastart equ 0h ; the absolute start-address of pdata memorypdatalen equ 0h ; the length of pdata memory in bytes.; notes: the idata space overlaps physically the data and

29、 bit areas of the; 8051 cpu. at minimum the memory space occupied from the c51 ; run-time routines must be set to zero. ;-; reentrant stack initilization; the following equ statements define the stack pointer for reentrant; functions and initialized it:; stack space for reentrant functions in the sm

30、all model.ibpstack equ 0 ; set to 1 if small reentrant is used.ibpstacktop equ 0ffh+1 ; set top of stack to highest location+1.; stack space for reentrant functions in the large model. xbpstack equ 0 ; set to 1 if large reentrant is used.xbpstacktop equ 0ffffh+1; set top of stack to highest location

31、+1.; stack space for reentrant functions in the compact model. pbpstack equ 0 ; set to 1 if compact reentrant is used.pbpstacktop equ 0ffffh+1; set top of stack to highest location+1.;-; page definition for using the compact model with 64 kbyte xdata ram; the following equ statements define the xdat

32、a page used for pdata; variables. the equ ppage must conform with the ppage control used; in the linker invocation.;ppageenable equ 0 ; set to 1 if pdata object are used.;ppage equ 0 ; define ppage number. ;ppage_sfr data 0a0h ; sfr that supplies uppermost address byte; (most 8051 variants use p2 as

33、 uppermost address byte);-; standard sfr symbols acc data 0e0hb data 0f0hsp data 81hdpl data 82hdph data 83h name c_startupc_c51startup segment codestack segment idata rseg stack ds 1 extrn code (?c_start) public c_startup cseg at 0?c_startup: ljmp startup1 rseg c_c51startupstartup1:if idatalen 0 mo

34、v r0,#idatalen - 1 clr aidataloop: mov r0,a djnz r0,idataloopendifif xdatalen 0 mov dptr,#xdatastart mov r7,#low (xdatalen) if (low (xdatalen) 0 mov r6,#(high (xdatalen) +1 else mov r6,#high (xdatalen) endif clr axdataloop: movx dptr,a inc dptr djnz r7,xdataloop djnz r6,xdataloopendifif ppageenable

35、0 mov ppage_sfr,#ppageendifif pdatalen 0 mov r0,#low (pdatastart) mov r7,#low (pdatalen) clr apdataloop: movx r0,a inc r0 djnz r7,pdataloopendifif ibpstack 0extrn data (?c_ibp) mov c_ibp,#low ibpstacktopendifif xbpstack 0extrn data (?c_xbp) mov c_xbp,#high xbpstacktop mov c_xbp+1,#low xbpstacktopend

36、ifif pbpstack 0extrn data (c_pbp) mov c_pbp,#low pbpstacktopendif mov sp,#stack-1; this code is required if you use l51_bank.a51 with banking mode 4; extrn code (b_switch0); call b_switch0 ; init bank mechanism to code bank 0 ljmp c_start end鍵盤掃描程序#include#define uchar unsigned char#define uint unsi

37、gned intsbit key1=p10;sbit key2=p11;void delay(uint z); uchar keyscan() / 鍵盤掃描程序 uchar temp,num; num=17; p1=0xfe; / p1.0口置0 temp=p1; temp=temp&0xf0; while(temp!=0xf0) delay(20); temp=p1; temp=temp&0xf0; if(temp!=0xf0) /delay(10); /延遲去抖 p1=p1&0xf0; while(p1!=0xf0); switch(temp) case 0xe0:num=7;break;

38、 /0xf0和0xe0的交處,即p1.0與p1.4的交處 case 0xd0:num=8;break; / p1.0與p1.5的交處, case 0xb0:num=9;break; case 0x70:num=15;break; default:break; else break; p1=0xfd; temp=p1; temp=temp&0xf0; while(temp!=0xf0) delay(20); temp=p1; temp=temp&0xf0; if(temp!=0xf0) /delay(10);p1=p1&0xf0;while(p1!=0xf0); switch(temp) cas

39、e 0xe0:num=4;break; case 0xd0:num=5;break; case 0xb0:num=6;break; case 0x70:num=14;break; default:break; else break; p1=0xfb; temp=p1; temp=temp&0xf0; while(temp!=0xf0) delay(20); temp=p1; temp=temp&0xf0; if(temp!=0xf0) /delay(10); p1=p1&0xf0;while(p1!=0xf0); switch(temp) case 0xe0:num=1;break; case

40、 0xd0:num=2;break; case 0xb0:num=3;break; case 0x70:num=13;break; default:break; else break; p1=0xf7; temp=p1; temp=temp&0xf0; while(temp!=0xf0) delay(20); temp=p1; temp=temp&0xf0; if(temp!=0xf0) /delay(10); p1=p1&0xf0;while(p1!=0xf0); switch(temp) case 0xe0:num=10;break; case 0xd0:num=0;break; case

41、 0xb0:num=11;break; case 0x70:num=12;break; default:break; else break; return num;主程序 #include#include#include#include#includekeyscan.h#define uchar unsigned char#define uint unsigned int#define dac0832 xbyte0x7fff /p2.7作片選,啟動da轉(zhuǎn)換#define int0 xbyte0x7ff8 /結(jié)束ad轉(zhuǎn)換,鎖存通道0,讀出ad值uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論