2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩27頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  直流數(shù)控電壓源設(shè)計(jì)</b></p><p>  一.系統(tǒng)硬件設(shè)計(jì)結(jié)構(gòu)框圖</p><p>  本數(shù)控直流穩(wěn)壓電源的設(shè)計(jì)以一穩(wěn)壓電源為基礎(chǔ),以高性能單片機(jī)系統(tǒng)為控制核心,以穩(wěn)壓驅(qū)動(dòng)放大電路、短路保護(hù)電路為外圍的硬件系統(tǒng),在檢測(cè)與控制軟件的支持下實(shí)現(xiàn)對(duì)電壓輸出的數(shù)字控制,通過(guò)對(duì)穩(wěn)壓電源輸出的電壓進(jìn)行數(shù)據(jù)采樣與給定數(shù)據(jù)比較,從而調(diào)整和控制穩(wěn)壓電

2、源的工作狀態(tài)及監(jiān)測(cè)開(kāi)關(guān)電路的輸出電流大小。本數(shù)控直流穩(wěn)壓電源實(shí)現(xiàn)以下功能:鍵盤(pán)可以直接設(shè)定輸出電壓值;可快速調(diào)整電壓;LCD顯示電壓值等。</p><p>  1.1 8051簡(jiǎn)介</p><p>  我們采用8051系列的AT89S51作為CPU,AT89S51是一種帶4K字節(jié)FLASH可編程可擦除只讀存儲(chǔ)器(FPEROM—Flash Programmable and Erasable

3、Read Only Memory)的低電壓,高性能CMOS8位微處理器。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。</p><p><b>  1.2 主要特性</b></p><p>  1)與MCS-51兼容 ;</p><p>  2)8位字長(zhǎng)的CPU;</p>&l

4、t;p>  3)可在線ISP編程的4KB片內(nèi)FLASH存儲(chǔ)器,用于程序存儲(chǔ),可擦寫(xiě)1000次;</p><p>  4) 256B的片內(nèi)數(shù)據(jù)存儲(chǔ)器,其中高128字節(jié)地址被特殊功能寄存器SFR占用;</p><p>  5)可編程的32根I/O口線(P0~P3);</p><p>  6)2個(gè)可編程16位定時(shí)器;</p><p>  7)

5、一個(gè)數(shù)據(jù)指針DPTR;</p><p>  8)1個(gè)可編程的全雙工串行通信口;</p><p>  9)具有“空閑”和“掉電”兩種低功耗工作方式;</p><p>  10)可編程的3級(jí)程序鎖定位;</p><p>  11)工作電源的電壓為5(1±0.2)V;</p><p>  12)振蕩器最高頻率為24

6、MHz;</p><p>  13)編程頻率3 ~24 MHz,編程電流1mA,編程電壓為5V。</p><p>  1.3芯片引腳排列與名稱</p><p>  DIP封裝形式的AT89S51的芯片引腳排列與名稱如圖1所示。</p><p><b>  VCC:供電電壓。</b></p><p>

7、;<b>  GND:接地。</b></p><p>  P0口:P0口為一個(gè)8位,并行, 圖1 AT89S51的芯片引腳排列與名稱</p><p>  漏極開(kāi)路雙向I/O口,作為輸出時(shí)可驅(qū)動(dòng)8個(gè)TTL負(fù)載。該口內(nèi)無(wú)上拉電阻,在設(shè)計(jì)中作為D/A,A/D及液晶顯示器的數(shù)據(jù)口。</p><p>  P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙

8、向I/O口,P1口緩沖器能接收輸出4個(gè)TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,該口在設(shè)計(jì)中低四位作為鍵盤(pán)輸入口,高四位與RST作為在線編程下載口。</p><p>  P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收/輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,可作為輸入。在作為輸出時(shí),P2口的管腳被外部拉低,將輸出電流。該口在設(shè)計(jì)中作為D/A

9、,A/D及液晶顯示器的控制口。</p><p>  P3口:P3口管腳是帶內(nèi)部上拉電阻的8位雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流,這是由于上拉的緣故。P3口也可作為AT89S51的一些特殊功能口,如下表1所示:</p><p>  表1 各端口引腳與復(fù)用功能表</p>

10、<p>  該口在設(shè)計(jì)中使用其特殊功能作為D/A,A/D讀寫(xiě)信號(hào)的控制口。和A/D的中斷輸入口。</p><p>  RST:該引腳為復(fù)位信號(hào)輸入端,高電平有效。在振蕩器穩(wěn)定工作情況下,該引腳被置成高電平并持續(xù)兩個(gè)機(jī)器周期以上是系統(tǒng)復(fù)位。</p><p>  ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸

11、入編程脈沖。該引腳在設(shè)計(jì)中作為鎖存器器和A/D的時(shí)鐘信號(hào)。</p><p>  /PSEN:外部程序存儲(chǔ)器的選通信號(hào)。</p><p>  /EA/VPP:/EA為訪問(wèn)芯片內(nèi)部和芯片外部程序存儲(chǔ)器的選擇信號(hào)。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  XTAL1:芯片內(nèi)振蕩器放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p

12、><p>  XTAL2:芯片內(nèi)振蕩器放大器的輸出。 </p><p>  2 鍵盤(pán)控制器MM74C922</p><p><b>  2.1 簡(jiǎn)介</b></p><p>  鍵盤(pán)的作用是對(duì)單片機(jī)輸入數(shù)據(jù),設(shè)計(jì)中要求能是電壓進(jìn)行“+”,“-”,及電壓值的設(shè)定,所以采用鍵盤(pán)為4×4的薄膜矩陣鍵盤(pán),用MM74C922

13、芯片進(jìn)行識(shí)別按鍵后送AT89S51的并行口P1, P1.0~P1.3作為鍵盤(pán)輸入口。傳統(tǒng)的4×4矩陣鍵盤(pán)識(shí)別處理程序的編寫(xiě)相對(duì)煩瑣。所以采用MM74C922芯片來(lái)將4×4矩陣鍵盤(pán)的鍵值轉(zhuǎn)換成4位BCD碼以簡(jiǎn)化程序的編寫(xiě)。</p><p><b>  2.2 主要特性</b></p><p>  CMOS工藝技術(shù)制造,工作電壓3-15V,“二鍵鎖定”

14、功能,編碼輸出為三態(tài)輸出,可直接與微處理器數(shù)據(jù)總線相連,內(nèi)部振蕩器能完成4×4矩陣鍵盤(pán)掃描,亦可用外部振蕩器使鍵盤(pán)操作與其他處理同步,通過(guò)外接電容避免開(kāi)關(guān)發(fā)生前、后沿彈跳所許的延時(shí)。有按鍵按下時(shí)數(shù)據(jù)有效線變高,同時(shí)封鎖其他鍵,片內(nèi)鎖存器將保持鍵盤(pán)矩陣的4位編盤(pán),可由微處理器讀出</p><p>  2.3 芯片引腳排列與名稱</p><p>  DIP封裝形式的MM74C922的

15、芯片引腳排列與名稱如圖4所示。</p><p>  VCC:供電電壓(+5~+15);</p><p><b>  GND:接地;</b></p><p>  Y1~Y2:矩陣鍵盤(pán)行輸入, 圖4 MM74C922芯片引腳排列與名稱</p><p>  其內(nèi)部接有上拉電阻;</p><p>

16、;  X1~X2:矩陣鍵盤(pán)列輸入;</p><p>  OUT1~OUT2:矩陣鍵盤(pán)列輸出;</p><p>  OSC:振蕩器輸入;</p><p>  DA:按鍵有效輸出,當(dāng)有任意鍵按下是DA輸出高電平;</p><p>  /OE:輸出有效端,低電平有效。</p><p>  3 D/A轉(zhuǎn)換器DAC0832<

17、;/p><p><b>  3.3.1簡(jiǎn)介</b></p><p>  設(shè)計(jì)要求電壓輸出范圍是0.0V~9.9V,步進(jìn)0.1V,共有100種狀態(tài),因此采用8位的D/A轉(zhuǎn)換器就能滿足設(shè)計(jì)要求。因此采用常用的DAC0832芯片。8位字長(zhǎng)的D/A轉(zhuǎn)換器DAC0832具有256種狀態(tài),能滿足設(shè)計(jì)要求。DAC0832芯片是具有兩個(gè)輸入數(shù)據(jù)寄存器的8位DAC,它能直接與AT89S51

18、單片機(jī)相連接,</p><p><b>  3.2 主要特性</b></p><p><b>  1)8位分辨率;</b></p><p>  2)電流型輸出,穩(wěn)定時(shí)間為1uS;</p><p>  3)可雙緩沖輸入,單緩沖輸入或直接數(shù)字輸入;</p><p>  4)單一電

19、源供電(+5~+15V);</p><p>  5 低功耗(20mW;)</p><p>  3.3 芯片引腳排列與名稱</p><p>  DIP封裝形式的DAC0832的芯片引腳排列與名稱如圖51所示。</p><p>  VCC:電源電壓,+5V。</p><p>  GND:地線輸入端。

20、 圖5 DAC0832的芯片引腳排列與名稱</p><p>  D0~D7:8位數(shù)字量輸入引腳。單片機(jī)由這8根線傳送給D/A轉(zhuǎn)換數(shù)字量。D7為最高有效位,D0為最低有效位。</p><p>  Vref:參考電壓端。</p><p>  /CS:片選信號(hào),當(dāng)/CS為低電平時(shí)候,芯片被選中工作。</p><p>  ILE:允許數(shù)字量輸

21、入線。高電平有效。</p><p>  /XREF:傳送控制輸入線,低電平有效。</p><p>  /WR1,/WR2:寫(xiě)命令輸入線。</p><p>  Ffb:運(yùn)算放大器反饋線。</p><p>  Iout1,Iout2:模擬電流輸出線,Iout1+Iout2為一常數(shù)。</p><p><b>  二

22、.硬件電路設(shè)計(jì)</b></p><p>  1.A/D轉(zhuǎn)換器ADC0809</p><p><b>  1.1 簡(jiǎn)介</b></p><p>  ADC0809是美國(guó)國(guó)家半導(dǎo)體公司生產(chǎn)的8位ADC,它是采用逐次逼近的方法完成A/D轉(zhuǎn)換的。ADC0809的內(nèi)部結(jié)構(gòu)框圖如圖 所示。ADC0809由單一+5V電源供電,片內(nèi)有帶鎖存功能的

23、8路模擬多路開(kāi)關(guān),,可對(duì)8路0~5V的輸入模擬電壓信號(hào)分時(shí)進(jìn)行轉(zhuǎn)換,完成一次轉(zhuǎn)換約需100us;輸出具有TTL三臺(tái)鎖存緩沖器,可以直接接到單片機(jī)數(shù)據(jù)總線上。通過(guò)適當(dāng)?shù)耐饨与娐?,ADC0809可對(duì)0~5V的雙級(jí)性模擬信號(hào)進(jìn)行轉(zhuǎn)換。</p><p>  1.2主要特性  1)8路8位A/D轉(zhuǎn)換器,即分辨率8位。   2)具有轉(zhuǎn)換起??刂贫?。   3)轉(zhuǎn)換時(shí)間為100μs  4)單+5V電源供電   5)模擬

24、輸入電壓范圍0~+5V,不需零點(diǎn)和滿刻度校準(zhǔn)。   6)工作溫度范圍為-40~+85攝氏度   7)低功耗,約15mW。</p><p>  1.3 芯片引腳排列與名稱</p><p>  DIP封裝形式的ADC0809的芯片引腳排列與名稱如圖6所示</p><p>  各引腳功能說(shuō)明如下:</p><p>  VCC:電源電壓,+5V。

25、</p><p>  GND:地線輸入端。</p><p>  D0~D7:8位數(shù)字量輸出引腳。A/D轉(zhuǎn)換結(jié)</p><p>  果由這8根線傳送給單片機(jī)。D7為最高有效位, 圖6 0809引腳圖排列與名稱</p><p><b>  D0為最低有效位。</b></p><p>  IN0~

26、IN7:8路模擬量輸入引腳。</p><p>  Vref(+):參考電壓正端。。</p><p>  Vref(-):參考電壓負(fù)端。</p><p>  START:啟動(dòng)信號(hào)輸入端,START為正脈沖,其上升沿清除ADC0808的內(nèi)部的各寄存器,其下降沿啟動(dòng)A/D開(kāi)始轉(zhuǎn)換。</p><p>  ALE:地址鎖存啟動(dòng)信號(hào),在ALE的上升沿,將

27、A、B、C上的通道地址鎖存到內(nèi)部的地址鎖存器。START和ALE兩信號(hào)用于啟動(dòng)A/D轉(zhuǎn)換。</p><p>  EOC:轉(zhuǎn)換完成信號(hào),當(dāng)EOC上升為高電平時(shí),表明內(nèi)部A/D轉(zhuǎn)換已完成。</p><p>  OE:允許輸出信號(hào)。當(dāng)OE=1時(shí),即為高電平,允許輸出鎖存器輸出數(shù)據(jù)。</p><p>  CLK:時(shí)鐘輸入信號(hào),0809的時(shí)鐘頻率范圍在10~1200kHz,典

28、型值為640kHz。</p><p>  A、B、C:3位地址輸入線,經(jīng)過(guò)譯碼后可選通IN0~I(xiàn)N78個(gè)通道中的一個(gè)通道進(jìn)行轉(zhuǎn)換。A、B、C的輸入與選通的通道的關(guān)系如表2所示:</p><p><b>  表2</b></p><p><b>  2 顯示器</b></p><p>  設(shè)計(jì)要求能顯

29、示當(dāng)前電壓值,因此可采用液晶顯示或者數(shù)碼管顯示兩種方法??紤]到數(shù)碼管顯示過(guò)于單調(diào),因此采用采用液晶顯示。液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富等特點(diǎn),現(xiàn)在點(diǎn)陣型液晶顯示模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中常用的信息顯示器件了。</p><p><b>  2.1 簡(jiǎn)介</b></p><p>  本設(shè)計(jì)中采用了1602C型點(diǎn)陣式液晶顯示模塊。LCD技術(shù)和半導(dǎo)體技術(shù)的結(jié)合使

30、該顯示模塊具有高可靠性和低功耗的特點(diǎn)。1602C型點(diǎn)陣式液晶顯示模塊內(nèi)部有字符產(chǎn)生存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。該顯示模塊可直接與AT89s51單片機(jī)相接,所有的顯示功能由控制器用指令實(shí)現(xiàn)。由單一的+5V的電源供電,數(shù)據(jù)傳送方式有4位和8位兩種選擇。內(nèi)有顯示92個(gè)ASCII字符和92個(gè)特殊字符的字庫(kù)。</p><p>  2.2 引腳排列與名稱</p><p>  1602C引腳排列與名稱如圖7所示

31、。</p><p><b>  GND:電源地;</b></p><p>  VCC:電源正極,4.5-5.5V,通常使用5V電壓;</p><p>  VO:LCD對(duì)比度調(diào)節(jié)端,電壓調(diào)節(jié)范圍為0-5V;</p><p>  RS:寫(xiě)入數(shù)據(jù)或者指令選擇端。要寫(xiě)入指令時(shí),</p><p>  使RS

32、為低電平;要寫(xiě)入數(shù)據(jù)時(shí),使RS為高電平; </p><p>  R/W:讀寫(xiě)控制端。R/W為高電平時(shí),讀取數(shù)據(jù);R/W為低電平時(shí),寫(xiě)入數(shù)據(jù); </p><p>  E:LCD模塊使能信號(hào)控制端。寫(xiě)數(shù)據(jù)時(shí), 圖7 1602C引腳排列與名稱</p><p><b>  需要下降沿觸發(fā);。</b></p><p>  D

33、B0-DB7:8位數(shù)據(jù)總線,三態(tài)雙向。如果I/O口資源緊張的話,該模塊也可以只使用4位數(shù)據(jù)線DB4-DB7接口傳送數(shù)據(jù)。</p><p>  A: LED背光正極。需要背光時(shí),A串接一個(gè)限流電阻接VDD,K接地,實(shí)測(cè)該模塊的背光電流為50mA左右;</p><p>  K: LED背光地端</p><p>  3.1 MM74C922接口電路</p>

34、<p>  設(shè)計(jì)中MM74C922的輸出口與P1口的低四位相接,DA端通過(guò)反向器與P3.2相接。每當(dāng)有按鍵按下時(shí),DA就產(chǎn)生高電平,同時(shí)向P1口低四位傳送16進(jìn)制的BCD碼,分別對(duì)應(yīng)16個(gè)按鍵。</p><p>  MM74C922與鍵盤(pán)及AT89S51的接線圖見(jiàn)圖9</p><p>  圖9 MM74C922接口電路</p><p>  3.2 DAC0

35、832接口電路</p><p>  DAC0832 最具特色是輸入為雙緩沖結(jié)構(gòu),數(shù)字信號(hào)在進(jìn)入D/A 轉(zhuǎn)換前,需經(jīng)過(guò)兩個(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)容可用一公共的選通信號(hào)選通輸出。</p><p>  設(shè)計(jì)中用2個(gè)電壓控制字代表0.1V當(dāng)電壓控制字從0,2,4,……到198

36、時(shí),可調(diào)穩(wěn)壓源輸出0.0,0.1,……,9.9。由于DAC0832是電流輸出型,輸出的電流隨輸入的電壓控制字線性變化。若要得到電壓,還需要外接一片運(yùn)放來(lái)實(shí)現(xiàn)電流到電壓的轉(zhuǎn)換。由于DAC0832 輸出級(jí)沒(méi)有加集成運(yùn)放,所以需外加LM324 相配適用??紤]到設(shè)計(jì)需要,采用了單緩沖雙級(jí)性的接法,如圖10所示:</p><p>  圖10 DAC0832接口電路</p><p><b>

37、;  其計(jì)算公式為:</b></p><p>  其中Vref為參考電壓,D為DAC0832接收到的數(shù)據(jù)。5為DAC0832基準(zhǔn)電壓。</p><p>  如果圖中所示電阻RX,RY,RZ的阻值選取適當(dāng),則輸出電壓范圍在電壓控制字從0,2,4,……到198變換時(shí)根據(jù)上式計(jì)算可得輸出電壓為+4.9V~-5V,正好滿足后續(xù)電路的要求。其中P2.7為DAC0832的片選控制端。<

38、;/p><p>  3.3 ADC0809接口電路</p><p>  由于輸出電壓范圍是0.0V~9.9V超出了ADC0809的測(cè)量范圍,因此使用電位器將輸出電壓分壓后送至ADC0809的輸入端。</p><p>  ADC0809與AT89S51的接口電路如圖11所示</p><p>  圖11 ADC0809接口電路</p>

39、<p>  其中P2.6為0809的片選信號(hào),與WR和RD分別通過(guò)或非門(mén)接到0809的START和OE上,EOC通過(guò)非門(mén)與AT89S51的INT0相接。由于0809需要時(shí)鐘信號(hào),因此可以從AT89S51的ALE端得到6分頻的振蕩信號(hào),為了使6分頻后的信號(hào)能滿足0809的需求,我們采用的是4M的晶體振蕩器。</p><p>  3.4 LCD1602C接口電路</p><p>  

40、LCD1602C與AT89S51的接口電路如圖12所示</p><p>  圖12 LCD顯示電路</p><p>  3.5 可調(diào)穩(wěn)壓源電路</p><p>  為了獲得大的負(fù)載電流,可調(diào)穩(wěn)壓部分使用了最大輸出電流為1A 的7805三端集成穩(wěn)壓塊。7805原本是輸出固定電壓為5V的集成穩(wěn)壓塊,但可以外接電路來(lái)改變輸出電壓值??烧{(diào)穩(wěn)壓的電路見(jiàn)圖13:</p&g

41、t;<p>  設(shè)運(yùn)放理想。這時(shí),可</p><p>  認(rèn)為運(yùn)放輸入電壓很小。即: 圖13 可調(diào)穩(wěn)壓電路 </p><p>  其中Vin為D/A部分輸出的雙級(jí)性電壓,5為7805的穩(wěn)壓值。由上式可見(jiàn),Vout與Vin之間成線形關(guān)系,當(dāng)Vin變化時(shí),輸出電壓改變。由于Vin是DAC0832輸出的范圍是+4.9V~-5V的電壓,因而Vo

42、ut的變化可以從0.0V~9.9V。經(jīng)實(shí)驗(yàn)證明:這種可調(diào)穩(wěn)壓輸出具有良好的負(fù)載特性,輸出最大負(fù)載電流可達(dá)到1A。電壓輸出端接上500mA負(fù)載與未接負(fù)載(空載)之間輸出電壓僅相差0.04V以內(nèi)。由于。</p><p><b>  3.6流穩(wěn)壓電路</b></p><p>  本設(shè)計(jì)共用到電源有三種:即±15V,+5V 。可選用的有開(kāi)關(guān)電源和穩(wěn)壓電源兩種,由于開(kāi)

43、關(guān)電源的紋波系數(shù)比較大,且設(shè)計(jì)要求電壓紋波不大于10mV 。因此采用常用的穩(wěn)壓電源來(lái)作為整個(gè)系統(tǒng)的電源。穩(wěn)壓電源由電源變壓器、整流電路、濾波電路和穩(wěn)壓電路組成,如圖14所示</p><p>  圖14 電源方框及波形圖</p><p>  整流和濾波電路:整流作用是將交流電壓U2變換成脈動(dòng)電壓U3。濾波電路一般由電容組成,其作用是脈動(dòng)電壓U3中的大部分紋波加以濾除,以得到較平滑的直流電壓

44、U4。再通過(guò)穩(wěn)壓電路得到平直的直流電壓U5。</p><p>  電源變壓器采用了雙17.2V的變壓器,輸入220V,50Hz交流電,經(jīng)全橋整流,濾波,穩(wěn)壓后得到±15V和+5V三種輸出,+5V部分供單片機(jī)及D/A,A/D,顯示等部分使用,電流最大約400mA;+15V和-15V部分供運(yùn)放使用,最大電流不超過(guò)50mA。電路如圖15所示:</p><p>  圖15 電源部分原理圖

45、</p><p>  圖中繼電器部分是一個(gè)開(kāi)關(guān)電路及短路保護(hù)電路。當(dāng)系統(tǒng)接到220V交流電后經(jīng)變壓器降壓,整流橋整流后接到K1,此時(shí)由于U1(7815)沒(méi)有輸入,所以K1沒(méi)有供電,整個(gè)后續(xù)系統(tǒng)處于關(guān)閉狀態(tài),當(dāng)按下SW_ON鍵時(shí)U1得到輸入,產(chǎn)生+15V的輸出,同時(shí)K1得電吸合,形成自鎖狀態(tài),同時(shí)79L15也得電輸出-15V電壓。松開(kāi)SW_ON鍵后由于K1處于自鎖狀態(tài),整個(gè)系統(tǒng)處于開(kāi)啟狀態(tài)。當(dāng)按下SW_OFF鍵時(shí),

46、K1被短路,從而斷開(kāi)電源達(dá)到關(guān)機(jī)的目的。同樣,在任一時(shí)刻如果產(chǎn)生短路,則K1也會(huì)斷開(kāi)達(dá)到短路保護(hù)的目的。</p><p>  +5V部分的供電電流在400mA左右,因此采用了最大輸出電流為1A 的7805三端穩(wěn)壓集成電路,由于功耗大,負(fù)載重,加裝了散熱片。而+15V和-15V部分最大電流不超過(guò)50mA。在設(shè)計(jì)過(guò)程中發(fā)現(xiàn)中兩片7805的均使用了散熱片且溫度偏高,因此加裝了風(fēng)扇,使用+15V電源,將78L15該為78

47、15后可滿足風(fēng)扇需求。這樣在保證性能的同時(shí)也降低了成本。</p><p><b>  三.程序設(shè)計(jì)</b></p><p><b>  1主控程序</b></p><p>  圖16為系統(tǒng)主控程序。</p><p>  圖16 系統(tǒng)主控程序框圖</p><p><b&

48、gt;  2 D/A子程序</b></p><p>  圖17為D/A子程序框圖。</p><p>  圖17 D/A子程序框圖</p><p>  可以看出,D/A子程序的作用是將設(shè)定的數(shù)字量通過(guò)變換送給D/A。</p><p><b>  3 A/D子程序</b></p><p>

49、;  圖18 A/D子程序框圖</p><p>  由A/D子程序框圖看出,修改精度為一個(gè)數(shù)字量,由于A/D和D/A的精度限制,修改量只能達(dá)到0.05V,但足已滿足設(shè)計(jì)需要。</p><p><b>  4 鍵盤(pán)子程序</b></p><p>  圖19為鍵盤(pán)子程序框圖。</p><p>  圖19 鍵盤(pán)子程序框圖框圖&

50、lt;/p><p>  4.1 步進(jìn)步減子程序</p><p>  圖20 步進(jìn),步減子程序框圖</p><p>  由步進(jìn),步減子程序框圖可以看出,如果每次把D/A的數(shù)字量加01H,可以使步進(jìn)量和步減量由0.1V變?yōu)?.05V。如果采用更高位的D/A轉(zhuǎn)換器??梢允共竭M(jìn)量和步減量進(jìn)一步的減小,以滿足更高的要求。</p><p><b>

51、;  4.2 設(shè)置子程序</b></p><p>  圖21 設(shè)置子程序框圖</p><p>  由設(shè)置子程序可以看出,進(jìn)入設(shè)置子程序后就屏蔽了“+”,“-”和設(shè)置鍵。然后逐步判斷按鍵,執(zhí)行相應(yīng)程序。</p><p><b>  設(shè)計(jì)總結(jié)</b></p><p><b>  六.附件</b&

52、gt;</p><p><b>  A、程 序 實(shí) 現(xiàn)</b></p><p>  單片機(jī)系統(tǒng)初始化和存儲(chǔ)器分配程序</p><p><b>  $NOMOD51</b></p><p>  ;-----------------------------------------------------

53、-------------------------</p><p>  ; This file is part of the C51 Compiler package //這個(gè)文件是c51 鏈接的數(shù)據(jù)</p><p>  ;------------------------------------------------------------------------------<

54、/p><p>  ; STARTUP.A51: This code is executed after processor reset. 這個(gè)代碼在程序重啟之后執(zhí)行</p><p><b>  ;</b></p><p>  ; To translate this file use A51 with the following invocat

55、ion:</p><p><b>  ;</b></p><p>  ; A51 STARTUP.A51</p><p><b>  ;</b></p><p>  ; To link the modified STARTUP.OBJ file to your application us

56、e the following</p><p>  ; BL51 invocation:</p><p><b>  ;</b></p><p>  ; BL51 <your object file list>, STARTUP.OBJ <controls></p><p><b&

57、gt;  ;</b></p><p>  ;------------------------------------------------------------------------------</p><p><b>  ;</b></p><p>  ; User-defined Power-On Initializat

58、ion of Memory</p><p><b>  ;</b></p><p>  ; With the following EQU statements the initialization of memory</p><p>  ; at processor reset can be defined:</p><

59、p><b>  ;</b></p><p>  ; ; the absolute start-address of IDATA memory is always 0</p><p>  IDATALEN EQU 80H ; the length of IDATA memory in bytes. IDA

60、TA存儲(chǔ)的字節(jié)長(zhǎng)度</p><p><b>  ;</b></p><p>  XDATASTART EQU 0H ; the absolute start-address of XDATA memory XDATA 存儲(chǔ)的實(shí)際起始地址</p><p>  XDATALEN EQU 0H

61、 ; the length of XDATA memory in bytes.</p><p><b>  ;</b></p><p>  PDATASTART EQU 0H ; the absolute start-address of PDATA memory</p><p>  PDATALEN

62、 EQU 0H ; the length of PDATA memory in bytes.</p><p><b>  ;</b></p><p>  ; Notes: The IDATA space overlaps physically the DATA and BIT areas of the</p><p>  

63、; 8051 CPU. At minimum the memory space occupied from the C51 </p><p>  ; run-time routines must be set to zero. </p><p>  ;----------------------------------------------------

64、--------------------------</p><p><b>  ;</b></p><p>  ; Reentrant Stack Initilization</p><p><b>  ;</b></p><p>  ; The following EQU statement

65、s define the stack pointer for reentrant</p><p>  ; functions and initialized it:</p><p><b>  ;</b></p><p>  ; Stack Space for reentrant functions in the SMALL model.&

66、lt;/p><p>  IBPSTACK EQU 0 ; set to 1 if small reentrant is used.</p><p>  IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1.</p><p><b>  

67、;</b></p><p>  ; Stack Space for reentrant functions in the LARGE model. </p><p>  XBPSTACK EQU 0 ; set to 1 if large reentrant is used.</p><p>  XBPSTA

68、CKTOP EQU 0FFFFH+1; set top of stack to highest location+1.</p><p><b>  ;</b></p><p>  ; Stack Space for reentrant functions in the COMPACT model. </p><p>  

69、PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.</p><p>  PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.</p><p><b>  ;</b></p>

70、;<p>  ;------------------------------------------------------------------------------</p><p><b>  ;</b></p><p>  ; Page Definition for Using the Compact Model with 64 KByte

71、xdata RAM</p><p><b>  ;</b></p><p>  ; The following EQU statements define the xdata page used for pdata</p><p>  ; variables. The EQU PPAGE must conform with the PPAG

72、E control used</p><p>  ; in the linker invocation.</p><p><b>  ;</b></p><p>  PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.</p><p>

73、<b>  ;</b></p><p>  PPAGE EQU 0 ; define PPAGE number. </p><p><b>  ;</b></p><p>  PPAGE_SFR DATA 0A0H ; SFR that supplies

74、uppermost address byte</p><p>  ; (most 8051 variants use P2 as uppermost address byte)</p><p><b>  ;</b></p><p>  ;---------------------------------------

75、---------------------------------------</p><p>  ; Standard SFR Symbols </p><p>  ACC DATA 0E0H</p><p>  B DATA 0F0H</p><p>  SP DATA 81H<

76、/p><p>  DPL DATA 82H</p><p>  DPH DATA 83H</p><p>  NAME C_STARTUP</p><p>  C_C51STARTUP SEGMENT CODE</p><p>  STACK SEGMENT

77、IDATA</p><p>  RSEG STACK</p><p><b>  DS 1</b></p><p>  EXTRN CODE (?C_START)</p><p>  PUBLIC C_STARTUP</p><p>  CSEG AT 0<

78、/p><p>  ?C_STARTUP: LJMP STARTUP1</p><p>  RSEG C_C51STARTUP</p><p><b>  STARTUP1:</b></p><p>  IF IDATALEN <> 0</p><p>  MOV

79、 R0,#IDATALEN - 1</p><p><b>  CLR A</b></p><p>  IDATALOOP: MOV @R0,A</p><p>  DJNZ R0,IDATALOOP</p><p><b>  ENDIF</b></p>

80、<p>  IF XDATALEN <> 0</p><p>  MOV DPTR,#XDATASTART</p><p>  MOV R7,#LOW (XDATALEN)</p><p>  IF (LOW (XDATALEN)) <> 0</p><p>  MOV R6,#(

81、HIGH (XDATALEN)) +1</p><p><b>  ELSE</b></p><p>  MOV R6,#HIGH (XDATALEN)</p><p><b>  ENDIF</b></p><p><b>  CLR A</b></p&

82、gt;<p>  XDATALOOP: MOVX @DPTR,A</p><p>  INC DPTR</p><p>  DJNZ R7,XDATALOOP</p><p>  DJNZ R6,XDATALOOP</p><p><b>  ENDIF</b></

83、p><p>  IF PPAGEENABLE <> 0</p><p>  MOV PPAGE_SFR,#PPAGE</p><p><b>  ENDIF</b></p><p>  IF PDATALEN <> 0</p><p>  MOV R0,#LOW

84、 (PDATASTART)</p><p>  MOV R7,#LOW (PDATALEN)</p><p><b>  CLR A</b></p><p>  PDATALOOP: MOVX @R0,A</p><p>  INC R0</p><p> 

85、 DJNZ R7,PDATALOOP</p><p><b>  ENDIF</b></p><p>  IF IBPSTACK <> 0</p><p>  EXTRN DATA (?C_IBP)</p><p>  MOV C_IBP,#LOW IBPSTACKTOP</p>

86、<p><b>  ENDIF</b></p><p>  IF XBPSTACK <> 0</p><p>  EXTRN DATA (?C_XBP)</p><p>  MOV C_XBP,#HIGH XBPSTACKTOP</p><p>  MOV C_XBP+1,#LOW

87、XBPSTACKTOP</p><p><b>  ENDIF</b></p><p>  IF PBPSTACK <> 0</p><p>  EXTRN DATA (C_PBP)</p><p>  MOV C_PBP,#LOW PBPSTACKTOP</p><p>&l

88、t;b>  ENDIF</b></p><p>  MOV SP,#STACK-1</p><p>  ; This code is required if you use L51_BANK.A51 with Banking Mode 4</p><p>  ; EXTRN CODE (B_SWITCH0)</p><p

89、>  ; CALL B_SWITCH0 ; init bank mechanism to code bank 0</p><p>  LJMP C_START</p><p><b>  END</b></p><p><b>  鍵盤(pán)掃描程序</b></p>

90、;<p>  #include<reg52.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit key1=P1^0;</p><p>  sbit key2=P1^1;</p>

91、;<p>  void delay(uint z); </p><p>  uchar keyscan() // 鍵盤(pán)掃描程序</p><p><b>  {</b></p><p>  uchar temp,num;</p><p><b>

92、;  num=17;</b></p><p>  P1=0xfe; // p1.0口置0</p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)<

93、/p><p><b>  {</b></p><p>  delay(20);</p><p>  temp=P1; </p><p>  temp=temp&0xf0; </p><p>  if(temp!=0xf0)</p><p><

94、b>  {</b></p><p>  //delay(10); //延遲去抖</p><p>  P1=P1&0xf0; </p><p>  while(P1!=0xf0);</p><p>  switch(temp)</p><p>

95、<b>  {</b></p><p>  case 0xe0:num=7;break; //0xf0和0xe0的交處,即p1.0與p1.4的交處</p><p>  case 0xd0:num=8;break; // p1.0與p1.5的交處,</p><p>  case 0xb0:num=9;break;&

96、lt;/p><p>  case 0x70:num=15;break; </p><p>  default:break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else break;</p><

97、;p><b>  }</b></p><p><b>  P1=0xfd;</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p>

98、<p><b>  {</b></p><p>  delay(20);</p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  if(temp!=0xf0)</p><p><

99、b>  {</b></p><p>  //delay(10);</p><p>  P1=P1&0xf0;</p><p>  while(P1!=0xf0);</p><p>  switch(temp)</p><p><b>  {</b></p>

100、<p>  case 0xe0:num=4;break;</p><p>  case 0xd0:num=5;break;</p><p>  case 0xb0:num=6;break;</p><p>  case 0x70:num=14;break;</p><p>  default:break;</p>&l

101、t;p><b>  }</b></p><p><b>  }</b></p><p>  else break;</p><p><b>  }</b></p><p><b>  P1=0xfb;</b></p><p>

102、<b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p>  delay(20);</p><p><b>  t

103、emp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  if(temp!=0xf0)</p><p><b>  {</b></p><p>  //delay(10);</p><p>  P1=P1&0xf0;</p&g

104、t;<p>  while(P1!=0xf0);</p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xe0:num=1;break;</p><p>  case 0xd0:num=2;break;</p><p>

105、  case 0xb0:num=3;break;</p><p>  case 0x70:num=13;break;</p><p>  default:break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else

106、 break;</p><p><b>  }</b></p><p><b>  P1=0xf7;</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  while

107、(temp!=0xf0)</p><p><b>  {</b></p><p>  delay(20);</p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  if(temp!=0xf0)<

108、;/p><p><b>  {</b></p><p>  //delay(10);</p><p>  P1=P1&0xf0;</p><p>  while(P1!=0xf0);</p><p>  switch(temp)</p><p><b>  {

109、</b></p><p>  case 0xe0:num=10;break;</p><p>  case 0xd0:num=0;break;</p><p>  case 0xb0:num=11;break;</p><p>  case 0x70:num=12;break;</p><p>  defa

110、ult:break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else break;</p><p><b>  }</b></p><p>  return num;</p>&

111、lt;p><b>  }</b></p><p><b>  主程序</b></p><p>  #include<reg52.h></p><p>  #include<absacc.h></p><p>  #include<intrins.h><

112、/p><p>  #include<math.h></p><p>  #include"keyscan.h"</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #defin

113、e dac0832 XBYTE[0X7FFF] //P2.7作片選,啟動(dòng)DA轉(zhuǎn)換</p><p>  #define int0 XBYTE[0X7FF8] //結(jié)束AD轉(zhuǎn)換,鎖存通道0,讀出AD值</p><p>  uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,<

114、;/p><p>  0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //數(shù)組table[]存放代碼</p><p>  uchar temp1,weishu,flag,dot;</p><p>  uchar volt[4]={0,0,0,0};</p><p>  void delay(

115、uint z)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  

116、}</b></p><p>  void display(uchar z) //LED顯示函數(shù)</p><p><b>  {</b></p><p><b>  uchar j;</b></p><p>  P2=0xFE;

117、 //P2.0口置0 ,選擇第一個(gè)數(shù)碼管</p><p>  for(j=0;j<z;j++) // 循環(huán)控制</p><p><b>  {</b></p><p>  P0=table[volt[j]]; // 將P0口數(shù)據(jù)送 LED顯示</p><p&

118、gt;<b>  delay(6);</b></p><p>  if(j<z-1) P2=_crol_(P2,1); //判斷,依次選擇P2.1,P2.2口 </p><p><b>  }</b></p><p><b>  }</b></p><p> 

119、 void main()</p><p><b>  { </b></p><p>  uchar keynum,i;</p><p>  float voltage,xiaoshu,sum;</p><p><b>  i=0;</b></p><p>  voltage=

120、0;</p><p><b>  temp1=0;</b></p><p><b>  flag=0;</b></p><p>  weishu=1; //定義數(shù)字量值temp1,進(jìn)位標(biāo)志flag,數(shù)碼管位數(shù)weishu等變量</p><p><b>  while(1)<

121、/b></p><p><b>  { </b></p><p>  dac0832=temp1; // 初始值設(shè)定為0</p><p>  keynum=keyscan(); //調(diào)用鍵盤(pán)掃描函數(shù)</p><p>  if(keynum==15

122、) //如果鍵值15,代表復(fù)位,將p0置0</p><p><b>  {</b></p><p>  P0=0; //p0口置0,復(fù)位</p><p>  while(1) </p><p><b

123、>  {</b></p><p>  keynum=keyscan(); //調(diào)用鍵盤(pán)掃描函數(shù)</p><p>  if(keynum>=0&&keynum<=9) //判斷鍵值</p><p><b>  {</b></p><

124、;p><b>  i++;</b></p><p>  for(weishu=0;weishu<i;weishu++) </p><p>  volt[i-weishu-1]=volt[i-weishu-2];</p><p>  volt[0]=keynum; // 將數(shù)值在第一個(gè)數(shù)碼管中顯示&

125、lt;/p><p>  if(flag==0) </p><p>  voltage=voltage*10+keynum;</p><p>  else {xiaoshu=pow(10,flag);</p><p>  xiaoshu=keynum/xiaoshu;</p><p>  sum=sum+xiaoshu;&l

126、t;/p><p>  flag++;} </p><p>  } // 數(shù)字處理顯示程序</p><p>  else if(keynum==10) //判斷按鍵,如果是點(diǎn)鍵,10代表點(diǎn)鍵</p><p><b>  {</

127、b></p><p><b>  flag++;</b></p><p><b>  dot=i;</b></p><p>  volt[0]=volt[0]+10; //在第二個(gè)數(shù)碼管 輸出顯示小數(shù)點(diǎn)</p><p><b>  }</b>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論