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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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 數模/模數轉換部分…………………………………………………4</p><

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

4、p>  電源模塊……………………………………………………6</p><p>  DA轉換模塊……………………………………………… 6</p><p>  電壓調整模塊………………………………………………7</p><p>  鍵盤模塊……………………………………………………8</p><p>  EEPROM拓展模塊…………………………

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

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

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

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

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

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

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

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

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

14、值。</p><p>  本設計給出了一種以STC89S52單片機為核心, 并通過控制比較調整單元基準電壓的變化來來實現高可靠、小紋波和高精度電壓控制的直流數顯可調穩(wěn)壓電源的硬件電路組成和軟件設計流程。 </p><p>  關鍵詞: 直流數控; 穩(wěn)壓電源; 單片機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 變壓器,經橋式整流濾波后得到21V電壓;由三端穩(wěn)壓器7815,7915和7805分別得到+15V,-15V和+5V電壓。</p><p><b>  2 控制器部分</b></p><p>  方案一 應用mega16作為控制器。AVR是51的升級版

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

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

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

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

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

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 硬件設計</p><p>  本系統(tǒng)由電源模塊,調壓模塊,DA轉換模塊,鍵盤模塊,EEPROM拓展模塊與顯示模塊組成。</p><p>  2.2.1 電源模塊</p><p>  220V市電經過雙18V變壓

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

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

28、過兩級運放放大后,DAC0832的轉換分辨率為10/(2^8-1)=0.04V。即單片機向DAC送出的數據變化1BIT,運放UA2輸出的電壓值改變0.04V?;瑒幼冏杵鱒R2的作用為調零電路以抑制零點漂移。</p><p>  2.2.3 電壓調整模塊</p><p>  本設計的電壓調整模塊如上圖所示。T1,T2組成復合管,以實現大電流輸出。由于該設計預定額定電流為0.5A,最大輸出電

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

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

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

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

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

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

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

36、> ?。?)</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>  測試、結果及分析</b></p><p>  觀察系統(tǒng)運

39、行狀況,并輔助示波器、萬用表得到以下結果。</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 詳細的測試數據:</p><p>  開機,LCD顯示歡迎界面</p><p>  按下粗調電壓+鍵,顯示電壓改變1V</p><p> ?。?)按下精調電壓+鍵,顯示電壓改變0.05V</

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

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

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

44、;<p>  [2] 張毅剛、彭喜元 新編MCS-51單片機應用設計(第3版) 哈爾濱:哈爾濱工業(yè)大學出版社 2008</p><p>  [3]馬忠梅 籍順心 張凱 馬巖、單片機的C語言應用程序設計(第3版) 北京:北京航空航天大學出版社2003</p><p>  附錄一 本設計的電路原理圖。</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;//電壓設定值</p><p>  float dq,dp,qq,pp,l,xx;//轉換傳遞參數</p&

49、gt;<p>  uchar ctu,outv,inv;//DA與AD部分傳遞參數</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)// 延時子程序</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、子函數組 ****************</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>  {// 寫入指令數據到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>  {//設定顯示位置</p><p>  lcd_wcmd(pos | 0x80);</p><p><b>  }</b></p><p>  lcd_wdat(BYTE dat)</p><p>  {//寫入字符顯示數據到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初始化設定</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的顯示內容</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  /*********************************

70、******************</p><p>  ***************** DA輸出函數 ********************</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)讀取函數 **************</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>  ***************** 字符類型轉換函數 ****

98、***********</p><p>  ***************************************************/</p><p>  void change(float nn,BYTE a[5]) //float轉字符數組</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轉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轉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>  ***************** 鍵盤掃描函數 *******************</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>  ***************** 開機歡迎界面 *******************</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);// 設置顯示

117、位置為第一行的第5個字符</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);// 設置顯示位置為第二行第二個字符</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的顯示內容</p><p> 

121、 lcd_pos(1);// 設置顯示位置為第一行的第1個字符</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>  ***************** 當前參數顯示界面

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);// 設置顯示位置為第一行的第5個字符</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);// 設置顯示位置為第二行第二個字符</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); //器件內部存儲區(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();//讀取的數據賦予dq</p><p><b>  stop();</b></p><p>  write_byte(4); //器件內部存儲區(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();//讀取的數據賦予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>  ***************** 主函數 **********************</p><p>  ***************************************************/</p><p>  void

139、 main()</p><p><b>  {</b></p><p>  init();//初始化</p><p>  welcome();//歡迎界面</p><p>  read();//讀取上次關機時的設定參數</p><p>  changetf();//參數類型轉換</p>

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論