1 / 14

電壓表

電壓表. 姓名 : 陳奕全 學號 :B09322003 指導老師 : 王志湖 老師 班級 : 通訊二甲. 目錄. 題目 系統方塊圖 電路圖 程式流程圖 程式及註解. 題目. 試用 DAC0804 設計一個 -2.5V~2.5V 的電壓表 , 使用二元搜尋法或位移搜尋法來撰寫 , 電壓結果需顯示於七段顯示器上. 系統方塊圖. 七段顯示器. Vx. uC. DAC 轉換器. 比較器. PC. 電路圖. 電路原理. Iref=2.5V/5k=0.5mA Ifs=0.5mA x 255/256=0.498mA

arwen
Download Presentation

電壓表

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 電壓表 姓名:陳奕全 學號:B09322003 指導老師:王志湖 老師 班級:通訊二甲

  2. 目錄 • 題目 • 系統方塊圖 • 電路圖 • 程式流程圖 • 程式及註解

  3. 題目 試用DAC0804設計一個-2.5V~2.5V的電壓表, 使用二元搜尋法或位移搜尋法來撰寫,電壓結果需顯示於七段顯示器上

  4. 系統方塊圖 七段顯示器 Vx uC DAC轉換器 比較器 PC

  5. 電路圖

  6. 電路原理 Iref=2.5V/5k=0.5mA Ifs=0.5mA x 255/256=0.498mA Io=0.5mA x 127/256=0.248mA Ifs=Io+Io => Io=Ifs-Io=0.498-0.248=0.25mA V3=-0.25 x 5k=-1.25V V2=V3=-1.25V V6=V2+5k x 0.248mA= -0.01V

  7. 程式流程圖 Main 1 二元搜尋法 七段顯示器 判斷正負號 並計算 實際電壓 Delay END 1

  8. 二元搜尋法 二元搜尋法 Low=w 定義初始值 Low=0,Up=255 i=0 i++ W=(Up+Low)/2 i=7? yes P1=W no Volt=W COMPARE_PORT=0? yes Up=w return no

  9. 判斷正負號並計算實際電壓 判斷正負號 取出小數點 第一第二位個位數 m=volt-128 M : 0 op[2]=小數第二位 op[1]=小數第一位 op[0]=個位數 < >= 為正 為負 return return

  10. 七段顯示器 七段顯示器輸出值 P2^0=0,給小數點 Delay i=0 P0=~scan[i] 輸出數值 End P0遮沒 i++ P2=OP[i] Yes i<=3? no i=2? no yes

  11. 主程式 #include <reg51.h> #include <math.h> unsigned char value,volt,op[4]; //宣告變數 int i; sbit compare_port=P3^4; //比較器傳回的數值 sbit P2_0=P2^0; //小數點 unsigned char code seg7[12]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xE6,0x00,0x02}; // 0 1 2 3 4 5 6 7 8 9 + - unsigned char code scan[4]={0x01,0x02,0x04,0x08};//掃描陣列 //--------------宣告副程式------------------------------------------- void convert(void); //二元搜尋法 void voltage(void); //判斷正負電壓 void delay(int); //延遲 void seg(void); //七段輸出 //--------------主程式--------------------------------------- void main(void) { while(1) { convert(); //轉換電壓 voltage(); //判斷正負電壓 seg(); //七段輸出 } }

  12. 二元搜尋法 //----------------------二元搜尋法-------------------------------------- void convert(void) { int low=0,up=255,w; //設定初始值為0~255 for(i=7;i>=0;i--) //總共搜尋8次 { w=(up+low)/2; P2=w; //輸出至DAC delay(1); if (compare_port==0) //if compare為0 up=w; //比較上限變更為up(0~127) else //否則 low=w; //比較上限變更為low(127~255) } volt=w; }

  13. 判斷正負號並計算實際電壓 //-----------正負電壓判斷------------------------------------- void voltage(void) { char f; f=(volt-128); //以128為基準以判斷正負號 if(f>=0) { op[3]=seg7[10]; //op[3]為正負號所亮之位子,seg7為選擇正負號之位子 } else { op[3]=seg7[11]; } value=abs(f*2); //取絕對值後*2 op[0]=seg7[(value%100)%10]; //小數點第一位 op[1]=seg7[(value%100)/10]; //小數點第二位 op[3]=seg7[volt/100]; //個位數 }

  14. 七段顯示器&Delay //-----------七段顯示器---------------------------------------- void seg(void) { for(i=0;i<=3;i++) //依序輸出4次數值 { P0=0xFF; //遮沒 P2=~op[i]; //依序輸出鍵表裡的數值 if(i==2) //當等於個位數時 P2_0=0; //強迫小數點亮燈 P0=~scan[i]; //輸出為亮燈之位子 delay(100); } } //------------延遲----------------------------------------------- void delay(int x) { int i; for(i=1;i<=x;i++); }

More Related