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

下載本文檔

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

文檔簡介

1、<p>  基于at89s52單片機的數(shù)控穩(wěn)壓電源設(shè)計</p><p>  內(nèi)容摘要:該電源系統(tǒng)以AT89S52單片機為核心控制芯片,實現(xiàn)可預(yù)設(shè)電壓數(shù)控直流電源功能的方案。設(shè)計采用8位精度的DA轉(zhuǎn)換器DAC0808和LT082運算放大器構(gòu)成穩(wěn)壓源,實現(xiàn)了輸出電壓范圍為0V~+9.9V,電壓步進可調(diào)的數(shù)控穩(wěn)壓電源,具有較高的精度與穩(wěn)定性。另外該方案采用通過按鍵實現(xiàn)輸出電壓的方便設(shè)定,顯示部分采用數(shù)碼管來顯

2、示輸出電壓,通過數(shù)字電壓表顯示實際輸出電壓值。 </p><p>  關(guān)鍵詞:數(shù)控 AT89S52 DAC0808 穩(wěn)壓電源 </p><p><b>  1緒論</b></p><p>  電源技術(shù)尤其是數(shù)控電源技術(shù)是一門實踐性很強的工程技術(shù),服務(wù)于各行各業(yè)。電力電子技術(shù)是電能的最佳應(yīng)用技術(shù)之一。當(dāng)今電源技術(shù)融合了電氣、電子、系統(tǒng)集成、控

3、制理論、材料等諸多學(xué)科領(lǐng)域。隨著計算機和通訊技術(shù)發(fā)展而來的現(xiàn)代信息技術(shù)革命,給電力電子技術(shù)提供了廣闊的發(fā)展前景,同時也給電源提出了更高的要求。隨著數(shù)控電源在電子裝置中的普遍使用,普通電源在工作時產(chǎn)生的誤差,會影響整個系統(tǒng)的精確度。電源在使用時會造成很多不良后果,世界各國紛紛對電源產(chǎn)品提出了不同要求并制定了一系列的產(chǎn)品精度標(biāo)準(zhǔn)。只有滿足產(chǎn)品標(biāo)準(zhǔn),才能夠進入市場。隨著經(jīng)濟全球化的發(fā)展,滿足國際標(biāo)準(zhǔn)的產(chǎn)品才能獲得進出的通行證。數(shù)控電源是從80

4、年代才真正的發(fā)展起來的,期間系統(tǒng)的電力電子理論開始建立。這些理論為其后來的發(fā)展提供了一個良好的基礎(chǔ)。在以后的一段時間里,數(shù)控電源技術(shù)有了長足的發(fā)展。但其產(chǎn)品存在數(shù)控程度達不到要求、分辨率不高、功率密度比較低、可靠性較差的缺點。因此數(shù)控電源主要的發(fā)展方向,是針對上述缺點不斷加以改善。單片機技術(shù)及電壓轉(zhuǎn)換模塊的出現(xiàn)為精確數(shù)控電源的發(fā)展提供了有利的條件。新的變換技術(shù)和控制理論的不斷發(fā)展,各種類型專用集成電路、數(shù)字</p><

5、;p>  數(shù)字化智能電源模塊是針對傳統(tǒng)智能電源模塊的不足提出的,數(shù)字化能夠減少生產(chǎn)過程中的不確定因素和人為參與的環(huán)節(jié)數(shù),有效地解決電源模塊中諸如可靠性、智能化和產(chǎn)品一致性等工程問題,極大地提高生產(chǎn)效率和產(chǎn)品的可維護性。</p><p>  電源采用數(shù)字控制,具有以下明顯優(yōu)點:</p><p> ?。?)易于采用先進的控制方法和智能控制策略,使電源模塊的智能化程度更高,性能更完美;&l

6、t;/p><p> ?。?)控制靈活,系統(tǒng)升級方便,甚至可以在線修改控制算法,而不必改動硬件線路;</p><p>  (3)控制系統(tǒng)的可靠性提高,易于標(biāo)準(zhǔn)化,可以針對不同的系統(tǒng)(或不同型號的產(chǎn)品),采用統(tǒng)一的控制板,而只是對控制軟件做一些調(diào)整即可;</p><p> ?。?)系統(tǒng)的一致性好,成本低,生產(chǎn)制造方便。由于控制軟件不像模擬器件那樣存在差異,所以,其一致性很好

7、。由于采用軟件控制,控制板的體積將大大減小,生產(chǎn)成本下降。</p><p><b>  2 系統(tǒng)設(shè)計</b></p><h3>  2.1 設(shè)計任務(wù)與要求</h2><h4>  2.1.1 設(shè)計任務(wù)</h2><p> ?。?)設(shè)計一臺微機控制的數(shù)控直流電壓源,為電子設(shè)備供電;</p><p>

8、  (2)在設(shè)計過程中,選擇1~2個單元電路使用仿真軟件(例如Proteus等)進行仿真調(diào)試;</p><p>  (3)用計算機繪制所有的電路圖。</p><h4>  2.1.2 設(shè)計要求</h2><p> ?。?)輸出電壓范圍0-9.9v,步進值可調(diào);</p><p> ?。?)電壓調(diào)整率Sv<0.1%V;</p>

9、<p> ?。?)用數(shù)字顯示輸出電壓。 </p><h3>  2.2 方案的選擇與論證</h2><h4>  2.2.1 總體設(shè)計方案</h2><p>  方案一:采用各類數(shù)字電路來組成鍵盤控制系統(tǒng),進行信號處理,如選用CPLD等可編程邏輯器件。本方案電路復(fù)雜,靈活性不高,效率低,不利于系統(tǒng)的擴展,對信號處理比較困難。</p><

10、;p>  方案二:采用51系列單片機作為整機的控制單元,通過改變輸入數(shù)字量來改變輸出電壓值,從而使輸出功率管的基極電壓發(fā)生變化,間接地改變輸出電壓的大小。</p><p>  本設(shè)計采用第二種方案。為了能夠使系統(tǒng)具備檢測實際輸出電壓值的大小,利用51系列單片機為主控制器,通過鍵盤來設(shè)置直流電源的輸出電流,設(shè)置步進等級可調(diào),并可由數(shù)碼管顯示預(yù)設(shè)電壓值,數(shù)字電壓表顯示實際輸出電壓。從數(shù)字電壓表中讀出實際電壓值,

11、可直觀的看出實際電壓與預(yù)設(shè)電壓是否有偏差,并通過鍵盤更改。通過軟件利用單片機程控輸出數(shù)字信號,經(jīng)過D/A轉(zhuǎn)換器(DA0808)輸出模擬量,再經(jīng)過運算放大器隔離放大,控制輸出功率管的基極,隨著功率管基極電電流的變化而輸出不同的電壓。</p><h4>  2.2.2 顯示部分</h2><p>  采用了鍵盤/顯示器接口控制器。不僅簡化接口引線,而且減小了軟件對鍵盤/顯示器的查詢時間,提高了

12、CPU的利用率。采用三位半的數(shù)字電壓表直接對輸出電壓采樣并顯示輸出實際電壓值,一旦系統(tǒng)工作異常,出現(xiàn)預(yù)制值與輸出值偏差過大,用戶可以根據(jù)該信息予以處理。</p><p><b>  3 系統(tǒng)硬件設(shè)計</b></p><p>  本系統(tǒng)由控制器模塊、按鍵模塊、LED顯示模塊和D/A轉(zhuǎn)換模塊4個模塊組成,系統(tǒng)硬件組成框圖如圖1所示。系統(tǒng)總體電路原理圖如圖2所示。</

13、p><p><b>  圖1系統(tǒng)組成框圖</b></p><p>  圖2 系統(tǒng)電路原理圖</p><p><b>  3.1 控制器模塊</b></p><p>  本系統(tǒng)控制器芯片采用AT89S52單片機,其管腳圖如圖3所示。</p><p>  圖3 AT89S52管腳圖&

14、lt;/p><p>  AT89S52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、有效的解決方案。AT89S52的

15、主要特性是:與MCS-51單片機產(chǎn)品兼容;8K字節(jié)在系統(tǒng)可編程Flash存儲器;1000次擦寫周期;三級加密程序存儲器;32個可編程I/O口線;三個16位定時器/計數(shù)器;8個中斷源;全雙工UAR串行通道;低功耗空閑和掉電模式;掉電后中斷可喚醒;有看門狗定時器;雙數(shù)據(jù)指針。AT89S52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全

16、雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52 可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、</p><p><b>  3.2 按鍵模塊</b></p><p>  采用3x4鍵盤與單片機的P1口相連,連接電路如圖4所示。*設(shè)為復(fù)位鍵,按下時,數(shù)碼管熄滅,電壓輸出為0。#設(shè)為確定鍵,按下時數(shù)碼管

17、顯示預(yù)設(shè)電壓值,數(shù)字電壓表顯示實際電壓值。 </p><p><b>  圖4 按鍵電路</b></p><h3>  3.3 D/A轉(zhuǎn)換模塊</h2><p>  D/A轉(zhuǎn)換模塊如圖5所示,由數(shù)模轉(zhuǎn)換器DAC0808和運放TL082構(gòu)成。DAC0808芯片是一個8位D/A轉(zhuǎn)換器,有8個數(shù)碼輸入端,1個模擬輸出端,能將控制電路輸出的8位二進制數(shù)

18、字量轉(zhuǎn)換成模擬量的輸出。P2口與DAC0808的輸入端相連,通過D/A轉(zhuǎn)換電路將輸入的數(shù)字量轉(zhuǎn)為模擬量,通過TL082運算放大器輸出實際的電壓,從數(shù)字電壓表讀出。</p><p>  圖5 D/A轉(zhuǎn)換電路圖</p><p>  DAC0808引腳圖如圖6所示。DAC0808各引腳功能如表1所示。</p><p>  圖6 DAC0808引腳圖</p>

19、<p>  DAC0808的COMP引腳的作用為通過調(diào)節(jié)外接電阻,以達到改善放大器的性能和輸出電壓。運放輸出電壓為</p><p><b>  (1)</b></p><p>  式中,VREF為外接參考電壓,D7~DO為8位輸入數(shù)字量。當(dāng)輸入數(shù)字量在00000000~11111111之間變化時,其對應(yīng)的輸出模擬電壓U1在0~-VREF之間,電壓分辨率為:△

20、V=5V/(28-1)=19.6mV。</p><p>  表1 DAC0808的引腳功能</p><p>  TL082是一通用的J-FET雙運用算放大器,其引腳圖如圖7所示,其中2、3管腳分別為正反向輸入,對應(yīng)的6、5管腳為正反向輸出,8、4為正負電源。TL0832特點有:較低輸入偏置電壓和偏移電流;輸出沒有短路保護;輸入級具有較高的輸入阻抗;內(nèi)建頻率被子償電路;較高的壓擺率;最大工作

21、電壓18V。</p><p>  圖7 TLO82管腳圖</p><h3>  3.4數(shù)碼管顯示模塊</h2><p>  數(shù)碼顯示模塊電路如圖8所示。顯示部分選用的是7seg-mpx2-cc兩片7段共陰數(shù)碼管。單片機的P00~P07分別接數(shù)碼管的A~DP口,P20、P21分別接數(shù)碼管1、2接口,分別控制第一片和第二片的暗亮。外加上拉電阻加強驅(qū)動能力,使數(shù)碼管更亮。

22、</p><p>  圖8 數(shù)碼管顯示電路</p><p><b>  3.5硬件元件清單</b></p><p>  系統(tǒng)元器件清單見表2。</p><p>  表2 系統(tǒng)元器件清單</p><p><b>  4軟件設(shè)計與仿真</b></p><p&g

23、t;  本系統(tǒng)程序包括主程序、鍵盤掃描子程序、發(fā)送鍵碼子程序、發(fā)送數(shù)據(jù)子程序、接收命令子程序等。主程序用于系統(tǒng)初始化,子程序調(diào)度等。鍵盤掃描子程序用于掃描鍵盤狀態(tài),將被按鍵的位置號存入緩沖器中。發(fā)送鍵碼子程序用于將緩沖區(qū)鍵的接通碼或斷開碼發(fā)送給單片機接口。發(fā)送數(shù)據(jù)子程序用于將數(shù)據(jù)發(fā)給單片機接口。接收命令子程序用于接收單片機接口發(fā)來的鍵盤命令。</p><p><b>  4.1主程序設(shè)計</b&g

24、t;</p><p>  主程序通過鍵盤掃描子程序進行各行掃描是否有按鍵,消抖及重鍵處理:通過軟件上延時程序來消除抖動;采用后按鍵優(yōu)先處理,即多鍵同時按下時,只重復(fù)發(fā)送最后按下鍵的掃描碼。主程序流程圖如圖9所示。</p><p><b>  圖9 主程序流程圖</b></p><p>  4.2 仿真軟件簡介</p><p&

25、gt;  Proteus是英國Labcenter公司開發(fā)的電路分析與實物仿真軟件。它運行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路,該軟件的特點是:</p><p> ?。?)實現(xiàn)了單片機仿真和SPICE電路仿真相結(jié)合。具有模擬電路仿真、數(shù)字電路仿真、單片機及其外圍電路組成的系統(tǒng)的仿真、RS232動態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,

26、如示波器、邏輯分析儀、信號發(fā)生器等。</p><p> ?。?)支持主流單片機系統(tǒng)的仿真。目前支持的單片機類型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多種外圍芯片。</p><p> ?。?)提供軟件調(diào)試功能。在硬件仿真系統(tǒng)中具有全速、單步、設(shè)置斷點等調(diào)試功能,同時可以觀察各個變量、寄存器等的當(dāng)前狀態(tài),因此在該軟件

27、仿真系統(tǒng)中,也必須具有這些功能;同時支持第三方的軟件編譯和調(diào)試環(huán)境,如Keil C51 uVision2、MPLAB等軟件。</p><p> ?。?)具有強大的原理圖繪制功能。</p><p>  總之,該軟件是一款集單片機和SPICE分析于一身的仿真軟件,功能極其強大。</p><p>  Proteus7.5是目前最好的模擬單片機外圍器件的工具,可以仿真51系

28、列、AVR、PIC等常用的MCU及其外圍電路(如LCD、RAM、ROM、鍵盤、馬達、LED、AD/DA、部分SPI器件、部分IIC器件等)。</p><p>  軟件編譯采用KEIL C51軟件,Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻

29、。</p><p>  Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。</p><p><b>  4.3 仿真結(jié)果 </b></p>

30、<p>  先按復(fù)位鍵,系統(tǒng)初始化,再輸入數(shù)字12(預(yù)設(shè)電壓值為1.2V),按下#鍵(確定鍵),則數(shù)碼管顯示12,數(shù)字電壓表顯示實際輸出電壓值。圖10、11分別為數(shù)碼管和電壓顯示仿真,其中圖10中數(shù)碼管顯示1.2V,圖11中數(shù)字電壓表顯示1.21V。</p><p>  圖10 預(yù)設(shè)電壓(1.2V)數(shù)碼管顯示仿真圖</p><p>  圖11預(yù)設(shè)電壓(1.2V)數(shù)字電壓表顯示

31、仿真圖</p><p>  若需要重新設(shè)定,則按下*號鍵(復(fù)位鍵)。此時數(shù)碼管熄滅,數(shù)字電壓表讀數(shù)為0。此時可重新設(shè)定。仿真結(jié)果如圖12、13所示。</p><p>  圖12 重設(shè)定數(shù)碼管顯示仿真圖</p><p>  圖13 重設(shè)定數(shù)字電壓表顯示仿真圖</p><p><b>  4.4 系統(tǒng)調(diào)試</b></p

32、><p>  在調(diào)試過程中主要是對程序的修改,特別是延時子程序。開始延時較短時,當(dāng)按下數(shù)字鍵時,兩個數(shù)碼管同時顯示按下的數(shù)字。如果延時較長則數(shù)字會緩慢的顯示出來。通過修改程序,將延時調(diào)到適中,系統(tǒng)正常工作。</p><p><b>  4.5 誤差分析</b></p><p>  設(shè)定預(yù)設(shè)值后,讀取數(shù)字電壓表電壓值,共記錄10組數(shù)據(jù)如表3所示。通過

33、預(yù)設(shè)值和實際值的比較進行誤差分析。</p><p>  表3 預(yù)設(shè)值和實際值的比較(單位:V)</p><p>  誤差平均值=(0.8%+0.6%+0.9%+0.6%+0.7%+0.7%+0.9%+</p><p>  1.2%+0.7%)</p><p>  從數(shù)據(jù)中可看出0.78%<<1%,誤差較小。</p>

34、<p>  產(chǎn)生誤差的因素主要有一下幾點:</p><p> ?。?)在參數(shù)選擇的時候沒有完全匹配;</p><p> ?。?)數(shù)字電壓表只能讀出3位有效數(shù)字;</p><p> ?。?)基準(zhǔn)電壓設(shè)定不適中;</p><p>  (4)轉(zhuǎn)換位數(shù)不高。附錄:程序清單</p><p>  #define_PWL

35、OCK_H // 防止PWLock.h被重復(fù)引用</p><p>  #define_PWLOCK_H</p><p>  #include <reg52.h></p><p>  #include <absacc.h></p><p>  #include <stdio.h></p>

36、<p>  #include <math.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p><b>  uchar px;</b></p><p><b>  uint

37、 a;</b></p><p><b>  uint b;</b></p><p>  uint c; //為0XFF</p><p><b>  uint i;</b></p><p>  uchar digbit;

38、 // 字位</p><p>  uchar dy;</p><p>  uchar wordbuf[2];// 字型碼緩沖區(qū)</p><p>  uchar count;// 位計數(shù)</p><p>  uchar pwbuf[2];// 輸入數(shù)字存儲區(qū)</p><p

39、>  bit enterflag;// 確認鍵按下與否標(biāo)志</p><p><b>  bit lh;</b></p><p>  bit pwflag;// 密碼正確與否標(biāo)志</p><p>  bit showflag;// 數(shù)碼管顯示與否標(biāo)志</p><p>  sbit P2

40、0=P2^0;</p><p>  sbit P21=P2^1;</p><p>  void display(void);// 顯示函數(shù)</p><p><b>  #endif</b></p><p>  //#include "PWLock.h"</p><p>

41、  /* 鍵消抖延時函數(shù) */</p><p>  void delay(void)</p><p><b>  {</b></p><p><b>  uint i;</b></p><p>  for (i=12000;i>0;i--);</p><p>  }

42、 /* 鍵掃描函數(shù) */</p><p>  uchar keyscan(void)</p><p><b>  {</b></p><p>  uchar scancode,tmpcode;</p><p>  P1 = 0xf0; //

43、發(fā)全0行掃描碼</p><p>  if ((P1&0xf0)!=0xf0)// 若有鍵按下</p><p><b>  {</b></p><p>  delay();// 延時去抖動</p><p>  if ((P1&0xf0)!=0xf0)// 延時后再判斷一次,去

44、除抖動影響</p><p><b>  { </b></p><p>  scancode = 0xfe;</p><p>  while((scancode&0x10)!=0)// 逐行掃描</p><p><b>  {</b></p><p>  P1 =

45、 scancode;// 輸出行掃描碼</p><p>  if ((P1&0xf0)!=0xf0)// 本行有鍵按下</p><p><b>  {</b></p><p>  tmpcode = (P1&0xf0)|0x0f;</p><p>  /* 返回特征字節(jié)碼,為1的位即對應(yīng)于行和

46、列 */</p><p>  return((~scancode)+(~tmpcode));</p><p><b>  }</b></p><p>  else scancode = (scancode<<1)|0x01;//行掃描碼左移一位</p><p><b>  }</b>&l

47、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  return(0);// 無鍵按下,返回值為0 </p><p><b>  }</b></p><p>  /* 定時器0中斷服務(wù)子程序,2

48、ms定時動態(tài)掃描顯示 */</p><p>  void time0_int(void) interrupt 1 </p><p><b>  {</b></p><p>  /* 重置2ms定時 */</p><p>  TH0 = -2000/256;</p><p>  TL0 = -200

49、0%256;</p><p>  px++; //片選</p><p>  if (showflag==1)</p><p>  display();// 調(diào)用顯示函數(shù)</p><p><b>  }</b></p><p>  /* 根據(jù)共陰極字型編碼表

50、獲取0~9,A~B字型代碼 */</p><p>  uchar getcode(uchar i)</p><p><b>  {</b></p><p><b>  uchar p;</b></p><p>  switch (i)</p><p><b>  {

51、</b></p><p>  case 0: p=0x3f;break;/* 0 */</p><p>  case 1: p=0x06;break;/* 1 */</p><p>  case 2: p=0x5B;break;/* 2 */</p><p>  case 3: p=0x4F;br

52、eak;/* 3 */</p><p>  case 4: p=0x66;break;/* 4 */</p><p>  case 5: p=0x6D;break;/* 5 */</p><p>  case 6: p=0x7D;break;/* 6 */</p><p>  case 7: p=0x07

53、;break;/* 7 */</p><p>  case 8: p=0x7F;break;/* 8 */</p><p>  case 9: p=0x67;break;/* 9 */</p><p>  default: break;</p><p><b>  }</b>

54、</p><p>  return(p);</p><p><b>  }</b></p><p>  void Display(void) //LED數(shù)值顯示</p><p><b>  { </b></p><p>  switch (px%2)</p>

55、<p><b>  {</b></p><p>  case 0:P20 = 1;P21 = 0; P0 = getcode(wordbuf[0]);break;</p><p>  case 1:P21 = 1;P20 = 0; P0 = getcode(wordbuf[1]);break;</p><p>  default:

56、 return;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /* 顯示函數(shù) */</p><p>  /*void display(void)</p><p><b>  {</b></p&

57、gt;<p><b>  uchar i;</b></p><p>  switch (digbit)</p><p><b>  {</b></p><p>  case 1:i=0;break;</p><p>  case 2:i=1;break;</p>

58、<p>  default: break;</p><p><b>  }</b></p><p>  P2 = 0x0;// 關(guān)閉顯示</p><p><b>  //P20=0;</b></p><p><b>  //P21=0;</b>&l

59、t;/p><p>  P0 = getcode(wordbuf[i]);// 送字型碼</p><p>  P2=digbit; // 送字位碼</p><p><b>  digbit=1;</b></p><p>  if(digbit==1)</p><p

60、><b>  {</b></p><p><b>  digbit=2;</b></p><p>  P20 = 1;</p><p><b>  P21 = 0;</b></p><p><b>  }</b></p>&l

61、t;p><b>  digbit=2;</b></p><p><b>  P21 = 1;</b></p><p><b>  P20 = 0;</b></p><p>  if (digbit<0x02)// 共2位</p><p>  digbit =

62、 digbit*2;// 左移一位</p><p><b>  else</b></p><p>  digbit = 0x01;</p><p><b>  }</b></p><p><b>  /* 主程序 */</b></p><p>  

63、void main()</p><p><b>  {</b></p><p>  uchar j,key;</p><p>  uint temp;</p><p><b>  P20 = 1;</b></p><p>  P21 = 1;// 關(guān)閉數(shù)碼管顯示

64、</p><p>  TMOD = 0x11;// T0,T1工作方式1</p><p>  TH0 = 2000/256; /* 2ms 定時設(shè)置 */</p><p>  TL0 = 2000%256;</p><p>  /* 啟動計數(shù)器0,關(guān)閉計數(shù)器1 */</p><p><b>  T

65、R0 = 1;</b></p><p><b>  ET0 = 1;</b></p><p><b>  TR1 = 0;</b></p><p><b>  ET1 = 1;</b></p><p><b>  EA = 1;</b><

66、/p><p>  count = 0;// 初始計數(shù)器設(shè)為0</p><p>  enterflag = 0;// 沒有按下確認鍵</p><p><b>  lh = 0;</b></p><p>  pwflag = 0;// 標(biāo)志先置為0</p><p>  d

67、igbit = 0x01;// 從第一位數(shù)碼管開始動態(tài)掃描</p><p>  /* 剛加電時,不顯示*/</p><p>  for (j=0;j<2;j++)</p><p>  wordbuf[j] = 17;</p><p>  showflag = 1;// 打開數(shù)碼管顯</p><p>

68、;<b>  while(1)</b></p><p><b>  {</b></p><p>  key = keyscan();// 調(diào)用鍵盤掃描函數(shù)</p><p>  switch(key)</p><p><b>  {</b></p><

69、;p>  case 0x11:// 1行1列,數(shù)字1</p><p>  if (count<2)</p><p><b>  {</b></p><p>  wordbuf[count] = 1;// 對應(yīng)位上顯示“1”</p><p>  pwbuf[count] = 1;</p>

70、;<p>  if(count==0)</p><p><b>  {a=1;</b></p><p><b>  }</b></p><p>  if(count==1)</p><p><b>  {b=1;</b></p><p>&

71、lt;b>  }</b></p><p><b>  count++;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 0x21:// 1行2列,數(shù)字3</p>

72、;<p>  if (count<2)</p><p><b>  {</b></p><p>  wordbuf[count] = 2;// 對應(yīng)位上顯示“2"</p><p>  pwbuf[count] = 2;</p><p>  if(count==0)</p>&

73、lt;p><b>  {a=2;</b></p><p><b>  }</b></p><p>  if(count==1)</p><p><b>  {b=2;</b></p><p><b>  }</b></p><p

74、><b>  count++;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 0x41:// 1行3列,數(shù)字3</p><p>  if (count<2)</p

75、><p><b>  {</b></p><p>  wordbuf[count] = 3;// 對應(yīng)位上顯示“3"</p><p>  pwbuf[count] = 3;</p><p>  if(count==0)</p><p><b>  {a=3;</b>&

76、lt;/p><p><b>  }</b></p><p>  if(count==1)</p><p><b>  {b=3;</b></p><p><b>  }</b></p><p><b>  count++;</b><

77、;/p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 0x12:// 2行1列,數(shù)字4</p><p>  if (count<2)</p><p><b>  {</b><

78、/p><p>  wordbuf[count] = 4;// 對應(yīng)位上顯示“4"</p><p>  pwbuf[count] = 4;</p><p>  if(count==0)</p><p><b>  {a=4;</b></p><p><b>  }</b&g

79、t;</p><p>  if(count==1)</p><p><b>  {b=4;</b></p><p><b>  }</b></p><p><b>  count++;</b></p><p><b>  }</b>

80、</p><p><b>  break;</b></p><p>  case 0x22:// 2行2列,數(shù)字5</p><p>  if (count<2)</p><p><b>  {</b></p><p>  wordbuf[count] = 5

81、;// 對應(yīng)位上顯示“5"</p><p>  pwbuf[count] = 5;</p><p>  if(count==0)</p><p><b>  {a=5;</b></p><p><b>  }</b></p><p>  if(count==1)&

82、lt;/p><p><b>  {b=5;</b></p><p><b>  }</b></p><p><b>  count++;</b></p><p><b>  }</b></p><p><b>  break;

83、</b></p><p>  case 0x42:// 2行3列,數(shù)字6</p><p>  if (count<2)</p><p><b>  {</b></p><p>  wordbuf[count] = 6;// 對應(yīng)位上顯示“6"</p><p&g

84、t;  pwbuf[count] = 6;</p><p>  if(count==0)</p><p><b>  {a=6;</b></p><p><b>  }</b></p><p>  if(count==1)</p><p><b>  {b=6;&

85、lt;/b></p><p><b>  }</b></p><p><b>  count++;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case

86、 0x14:// 3行1列,數(shù)字7</p><p>  if (count<2)</p><p><b>  {</b></p><p>  wordbuf[count] = 7;// 對應(yīng)位上顯示“7"</p><p>  pwbuf[count] = 7;</p><p&g

87、t;  if(count==0)</p><p><b>  {a=7;</b></p><p><b>  }</b></p><p>  if(count==1)</p><p><b>  {b=7;</b></p><p><b>  

88、}</b></p><p><b>  count++;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 0x24:// 3行2列,數(shù)字8</p><p&

89、gt;  if (count<2)</p><p><b>  {</b></p><p>  wordbuf[count] = 8;// 對應(yīng)位上顯示“8"</p><p>  pwbuf[count] = 8;</p><p>  if(count==0)</p><p>&

90、lt;b>  {a=8;</b></p><p><b>  }</b></p><p>  if(count==1)</p><p><b>  {b=8;</b></p><p><b>  }</b></p><p><b&

91、gt;  count++;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 0x44:// 3行3列,數(shù)字9</p><p>  if (count<2)</p><p&

92、gt;<b>  {</b></p><p>  wordbuf[count] = 9;// 對應(yīng)位上顯示“9"</p><p>  pwbuf[count] = 9;</p><p>  if(count==0)</p><p><b>  {a=9;</b></p>&

93、lt;p><b>  }</b></p><p>  if(count==1)</p><p><b>  {b=9;</b></p><p><b>  }</b></p><p><b>  count++;</b></p>&l

94、t;p><b>  }</b></p><p><b>  break;</b></p><p>  case 0x18:// 4行1列,數(shù)字*</p><p>  count = 0;</p><p><b>  P3=0;</b></p><

95、;p>  px=0;// 顯示清零</p><p>  for (j=0;j<2;j++)</p><p><b>  {</b></p><p>  wordbuf[j] = 17;// 數(shù)碼管不顯示</p><p>  pwbuf[j] = 0;// 用FFFFFF清除已經(jīng)輸入的密碼<

96、;/p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 0x28: // 4行2列,數(shù)字0</p><p>  if (count<2)</p><p><b>  {&

97、lt;/b></p><p>  wordbuf[count] = 0;// 對應(yīng)位上顯示“0"</p><p>  pwbuf[count] = 0;</p><p>  if(count==0)</p><p><b>  {a=0;</b></p><p><b>

98、;  }</b></p><p>  if(count==1)</p><p><b>  {b=0;</b></p><p><b>  }</b></p><p><b>  count++;</b></p><p><b>

99、  }</b></p><p><b>  break;</b></p><p>  case 0x48:// 4行3列,數(shù)字#</p><p>  enterflag = 1;// 確認鍵按下</p><p>  if (count==2) </p><p> 

100、 // 只有輸入2個數(shù)后按確認鍵才有效輸出</p><p>  pwflag = 1; </p><p><b>  break;</b></p><p>  default:break;</p><p><b>  }</b></p><p>  if (ente

101、rflag==1)// 如果按下確認鍵</p><p><b>  {</b></p><p>  enterflag = 0; // 標(biāo)志位置回0</p><p>  count = 0; // 計數(shù)器清零</p><p>  c=0xff/12;<

102、;/p><p>  if (pwflag==1)</p><p><b>  {</b></p><p>  P3=a*c+b*c/12+12*c/1000;</p><p>  temp=a*c+b*c/12+12*c/1000;</p><p>  if(temp>=0xff)<

103、/p><p><b>  {</b></p><p><b>  P3=0xff;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b>&l

溫馨提示

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

評論

0/150

提交評論