畢業(yè)設(shè)計(jì)----數(shù)控直流穩(wěn)壓電源_第1頁
已閱讀1頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p>  摘要 …………………………………………………………………………… 3 </p><p>  方案論證與比較 …………………………………………………… 4</p><p>  1. 1系統(tǒng)供電部分………………………………………………………… 4</p><p&g

2、t;  1. 2 控制器部分………………………………………………………… 4</p><p>  1. 3 顯示部分…………………………………………………………… 4</p><p>  4 鍵盤部分…………………………………………………………… 4</p><p>  5 數(shù)模/模數(shù)轉(zhuǎn)換部分…………………………………………………4</p><

3、p>  6 掉電記憶部分………………………………………………………5 </p><p>  系統(tǒng)的具體設(shè)計(jì)及實(shí)現(xiàn)……………………………………………5</p><p>  系統(tǒng)總框圖………………………………………………………… 5</p><p>  硬件設(shè)計(jì)…………………………………………………………… 6</p><

4、p>  電源模塊……………………………………………………6</p><p>  DA轉(zhuǎn)換模塊……………………………………………… 6</p><p>  電壓調(diào)整模塊………………………………………………7</p><p>  鍵盤模塊……………………………………………………8</p><p>  EEPROM拓展模塊…………………………

5、………………8</p><p>  顯示模塊……………………………………………………9</p><p>  軟件設(shè)計(jì)……………………………………………………………10</p><p>  主程序流程…………………………………………………10</p><p>  鍵盤程序流程………………………………………………11</p><

6、;p>  EEPROM讀寫流程…………………………………………12</p><p>  DAC0832程序流程…………………………………………13</p><p>  TLC1543程序流程…………………………………………13</p><p>  測試、結(jié)果及分析…………………………………………………14</p><p>  基本功能…

7、…………………………………………………………14</p><p>  發(fā)揮功能部分………………………………………………………14</p><p>  其他發(fā)揮部分………………………………………………………15</p><p>  詳細(xì)的測試數(shù)據(jù)……………………………………………………15</p><p>  總結(jié)………………………………………

8、……………………………16</p><p>  參考文獻(xiàn)………………………………………………………………………17</p><p>  附錄一、完整的系統(tǒng)原理圖……………………………………………………18附錄二、完整的系統(tǒng)源代碼……………………………………………………19</p><p><b>  數(shù)控直流穩(wěn)壓電源</b></p>

9、<p><b>  設(shè)計(jì)任務(wù)與要求</b></p><p><b>  設(shè)計(jì)任務(wù)</b></p><p>  設(shè)計(jì)并制作一個(gè)直流可調(diào)穩(wěn)壓電源。</p><p><b>  設(shè)計(jì)要求</b></p><p><b>  1、基本要求:</b>&

10、lt;/p><p>  當(dāng)輸入交流電壓為220v±10%時(shí),輸出電壓在3-13v可調(diào);</p><p>  額定電流為0.5A,且紋波不大于10mV;</p><p>  使用按鍵設(shè)定電壓,同時(shí)具有常用電平快速切換功能(3v、5v、6v、9v、12v),設(shè)定后按鍵可鎖定,防止誤觸;</p><p>  顯示設(shè)定電壓和測量電壓,顯示精度為

11、0.01v。</p><p><b>  2、擴(kuò)展要求:</b></p><p>  輸出電壓在0-13v可調(diào);</p><p>  額定電流為1A,且紋波不大于1mV;</p><p>  掉電后可記憶上次的設(shè)定值;</p><p>  兩級過流保護(hù)功能,當(dāng)電流超過額定值的20%達(dá)5秒時(shí),電路作

12、斷開操作;當(dāng)電流超過額定值的50%時(shí),電路立即斷開。具有光提示(如LED);</p><p><b>  其他創(chuàng)新。</b></p><p><b>  說明</b></p><p>  禁止直接使用220v直接電阻分壓的作法,注意用電安全。</p><p><b>  摘要</b&

13、gt;</p><p>  直流穩(wěn)壓電源是常用的電子設(shè)備, 它能保證在電網(wǎng)電壓波動(dòng)或負(fù)載發(fā)生變化時(shí), 輸出穩(wěn)定的電壓。一個(gè)低紋波、高精度的穩(wěn)壓源在儀器儀表、工業(yè)控制及測量領(lǐng)域中有著重要的實(shí)際應(yīng)用價(jià)值。本設(shè)計(jì)給出的穩(wěn)壓電源的輸出電壓范圍為0~18 V, 額定工作電流為0.5 A, 并具有“+”、“- ”步進(jìn)電壓調(diào)節(jié)功能, 其最小步進(jìn)為0.05 V,紋波不大于10 mV, 此外, 還可用LCD液晶顯示器顯示其輸出電壓

14、值。</p><p>  本設(shè)計(jì)給出了一種以STC89S52單片機(jī)為核心, 并通過控制比較調(diào)整單元基準(zhǔn)電壓的變化來來實(shí)現(xiàn)高可靠、小紋波和高精度電壓控制的直流數(shù)顯可調(diào)穩(wěn)壓電源的硬件電路組成和軟件設(shè)計(jì)流程。 </p><p>  關(guān)鍵詞: 直流數(shù)控; 穩(wěn)壓電源; 單片機(jī)STC89C52;</p><p>  Digest: The DC regulated po

15、wer supply is a familiar electric equipment , that can offer stable voltage when input voltage fluctuates or its load changes. The design of DC regulated power supply can offer voltages from 0 to 12.5V,rated wo

16、rking current 0.5A,with the function of “+” “-” step voltages regulator. Its minimum stepped voltage is 50 mV, ripple wave voltage less than 10 mV. Also, we can know its output voltage by seeing the lcd. This system giv

17、es a design process .This is a reliable , l</p><p>  Keyword: DC regulated power supply, STC 89C52</p><p><b>  方案論證與比較</b></p><p><b>  1系統(tǒng)供電部分</b></p>

18、<p>  由于該電源總共需要+21V,+15V,-15V,+5V電壓,所以我們采用雙220V/18V 變壓器,經(jīng)橋式整流濾波后得到21V電壓;由三端穩(wěn)壓器7815,7915和7805分別得到+15V,-15V和+5V電壓。</p><p><b>  2 控制器部分</b></p><p>  方案一 應(yīng)用mega16作為控制器。AVR是51的升級版

19、,具有速度快,且自帶512字節(jié)的EEPROM,不需要另外接擴(kuò)展的EEPROM的優(yōu)點(diǎn);缺點(diǎn)是,我們對AVR的使用不太熟悉,價(jià)格比較貴。</p><p>  方案二 采用STC89C52作為控制器。優(yōu)點(diǎn):技術(shù)比較熟練,使用廣泛,價(jià)格便宜,而且功能上也完全滿足本系統(tǒng)的要求;缺點(diǎn):需要連接擴(kuò)展EEPROM。</p><p>  因?yàn)楸鞠到y(tǒng)對單片機(jī)的速度要求不是很高,而且連接擴(kuò)展EEPROM也不復(fù)

20、雜,經(jīng)過比較,我們選用方案二。</p><p><b>  3 顯示部分</b></p><p>  方案一 使用LED顯示。優(yōu)點(diǎn):可視角度寬,介格便宜;缺點(diǎn):</p><p>  顯示的內(nèi)容少,介面呆板,而且占用較多的IO口資源。</p><p>  方案二 應(yīng)用1602液晶顯示模塊。優(yōu)點(diǎn):界面美觀,可顯示文字及

21、數(shù)字;缺點(diǎn):價(jià)格較貴。 通過比較,我們選節(jié)方案二。</p><p><b>  4 鍵盤部分</b></p><p>  方案一 利用I/O口直接連接的獨(dú)立式鍵盤,每鍵都有相應(yīng)的I/O口對應(yīng),編程容易控制,實(shí)現(xiàn)方便;</p><p>  方案二 利用P3口接成4*2鍵盤。優(yōu)點(diǎn):利用6個(gè)IO口得到8個(gè)按鍵,可使操作介界變得簡單,操作也方

22、便;缺點(diǎn):軟件處理比獨(dú)立按鍵復(fù)雜。</p><p>  通過比較,結(jié)合本設(shè)計(jì)不需要太多IO口,方案一為最佳方案。</p><p>  5 數(shù)模/模數(shù)轉(zhuǎn)換部分</p><p>  方案一 采用PCF8591芯片。優(yōu)點(diǎn):集AD,DA于一身;缺點(diǎn):價(jià)格昂貴,且操作不熟悉。</p><p>  方案二 數(shù)模轉(zhuǎn)換部分采用DAC0832芯片;模

23、數(shù)轉(zhuǎn)換部分采用TLC1543芯片。優(yōu)點(diǎn):兩芯片均為常用芯片,操作簡單,軟件編程簡單;缺點(diǎn):占用比較多的IO口,為PCB布線帶來困難。 經(jīng)過比較,方案二位最佳。</p><p>  6 掉電記憶部分。</p><p>  我們選用應(yīng)用最廣泛的ST24c02芯片。該芯片價(jià)格便宜,操作簡單,抗干擾強(qiáng),數(shù)據(jù)能保持一百年。</p><p>  系統(tǒng)的具體設(shè)計(jì)及實(shí)現(xiàn)<

24、/p><p><b>  系統(tǒng)總框圖</b></p><p><b>  +21V</b></p><p><b>  +15V</b></p><p><b>  -15V</b></p><p><b>  +5V<

25、/b></p><p><b>  U0</b></p><p>  2.2 硬件設(shè)計(jì)</p><p>  本系統(tǒng)由電源模塊,調(diào)壓模塊,DA轉(zhuǎn)換模塊,鍵盤模塊,EEPROM拓展模塊與顯示模塊組成。</p><p>  2.2.1 電源模塊</p><p>  220V市電經(jīng)過雙18V變壓

26、器轉(zhuǎn)換后的到+ -18V電壓,再經(jīng)過橋式整流濾波電路,得到18*1.2=21.6(V)電壓。其中+21V電壓經(jīng)過7815轉(zhuǎn)換得到穩(wěn)定+15V電壓,再經(jīng)7805轉(zhuǎn)換得到穩(wěn)定+5V電壓;-21V電壓經(jīng)過mc7915轉(zhuǎn)換得到穩(wěn)定的-15V電壓。其中,+21V為系統(tǒng)供電,+15V,-15V,+5V分別為個(gè)獨(dú)立元件供電。</p><p>  2.2.2 DA轉(zhuǎn)換模塊</p><p>  DA轉(zhuǎn)換模

27、塊由DAC0832,兩級運(yùn)放UA741組成。DAC0832具有8位分辨率,有3種工作方式(單緩沖,雙緩沖,直通)。本設(shè)計(jì)中DAC工作于直通工作方式。</p><p>  UA741為常用運(yùn)放,由美國fairchild 公司生產(chǎn),具有低漂移,穩(wěn)定等優(yōu)點(diǎn),可外置調(diào)零電路以抑制零點(diǎn)漂移。DAC0832和運(yùn)放UA1將單片機(jī)發(fā)出的八位二進(jìn)制數(shù)轉(zhuǎn)換成0—5V負(fù)電壓,再經(jīng)過反向比例放大器UA2將負(fù)電壓轉(zhuǎn)換成0—10V正電壓。經(jīng)

28、過兩級運(yùn)放放大后,DAC0832的轉(zhuǎn)換分辨率為10/(2^8-1)=0.04V。即單片機(jī)向DAC送出的數(shù)據(jù)變化1BIT,運(yùn)放UA2輸出的電壓值改變0.04V?;瑒?dòng)變阻器VR2的作用為調(diào)零電路以抑制零點(diǎn)漂移。</p><p>  2.2.3 電壓調(diào)整模塊</p><p>  本設(shè)計(jì)的電壓調(diào)整模塊如上圖所示。T1,T2組成復(fù)合管,以實(shí)現(xiàn)大電流輸出。由于該設(shè)計(jì)預(yù)定額定電流為0.5A,最大輸出電

29、壓為12.5V,所以要求T1管射極最大功率Pmax=0.5*12.5=6.25W,所以選取TIP41c。T3管9013和電阻R9為限流保護(hù)部分。當(dāng)輸出電流大于0.7A時(shí),R9上的壓降為0.7V使得T3管導(dǎo)通,T3管集電極對T2管基極分流,使得T2管基極電流明顯變小使得輸出電流變小,從而達(dá)到過流保護(hù)的功能。發(fā)光二極管起過流提醒作用。</p><p>  電壓調(diào)整模塊的核心部分是NE5534。NE5534生產(chǎn)于美國德

30、州半導(dǎo)體公司,具有共模抑制比高,響應(yīng)速度快和壓擺率高等優(yōu)點(diǎn),常用于音響,耳機(jī)等設(shè)備。由DA及運(yùn)放轉(zhuǎn)換后的電壓U1輸入到NE5534的正向輸入端,R10 R22 R11組成NE5534的取樣電路。由于NE5534 T1 T2及取樣電路構(gòu)成負(fù)反饋,由運(yùn)放的“虛短”特點(diǎn),NE5534的反向輸入端的電壓U2為正向輸入端的電壓大小U1。由于運(yùn)放還有“虛斷”的特點(diǎn),運(yùn)放的輸入端對流經(jīng)取樣電路的電流不起分流作用,所以輸出電壓U0/U2=(R10+R1

31、1+R22)/(R11+R22)=1.25。</p><p>  即U2每改變0.04V,U0改變0.05V。由于單片機(jī)輸入到DAC0832的二進(jìn)制數(shù)據(jù)每改變1BIT,U1改變0.04V即U2改變0.04V,所以U0改變0.05V。因此,該設(shè)計(jì)最小步進(jìn)電壓為0.05V。電容C16的作用為抑制輸出紋波電壓。</p><p>  2.2.4 鍵盤模塊</p><p>

32、  系統(tǒng)共設(shè)置了9個(gè)獨(dú)立按鍵,實(shí)現(xiàn)了常用電壓設(shè)定,電壓“+”“—”設(shè)定及正常關(guān)機(jī)辨別的功能。</p><p>  2.2.5 EEPROM拓展模塊</p><p>  為了實(shí)現(xiàn)設(shè)定電壓數(shù)據(jù)的掉電保護(hù),我們在系統(tǒng)中連接了擴(kuò)展EEPROM 24C02B,保證了在行駛過程中,如果數(shù)控電源意外掉電,已經(jīng)設(shè)定的電壓數(shù)據(jù)能夠保存下來。</p><p>  24C02B是AT

33、MEL公司生產(chǎn)的一款256 byte的串行EEPROM,能重復(fù)擦寫1,000,000次,記錄的信息能保存100年以上,而且與單片機(jī)的連接只需要2根線。24C02B的接圖如上圖所示。</p><p>  2.2.6 顯示模塊</p><p>  上圖為顯示模塊的接圖。顯示模塊主要由TLC1543及LCD液晶顯示屏組成。由美國德州公司生產(chǎn)的TLC1543,是具有10位分辨率的AD轉(zhuǎn)換器,,

34、它具有11路模擬輸入通道及3路內(nèi)置自測試方式,具有顯著的優(yōu)點(diǎn)。LCD液晶屏幕采用1602,能夠顯示16X2個(gè)字符。由輸出端采樣得到的模擬信號,輸入到TLC1543的其中一路模擬輸入通道INT0,。通過AD的轉(zhuǎn)換,TLC1543將模擬量轉(zhuǎn)化為10位數(shù)字量輸入到單片機(jī)相應(yīng)的IO口。通過處理,單片機(jī)將模擬量值通過1602液晶顯示出來。</p><p><b>  2.3 軟件設(shè)計(jì)</b><

35、/p><p>  2.3 .1主程序流程</p><p>  主程序流程圖如下圖:</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  (1)</b></p><p><b

36、>  (1)</b></p><p>  2.3.2 鍵盤程序流程圖</p><p>  本系統(tǒng)中鍵盤程序分為鍵盤掃描子程序和按鍵功能執(zhí)行子程序。鍵盤掃描子程序流程圖如下圖2-3-2所示,按鍵功能子程序流程圖如下圖2-3-3所示:</p><p>  圖2-3-2 鍵盤掃描子程序流程圖</p><p>  圖2-3-3

37、按鍵功能執(zhí)行子程序流程圖</p><p>  2.3.3 EEPROM讀寫程序流程</p><p>  24C02B讀寫程序流程圖如下圖2-3-4和圖2-3-5所示。</p><p>  圖2-3-4 24C02B寫入程序流程圖</p><p>  圖2-3-5 24C02B讀取程序流程圖</p><p>  2.3

38、. 4 DAC0832程序流程</p><p>  DAC0832的程序流程圖如下所示:</p><p>  2.3. 5 TLC1543程序流程</p><p>  TLC1543的小程序流程圖如下所示:</p><p><b>  測試、結(jié)果及分析</b></p><p>  觀察系統(tǒng)運(yùn)

39、行狀況,并輔助示波器、萬用表得到以下結(jié)果。</p><p><b>  3.1 基本功能</b></p><p><b>  表3-1</b></p><p>  3.2 發(fā)揮功能部分</p><p><b>  表3-2</b></p><p> 

40、 3.3 其他發(fā)揮部分</p><p><b>  表3-3</b></p><p>  3.4 詳細(xì)的測試數(shù)據(jù):</p><p>  開機(jī),LCD顯示歡迎界面</p><p>  按下粗調(diào)電壓+鍵,顯示電壓改變1V</p><p>  (3)按下精調(diào)電壓+鍵,顯示電壓改變0.05V</

41、p><p>  按下精調(diào)電壓-鍵,顯示電壓改變0.05V</p><p> ?。?)按下粗調(diào)電壓-鍵,顯示電壓改變1V </p><p> ?。?)按下常用電壓3V鍵,顯示電壓改變</p><p>  (6)按下常用電壓6V鍵,顯示電壓改變</p><p>  (7)按下常用電壓9V鍵,顯示電壓改變</p>

42、<p>  (7)按下常用電壓12V鍵,顯示電壓改變</p><p>  (8)若此時(shí)掉電,下次開機(jī)時(shí),顯示電壓為</p><p><b>  四.總結(jié)</b></p><p>  本設(shè)計(jì)基本完成數(shù)控直流穩(wěn)壓電源的基本功能和發(fā)揮功能,采用1602液晶顯示,可視面積大,界面美觀。采用NE5534作為電壓調(diào)整模塊的核心,使得輸出電壓極為穩(wěn)

43、定。還擴(kuò)展了精調(diào)粗調(diào)功能,使用戶能對電壓進(jìn)行更加詳細(xì)地設(shè)置。經(jīng)過調(diào)試,系統(tǒng)運(yùn)行穩(wěn)定,各項(xiàng)功能都比較完美地實(shí)現(xiàn)了。</p><p>  經(jīng)過本次設(shè)計(jì),我對8952單片機(jī)有了更深層次的了解!</p><p><b>  參考文獻(xiàn):</b></p><p>  [1] 求是科技 、C程序設(shè)計(jì)完全手冊 北京:人民郵電出版社 2006</p>

44、;<p>  [2] 張毅剛、彭喜元 新編MCS-51單片機(jī)應(yīng)用設(shè)計(jì)(第3版) 哈爾濱:哈爾濱工業(yè)大學(xué)出版社 2008</p><p>  [3]馬忠梅 籍順心 張凱 馬巖、單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)(第3版) 北京:北京航空航天大學(xué)出版社2003</p><p>  附錄一 本設(shè)計(jì)的電路原理圖。</p><p>  附錄二 完整的系統(tǒng)源代碼:&

45、lt;/p><p>  #include <reg52.h></p><p>  #include <intrins.h></p><p>  #include <math.h></p><p>  #define uint unsigned int </p><p>  #define

46、 uchar unsigned char </p><p>  typedef unsigned char BYTE;</p><p>  typedef unsigned int WORD;</p><p>  typedef bit BOOL ;</p><p>  BYTE code dis1[] = {"Power Supp

47、ly"};</p><p>  BYTE code dis2[] = {"welcome!"};</p><p>  BYTE code dis3[] = {"Please wait..."};</p><p>  BYTE code dis4[] = {"SetValue: "};</p&

48、gt;<p>  BYTE code dis5[] = {"Output: "};</p><p>  BYTE setv[6],getv[6];//LCD輸出字符組</p><p>  float n,setvalue;//電壓設(shè)定值</p><p>  float dq,dp,qq,pp,l,xx;//轉(zhuǎn)換傳遞參數(shù)</p&

49、gt;<p>  uchar ctu,outv,inv;//DA與AD部分傳遞參數(shù)</p><p>  sbit TLCEOC=P2^4;//TLC占用IO口</p><p>  sbit TLCCL=P2^3;</p><p>  sbit TLCAD=P2^2;</p><p>  sbit TLCOUT=P2^1;<

50、/p><p>  sbit TLCCS=P2^0;</p><p>  sbit scl=P1^6;//斷電保存占用IO口</p><p>  sbit sda=P1^7;</p><p>  sbit DACS=P1^4;//DA占用IO口</p><p>  sbit DAWR=P1^5;</p><

51、;p>  sbit rs= P2^7;//液晶LCD占用IO口</p><p>  sbit rw = P2^6;</p><p>  sbit ep = P2^5;</p><p>  void delay(BYTE ms)// 延時(shí)子程序</p><p><b>  {</b></p>

52、<p><b>  BYTE i;</b></p><p>  while(ms--)</p><p><b>  {</b></p><p>  for(i = 0; i< 250; i++)</p><p><b>  {</b></p>

53、<p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  

54、}</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /***************************************************</p><p>  ***************** LCD顯示

55、子函數(shù)組 ****************</p><p>  ***************************************************/</p><p>  BOOL lcd_bz()</p><p>  {// 測試LCD忙碌狀態(tài)</p><p>  BOOL result;</p>

56、;<p><b>  rs = 0;</b></p><p><b>  rw = 1;</b></p><p><b>  ep = 1;</b></p><p><b>  _nop_();</b></p><p><b>  

57、_nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  result = (BOOL)(P0 & 0x80);</p><p><b>  ep = 0;</b>

58、;</p><p>  return result;</p><p><b>  }</b></p><p>  lcd_wcmd(BYTE cmd)</p><p>  {// 寫入指令數(shù)據(jù)到LCD</p><p>  while(lcd_bz());</p>&l

59、t;p><b>  rs = 0;</b></p><p><b>  rw = 0;</b></p><p><b>  ep = 0;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_

60、();</b></p><p><b>  P0 = cmd;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></

61、p><p><b>  _nop_();</b></p><p><b>  ep = 1;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b

62、>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  ep = 0;</b></p><p><b>  }</b></p><p>  lcd_pos(BYTE pos)</p>

63、<p>  {//設(shè)定顯示位置</p><p>  lcd_wcmd(pos | 0x80);</p><p><b>  }</b></p><p>  lcd_wdat(BYTE dat)</p><p>  {//寫入字符顯示數(shù)據(jù)到LCD</p><p&g

64、t;  while(lcd_bz());</p><p><b>  rs = 1;</b></p><p><b>  rw = 0;</b></p><p><b>  ep = 0;</b></p><p><b>  P0 = dat;</b>&l

65、t;/p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>&

66、lt;b>  ep = 1;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();<

67、;/b></p><p><b>  ep = 0;</b></p><p><b>  }</b></p><p>  lcd_init()</p><p>  {//LCD初始化設(shè)定</p><p>  lcd_wcmd(0x38);//<

68、;/p><p><b>  delay(1);</b></p><p>  lcd_wcmd(0x0c);//</p><p><b>  delay(1);</b></p><p>  lcd_wcmd(0x06);//</p><p><b>  del

69、ay(1);</b></p><p>  lcd_wcmd(0x01);//清除LCD的顯示內(nèi)容</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  /*********************************

70、******************</p><p>  ***************** DA輸出函數(shù) ********************</p><p>  ***************************************************/</p><p>  void write_da()</p><p&

71、gt;<b>  {</b></p><p><b>  P0=outv;</b></p><p><b>  delay(1);</b></p><p><b>  DACS=0;</b></p><p><b>  delay(1);<

72、/b></p><p><b>  DAWR=0;</b></p><p><b>  delay(1);</b></p><p><b>  delay(1);</b></p><p><b>  DAWR=1;</b></p>&l

73、t;p><b>  delay(1);</b></p><p><b>  DACS=1;</b></p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  /****************

74、***********************************</p><p>  ***************** AD(TLC)讀取函數(shù) **************</p><p>  ***************************************************/</p><p>  void read_tlc()<

75、;/p><p><b>  {</b></p><p>  float vad;</p><p><b>  int i;</b></p><p><b>  i=2;</b></p><p><b>  while(i)</b><

76、;/p><p><b>  {</b></p><p>  uchar temp;</p><p><b>  vad=0;</b></p><p><b>  TLCEOC=1;</b></p><p><b>  delay(1);</

77、b></p><p><b>  TLCCL=0;</b></p><p><b>  TLCCS=0;</b></p><p><b>  delay(1);</b></p><p>  TLCCL=0;//1</p><p><b>

78、  TLCAD=0;</b></p><p>  temp=TLCOUT;</p><p>  if(temp==1)</p><p><b>  {</b></p><p>  vad=vad+512;</p><p><b>  }</b></p>

79、;<p><b>  delay(1);</b></p><p><b>  TLCCL=1;</b></p><p><b>  delay(1);</b></p><p>  TLCCL=0;//2</p><p><b>  TLCAD=0;<

80、;/b></p><p>  temp=TLCOUT;</p><p>  if(temp==1)</p><p><b>  {</b></p><p>  vad=vad+256;</p><p><b>  }</b></p><p>&

81、lt;b>  delay(1);</b></p><p><b>  TLCCL=1;</b></p><p><b>  delay(1);</b></p><p>  TLCCL=0;//3</p><p><b>  TLCAD=0;</b></p

82、><p>  temp=TLCOUT;</p><p>  if(temp==1)</p><p><b>  {</b></p><p>  vad=vad+128;</p><p><b>  }</b></p><p><b>  del

83、ay(1);</b></p><p><b>  TLCCL=1;</b></p><p><b>  delay(1);</b></p><p>  TLCCL=0;//4</p><p><b>  TLCAD=1;</b></p><p&g

84、t;  temp=TLCOUT;</p><p>  if(temp==1)</p><p><b>  {</b></p><p>  vad=vad+64;</p><p><b>  }</b></p><p><b>  delay(1);</b&g

85、t;</p><p><b>  TLCCL=1;</b></p><p><b>  delay(1);</b></p><p>  TLCCL=0;//5</p><p>  temp=TLCOUT;</p><p>  if(temp==1)</p>&l

86、t;p><b>  {</b></p><p>  vad=vad+32;</p><p><b>  }</b></p><p><b>  delay(1);</b></p><p><b>  TLCCL=1;</b></p>&

87、lt;p><b>  delay(1);</b></p><p>  TLCCL=0;//6</p><p>  temp=TLCOUT;</p><p>  if(temp==1)</p><p><b>  {</b></p><p>  vad=vad+16;&l

88、t;/p><p><b>  }</b></p><p><b>  delay(1);</b></p><p><b>  TLCCL=1;</b></p><p><b>  delay(1);</b></p><p>  TLCC

89、L=0;//7</p><p>  temp=TLCOUT;</p><p>  if(temp==1)</p><p><b>  {</b></p><p>  vad=vad+8;</p><p><b>  }</b></p><p><

90、b>  delay(1);</b></p><p><b>  TLCCL=1;</b></p><p><b>  delay(1);</b></p><p>  TLCCL=0;//8</p><p>  temp=TLCOUT;</p><p>  i

91、f(temp==1)</p><p><b>  {</b></p><p>  vad=vad+4;</p><p><b>  }</b></p><p><b>  delay(1);</b></p><p><b>  TLCCL=1;

92、</b></p><p><b>  delay(1);</b></p><p>  TLCCL=0;//9</p><p>  temp=TLCOUT;</p><p>  if(temp==1)</p><p><b>  {</b></p>&

93、lt;p>  vad=vad+2;</p><p><b>  }</b></p><p><b>  delay(1);</b></p><p><b>  TLCCL=1;</b></p><p><b>  delay(1);</b><

94、/p><p>  TLCCL=0;//10</p><p>  temp=TLCOUT;</p><p>  if(temp==1)</p><p><b>  {</b></p><p>  vad=vad+1;</p><p><b>  }</b>

95、</p><p><b>  delay(1);</b></p><p><b>  TLCCL=1;</b></p><p><b>  delay(1);</b></p><p><b>  TLCEOC=0;</b></p><p

96、><b>  delay(1);</b></p><p><b>  TLCCS=1;</b></p><p><b>  delay(1);</b></p><p><b>  i--;</b></p><p><b>  }</b

97、></p><p>  inv=(vad/1023)*255;</p><p><b>  }</b></p><p>  /***************************************************</p><p>  ***************** 字符類型轉(zhuǎn)換函數(shù) ****

98、***********</p><p>  ***************************************************/</p><p>  void change(float nn,BYTE a[5]) //float轉(zhuǎn)字符數(shù)組</p><p><b>  {</b></p><p>

99、<b>  uint i,y;</b></p><p>  float x=nn*100;</p><p>  for(i=0;i<4;i++)</p><p><b>  {</b></p><p>  y=x/(pow(10,(3-i)));</p><p><

100、;b>  switch(y)</b></p><p><b>  {</b></p><p>  case 0 : a[i]='0' ; break;</p><p>  case 1 : a[i]='1' ; break;</p><p>  case 2 : a[i]

101、='2' ; break;</p><p>  case 3 : a[i]='3' ; break;</p><p>  case 4 : a[i]='4' ; break;</p><p>  case 5 : a[i]='5' ; break;</p><p>  case

102、6 : a[i]='6' ; break;</p><p>  case 7 : a[i]='7' ; break;</p><p>  case 8 : a[i]='8' ; break;</p><p>  case 9 : a[i]='9' ; break;</p><p>

103、;<b>  }</b></p><p>  x=x-y*(pow(10,(3-i)));</p><p><b>  }</b></p><p>  a[4]=a[3];</p><p>  a[3]=a[2];</p><p><b>  a[2]='.

104、';</b></p><p><b>  a[5]='V';</b></p><p><b>  }</b></p><p>  void changetf()//UCHAR轉(zhuǎn)FLOAT</p><p><b>  {</b></p&g

105、t;<p>  setvalue=(dq*13)/255;</p><p>  l=dp*13/255/100;</p><p>  setvalue=setvalue+l+0.02;</p><p><b>  }</b></p><p>  void changetu() //float轉(zhuǎn)UCHAR&l

106、t;/p><p><b>  {</b></p><p>  qq=setvalue*255/13;</p><p><b>  ctu=qq;</b></p><p>  pp=(qq-ctu)*100;</p><p><b>  }</b></p

107、><p>  /***************************************************</p><p>  ***************** 鍵盤掃描函數(shù) *******************</p><p>  ***************************************************/</p&

108、gt;<p>  void keyscan()</p><p><b>  {</b></p><p>  uchar temp1,temp;</p><p><b>  P3=0xff;</b></p><p><b>  temp1=P3;</b></

109、p><p>  while(temp1==0xff)//等待按鍵</p><p><b>  {</b></p><p><b>  P3=0xff;</b></p><p><b>  temp1=P3;</b></p><p><b>  }&

110、lt;/b></p><p>  temp=temp1;//記錄按鍵</p><p>  while(temp1!=0xff)//等待松手</p><p><b>  {</b></p><p><b>  P3=0xff;</b></p><p><b> 

111、 temp1=P3;</b></p><p><b>  }</b></p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0x7f: setvalue=setvalue+0.05;break;</p><

112、p>  case 0xbf: setvalue=setvalue-0.05;break;</p><p>  case 0xdf: setvalue=setvalue+0.5;break;</p><p>  case 0xef: setvalue=setvalue-0.5;break;</p><p>  case 0xf7: setvalue=3;brea

113、k;</p><p>  case 0xfb: setvalue=5;break;</p><p>  case 0xfd: setvalue=9;break;</p><p>  case 0xfe: setvalue=12;break;</p><p><b>  }</b></p><p&g

114、t;  if(setvalue>13)</p><p>  setvalue=13;</p><p>  if(setvalue<0)</p><p>  setvalue=0;</p><p><b>  }</b></p><p>  /*********************

115、******************************</p><p>  ***************** 開機(jī)歡迎界面 *******************</p><p>  ***************************************************/</p><p>  void welcome()//歡迎界面

116、</p><p><b>  {</b></p><p><b>  BYTE i;</b></p><p>  lcd_init();// 初始化LCD</p><p>  delay(10);</p><p>  lcd_pos(2);// 設(shè)置顯示

117、位置為第一行的第5個(gè)字符</p><p><b>  i = 0;</b></p><p>  while(dis1[i] != '\0')</p><p><b>  {</b></p><p>  lcd_wdat(dis1[i]);// 顯示字符</p><

118、;p><b>  i++;</b></p><p><b>  }</b></p><p>  lcd_pos(0x44);// 設(shè)置顯示位置為第二行第二個(gè)字符</p><p><b>  i = 0;</b></p><p>  while(dis2[i] !=

119、'\0')</p><p><b>  {</b></p><p>  lcd_wdat(dis2[i]);// 顯示字符</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  del

120、ay(200);</p><p>  delay(200);</p><p>  delay(200);</p><p>  delay(200);</p><p>  delay(200);</p><p>  lcd_wcmd(0x01);//清除LCD的顯示內(nèi)容</p><p> 

121、 lcd_pos(1);// 設(shè)置顯示位置為第一行的第1個(gè)字符</p><p><b>  i = 0;</b></p><p>  while(dis3[i] != '\0')</p><p><b>  {</b></p><p>  lcd_wdat(dis3[i])

122、;// 顯示字符</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  delay(200);</p><p>  delay(200);</p><p>  delay(200);</p><p>

123、;  delay(200);</p><p>  delay(200);</p><p><b>  }</b></p><p>  /***************************************************</p><p>  ***************** 當(dāng)前參數(shù)顯示界面

124、***************</p><p>  ***************************************************/</p><p>  void show()//歡迎界面</p><p><b>  {</b></p><p><b>  BYTE i;</

125、b></p><p>  lcd_init();// 初始化LCD</p><p>  delay(10);</p><p>  lcd_pos(0);// 設(shè)置顯示位置為第一行的第5個(gè)字符</p><p><b>  i = 0;</b></p><p>  whil

126、e(dis4[i] != '\0')</p><p><b>  {</b></p><p>  lcd_wdat(dis4[i]);// 顯示字符</p><p><b>  i++;</b></p><p><b>  }</b></p>&

127、lt;p><b>  i = 0;</b></p><p>  while(i<6)</p><p><b>  {</b></p><p>  lcd_wdat(setv[i]);// 顯示字符</p><p><b>  i++;</b></p>

128、<p><b>  }</b></p><p>  lcd_pos(0x42);// 設(shè)置顯示位置為第二行第二個(gè)字符</p><p><b>  i = 0;</b></p><p>  while(dis5[i] != '\0')</p><p><b>

129、;  {</b></p><p>  lcd_wdat(dis5[i]);// 顯示字符</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  i = 0;</b></p><p>

130、;  while(i<6)</p><p><b>  {</b></p><p>  lcd_wdat(getv[i]);// 顯示字符</p><p><b>  i++;</b></p><p><b>  }</b></p><p>&l

131、t;b>  }</b></p><p>  void read()//讀取</p><p><b>  {</b></p><p>  _24hc_init();</p><p><b>  start();</b></p><p>  write_byte

132、(0xa0);//器件地址(寫)</p><p>  response();</p><p>  write_byte(3); //器件內(nèi)部存儲(chǔ)區(qū)地址</p><p>  response();</p><p><b>  start();</b></p><p>  write_byte(0xa

133、1); //器件地址(讀) 1010 000 1</p><p>  response();</p><p>  dq=read_byte();//讀取的數(shù)據(jù)賦予dq</p><p><b>  stop();</b></p><p>  write_byte(4); //器件內(nèi)部存儲(chǔ)區(qū)地址</p>&l

134、t;p>  response();</p><p><b>  start();</b></p><p>  write_byte(0xa1); //器件地址(讀) 1010 000 1</p><p>  response();</p><p>  dp=read_byte();//讀取的數(shù)據(jù)賦予dq</

135、p><p><b>  stop();</b></p><p><b>  }</b></p><p>  /***************************************************</p><p>  ***************** 程序初始化 *********

136、************</p><p>  ***************************************************/</p><p>  void init()</p><p><b>  {</b></p><p>  change(0,setv);</p><p&

137、gt;  change(0,getv);</p><p>  setvalue=0;</p><p><b>  outv=0;</b></p><p><b>  inv=0;</b></p><p><b>  }</b></p><p>  /**

138、*************************************************</p><p>  ***************** 主函數(shù) **********************</p><p>  ***************************************************/</p><p>  void

139、 main()</p><p><b>  {</b></p><p>  init();//初始化</p><p>  welcome();//歡迎界面</p><p>  read();//讀取上次關(guān)機(jī)時(shí)的設(shè)定參數(shù)</p><p>  changetf();//參數(shù)類型轉(zhuǎn)換</p>

140、<p>  change(setvalue,setv);//參數(shù)類型轉(zhuǎn)換</p><p>  show();//當(dāng)前參數(shù)顯示</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  keyscan();//鍵盤掃描</p&

溫馨提示

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

提交評論