14
電電電 姓姓 : 姓姓姓 姓姓 :B09322003 姓姓姓姓 : 姓姓姓 姓姓 姓姓 : 姓姓姓姓

電壓表

  • Upload
    arwen

  • View
    35

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: 電壓表

電壓表

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

Page 2: 電壓表

目錄1. 題目2. 系統方塊圖3. 電路圖4. 程式流程圖5. 程式及註解

Page 3: 電壓表

題目

試用 DAC0804 設計一個 -2.5V~2.5V 的電壓表 ,

使用二元搜尋法或位移搜尋法來撰寫 , 電壓結果需顯示於七段顯示器上

Page 4: 電壓表

系統方塊圖

uCDAC轉換器比較器

七段顯示器

PC

Vx

Page 5: 電壓表

電路圖

a

Q5

Q2N2222

B3

P2.2

Vx

P0.6

82

21

b

B2

P2.1

R16

5k+5V

P0.7

R20

5k

a

P2.0

R15

1k

21

-2.5V

16

C1

0.01uF

R14

10k

2

1

P0.7

COMP

R3

10k

21

+5V

1

0

P0.6

DG1

21

vlc

-5V

14

P0.5

DG2

vrf(+)R13

10k

21

Q1

Q2N3906

R18

5k

21

+5V

150

P0.4

DG3

21

vrf(-)

-5V

2

21

Q3

Q2N3906

P0.3

DG4

msb1

Q4

Q2N3906

Q2

Q2N3906

R1

10k

21

P2.3

4

P0.0

8051

0

P0.1

P3.0

e

21

21

Iout

P2.2

13

P0.1

P0.0

dot

d

R2

10k

21

Iout

P0.2

U1A

LM339

5

4

312

2

+

-

V+

V-

OUT

DAC0800

g

dot

lsbB8

P0.2

C2

0.1uF

P2.1

R19

5k

f

c

B7

P0.3

P2.0

21

e

g

0

C3

0.1uF

B6

P0.4

0

d

b

LM741

3

2

74

6

1

5+

-

V+

V-

OUT

OS1

OS2

B5

P0.5

P2.3

3

c

f

0

R4

10k

21

B4

V-

21

Page 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

Page 7: 電壓表

程式流程圖

Main

二元搜尋法

判斷正負號並計算

實際電壓

七段顯示器

1

1

Delay

END

Page 8: 電壓表

二元搜尋法二元搜尋法

定義初始值Low=0,Up=255

i=0

W=(Up+Low)/2

P1=W

COMPARE_PORT=0? Up=w

yes

Low=w

no

i++

i=7?yes

Volt=W

no

return

Page 9: 電壓表

判斷正負號並計算實際電壓

return

判斷正負號

m=volt-128

op[2]= 小數第二位op[1]= 小數第一位op[0]= 個位數

為負

M : 0

為正

return

>=

<

取出小數點

第一第二位個位數

Page 10: 電壓表

七段顯示器七段顯示器輸出值

End

i=0

P0 遮沒

P2=OP[i]

i=2?

P2^0=0, 給小數點

P0=~scan[i]輸出數值

i++

i<=3?

yes

no

Yes

Delay

no

Page 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(); //七段輸出 }}

Page 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;}

Page 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]; //個位數}

Page 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++);}